Skip to content

Instantly share code, notes, and snippets.

@luctrudeau
Last active January 16, 2018 02:26
Show Gist options
  • Save luctrudeau/64f60712b4b1411a18b9407c47e57208 to your computer and use it in GitHub Desktop.
Save luctrudeau/64f60712b4b1411a18b9407c47e57208 to your computer and use it in GitHub Desktop.
DC Predictor Error Analysis
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# DC Predictor Error Analysis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As previously explained, using zero-mean reconstructed luma pixels simplifies the least square equations of alpha and beta. In the case of beta, these simplifications show that it is equivalent to the chroma pixel average. This average, aka the DC, is not available to the decoder so an approximation must be used. An approximation for the DC already exists in the decoder and is known as DC prediction. We propose to use DC prediction as beta for CfL. In order to evaluate the merrit of this proposition we compare it to the approximation of beta used by HEVC range extension, which also only signals alpha.\n",
"\n",
"The proposed CfL approach and the [Cross Channel Prediction (CCP)](https://www.researchgate.net/profile/Detlev_Marpe/publication/283549265_Adaptive_cross-component_prediction_for_444_high_efficiency_video_coding/links/57ea4ac408aef8bfcc99025d/Adaptive-cross-component-prediction-for-444-high-efficiency-video-coding.pdf?origin=publication_detail&ev=pub_int_prw_xdl&msrp=zxSBz3eh3sH1gneDtyadVqA-gBsDgZ_oW0nHHtYeu7WB5CpNZx7UPyYiuHZ1orKHYZ3NG_wBecQUJlkCFwp9NArP5cxF8rzkuHiLRpO6GxMkfNAx09cieYMN.EqGv0hSutDqlHTyPCjvaKEzCCdw3EEyRYkEm4HwA1w8tmhK3l_h186WiuiXrzjFqK_6AcpEiDvv8caAKuwNQVjOOc24_Pu4TqTv2JQ.zwVcAKN0xxVKygxhHqBugZ5BgWSFq6s6pWN7a0uXHpI2DjZvZtiJDIhVP7byeZuyg9xKAME9kcEm-rxw3x0ceD7trlXE3J3mPy_Ysg.HgM5RxtZE8MEflWtuLhCj_-SnMfZtykrVBdXILR_OPeQyybLrr5N-IkSbaM-WcmRF9Vyfm0Vcl-vbtupolWPm-BHoXbT6mF30el6sw) approach used in HEVC range extension are considerably different and comparing both beta approximations is not trivial. We attempt to do so here, but not in the context of determining which is best, we only seek to evaluate the merrit of the using DC prediction as beta for CfL. In other words, in terms of beta, is it better to use zero-mean reconstructed luma pixels and DC prediction, or reconstructed luma pixels and assume beta is zero?\n",
"\n",
"In both cases, DC prediction is performed, we are aware that in HEVC range extension, CCP can be applied to any intra prediction mode, but in order to exclude variables that are not of interest, we will only consider the DC prediction mode. For the proposed solution we measure the error between the DC prediction and the actual average. For HEVC range extension, we compute the best alpha, based on the DC prediction, and from that value compute the real beta and measure the penalty of assuming beta is zero. For both solution we measure the mean squared error over all the images in the [Kodak Lossless True Color Image Suite](http://r0k.us/graphics/kodak/) for block sizes: 4x4, 8x8, 16x16 and 32x32"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import os\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.ndimage import imread\n",
"\n",
"img_folder = \"images/kodim/\"\n",
"kodims = []\n",
"kodim_files = []\n",
"for file in sorted(os.listdir(img_folder)):\n",
" if file.endswith(\".png\"):\n",
" kodim_files.append(file)\n",
" kodims.append(imread(os.path.join(img_folder, file), mode=\"YCbCr\"))\n",
"num_kodim = len(kodims)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"block_sizes = [4,8,16,32]\n",
"\n",
"plane = 2\n",
"errors = np.zeros((4, num_kodim, 25000))\n",
"\n",
"for b in range(0, 4):\n",
" block_size = block_sizes[b]\n",
" \n",
" for k in range(0, num_kodim):\n",
" im = kodims[k]\n",
" height, width, z = im.shape\n",
" i = 0\n",
"\n",
" for y in range(block_size, height, block_size):\n",
" for x in range(block_size, width, block_size):\n",
" block_chroma = im[y:y+block_size, x:x+block_size, plane].astype(int)\n",
" average_chroma = np.mean(block_chroma)\n",
" \n",
" above_row_chroma = im[y-1, x:x+block_size, plane].astype(int).flatten()\n",
" left_col_chroma = im[y:y+block_size, x-1, plane].astype(int).flatten()\n",
" dc_pred_chroma = int(np.mean([above_row_chroma, left_col_chroma]) + 0.5)\n",
"\n",
" err = dc_pred_chroma - average_chroma\n",
" err = err * err\n",
" errors[b, k, i] = err\n",
" i = 1 + 1\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nh8u/ZH08XUi4a1X9fJIPpTvJ/BtOUvoN6U44f2+S+yV5VlV9srX2q2O8DKfiqnRfSu+UZHdVvStd\nK9ZKXyZfl+Q5g3W/U1XflO75fn26c1GekO58pWcd78FaazdW1X9Ld92lSneS+denOw/kunTX8Xla\nkrumOxdjT7ov5uek64Z1WVX9UbpzYJaGSL4ht75/Kz3mtVX1t+kGn9iY5M+q6rfSneg/XOvu4x1j\nRGsRlj4+dPvxVfW0dP+kXBrk4avvV2vt5qp6U7rXMel+5l+Srhvnc25TbDf0+d+ke/8eWFV/me5c\nmC8nuU+686yeNJgf97ysqvrndP+E+Jd04fbMHBsulgZH+MjQsldU1avSdVkc7ma6Gp9Lcu8kt6uq\n56T7h8PnW2v70/2sfm+612V3Vf3K4HHvlu59f2K6UPa1/n0DZtG0h5UzmUymlaYcO5z18BC590j3\nH/ul4WovT3L3wbpvTTeq1PBwtkvHuCnJfx46zhnpTnBfvu3lQ7eHh7P+f4aOtbT+0+lGklpafp/B\ntisNZ70ltw7JfUtWGJb6BK/FaoezviXJ245zjGcve563DOr55NCxh4ccfkluOzTw8Ot53OGelz3u\nT6cLnMc7zv8Z2vYR6VoJjvf+/fjQtscbzvr+SQ6f4PEuHuV1O85zOtlw1rdkaNjw4z3OCZ7DW1ao\n/50nOPbnlm1/ouGs7zt4z1d6fW4ZvM73PMnz/+hx9r05yfuHttu2ws/QzUn2D90+7nDWQ8svWeGx\nhl/HP1rhcYYfb8Xh700m0/qbdHUDZtnyQQTSusEBHp9umOWWrgXir6vqzNbav6T7b/VrB+tvTHdi\n+VvTDSH9+0PHuXFwnNel+7J9fbohlM/Lbc95SLovX7+Y7j/yX07y90n+fbruRsu3vU3trbWD6Ub2\nunGw7PerapQuPys9xkrrj7fNK9N1N/u3dN2j/ibdOUofXWm/1toL0/13/m3phvv+SrrX9J3pTmz/\npVUV3drvpBsF7/fShcoj6UY2OzhY9uyhbf853Yhll6ZrSbhx8NhvTvK41tofrvCch+dprV2V5KHp\nTnT/6KDu65O8I8lTWmsXrXCMk722Kz614+w3zvIsW74z3dDQ16ULNa9O12p4m2MMnu9j0r0vi+le\nt105toXjyND2H0s3jPvL0p2fczTduUQH07XGnZ8uOJ7IS9K1onxscOyvpOs6+ooMdWNrXYvMBela\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1771706978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,8))\n",
"res = []\n",
"for b in range(0, 4):\n",
" data = errors[b, :, :].flatten()\n",
" res.append(data[np.nonzero(data)])\n",
"\n",
"labels = ['4x4', '8x8', '16x16', '32x32']\n",
"plt.boxplot(res, labels=labels, showfliers=False)\n",
"plt.ylabel('Squared DC Prediction Error', fontweight='bold')\n",
"plt.title('Kodak True Color Image suite', fontweight='bold')\n",
"plt.xlabel('Block sizes', fontweight='bold');\n",
"\n",
"# Export to paper\n",
"#from matplotlib2tikz import save as tikz_save\n",
"#tikz_save('dcpred_err_boxplot.tex')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"block_sizes = [4,8,16,32]\n",
"alphas = [-1, -0.5, -0.25, -0.125, 0, 0.125, 0.25, 0.5, 1]\n",
"\n",
"plane = 2\n",
"prop_errors = np.zeros((4, num_kodim, 25000))\n",
"\n",
"for b in range(0, 4):\n",
" block_size = block_sizes[b]\n",
" zeros = np.zeros(block_size)\n",
" ones = np.ones(block_size)\n",
" max_8bit = ones * 255\n",
" round_offset = ones * 0.5\n",
" \n",
" for k in range(0, num_kodim):\n",
" im = kodims[k]\n",
" height, width, z = im.shape\n",
" \n",
" beta_err = 0\n",
" prop_err = 0\n",
" i = 0\n",
"\n",
" for y in range(block_size, height, block_size):\n",
" for x in range(block_size, width, block_size):\n",
" block_luma = im[y:y+block_size, x:x+block_size, 0].astype(int)\n",
" block_chroma = im[y:y+block_size, x:x+block_size, plane].astype(int)\n",
" \n",
" average_luma = np.mean(block_luma)\n",
" \n",
" above_row_chroma = im[y-1, x:x+block_size, plane].astype(int).flatten()\n",
" left_col_chroma = im[y:y+block_size, x-1, plane].astype(int).flatten()\n",
" \n",
" dc_pred_chroma = int(np.mean([above_row_chroma, left_col_chroma]) + 0.5)\n",
" \n",
" res_luma = block_luma - ones * average_luma\n",
" pred_chroma = ones * dc_pred_chroma\n",
" \n",
" min_err = 10000000000 \n",
" for a in alphas:\n",
" pred = np.minimum(max_8bit, np.maximum(zeros,(a * res_luma + pred_chroma + round_offset).astype(int)))\n",
" err = block_chroma - pred\n",
" err = np.sum(err * err)\n",
" if err < min_err:\n",
" min_err = err\n",
" best_a = a\n",
" \n",
" best_pred = np.minimum(max_8bit, np.maximum(zeros, (best_a * res_luma + pred_chroma + round_offset).astype(int)))\n",
" err = block_chroma - best_pred\n",
" err = err * err\n",
" prop_errors[b, k, i] = np.mean(err)\n",
" \n",
" i = 1 + 1\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f17a2c65ef0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,8))\n",
"res = []\n",
"for b in range(0, 4):\n",
" data = prop_errors[b, :, :].flatten()\n",
" res.append(data[np.nonzero(data)])\n",
"\n",
"labels = ['4x4', '8x8', '16x16', '32x32']\n",
"plt.boxplot(res, labels=labels, showfliers=False)\n",
"plt.ylabel('Mean Squared DC Prediction Error', fontweight='bold')\n",
"plt.title('Kodak True Color Image suite', fontweight='bold');\n",
"plt.xlabel('Block sizes', fontweight='bold');"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"block_sizes = [4,8,16,32]\n",
"alphas = [-1, -0.5, -0.25, -0.125, 0, 0.125, 0.25, 0.5, 1]\n",
"\n",
"plane = 2\n",
"beta_errors = np.zeros((4, num_kodim, 25000))\n",
"\n",
"for b in range(0, 4):\n",
" block_size = block_sizes[b]\n",
" zeros = np.zeros(block_size)\n",
" ones = np.ones(block_size)\n",
" max_8bit = ones * 255\n",
" round_offset = ones * 0.5\n",
" \n",
" for k in range(0, num_kodim):\n",
" im = kodims[k]\n",
" height, width, z = im.shape\n",
" \n",
" beta_err = 0\n",
" prop_err = 0\n",
" i = 0\n",
"\n",
" for y in range(block_size, height, block_size):\n",
" for x in range(block_size, width, block_size):\n",
" block_luma = im[y:y+block_size, x:x+block_size, 0].astype(int)\n",
" block_chroma = im[y:y+block_size, x:x+block_size, plane].astype(int)\n",
" \n",
" above_row_luma = im[y-1, x:x+block_size, 0].astype(int).flatten()\n",
" above_row_chroma = im[y-1, x:x+block_size, plane].astype(int).flatten()\n",
" left_col_luma = im[y:y+block_size, x-1, 0].astype(int).flatten()\n",
" left_col_chroma = im[y:y+block_size, x-1, plane].astype(int).flatten()\n",
" \n",
" dc_pred_luma = int(np.mean([above_row_luma, left_col_luma]) + 0.5)\n",
" dc_pred_chroma = int(np.mean([above_row_chroma, left_col_chroma]) + 0.5)\n",
" \n",
" res_luma = block_luma - ones * dc_pred_luma\n",
" pred_chroma = ones * dc_pred_chroma\n",
" \n",
" min_err = 10000000000 \n",
" for a in alphas:\n",
" pred = np.minimum(max_8bit, np.maximum(zeros,(a * res_luma + pred_chroma + round_offset).astype(int)))\n",
" err = block_chroma - pred\n",
" err = np.sum(err * err)\n",
" if err < min_err:\n",
" min_err = err\n",
" best_a = a\n",
" \n",
" best_pred = np.minimum(max_8bit, np.maximum(zeros, (best_a * res_luma + pred_chroma + round_offset).astype(int)))\n",
" err = block_chroma - best_pred\n",
" err = err * err\n",
" beta_errors[b, k, i] = np.mean(err)\n",
" i = 1 + 1\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nMrXacgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1771785f28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,8))\n",
"res = []\n",
"for b in range(0, 4):\n",
" data = beta_errors[b, :, :].flatten()\n",
" res.append(data[np.nonzero(data)])\n",
"\n",
"labels = ['4x4', '8x8', '16x16', '32x32']\n",
"plt.boxplot(res, labels=labels, showfliers=False)\n",
"plt.ylabel('Mean Squared DC Prediction Error', fontweight='bold')\n",
"plt.title('Kodak True Color Image suite', fontweight='bold');\n",
"plt.xlabel('Block sizes', fontweight='bold');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The mean square beta error of the proposed approach is significantly lower than the of assuming that beta is zero. This can be explained by many factor. First, that the assumption that beta equal zero does not always hold. Another important observation is that alpha is heavily quantized resulting in a less precise slope that increases the offset (i.e. beta). Last but not least is rounding error, which can also increase the value of beta."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment