{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Uniform quantization in frequency domain" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy import fftpack\n", "from scipy.misc import bytescale\n", "import matplotlib.image as mpimg" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# loading image\n", "img = bytescale(mpimg.imread('i/super_mario_head.png'))\n", "choosen_y_x = 90\n", "resolution = 128\n", "\n", "img_slice = img[choosen_y_x:(choosen_y_x + resolution), choosen_y_x:(choosen_y_x + resolution), 2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Distribution: Frequency vs Spatial" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<Container object of 99 artists>" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSZIkSZI0gP8PK1MQS91PjJwAAAAASUVORK5CYII=\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7f4df8e65a90>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# transform: 2D DCT\n", "dct_slice = fftpack.dct(fftpack.dct(img_slice.T, norm='ortho').T, norm='ortho')\n", "\n", "dct_hist, dct_bin_edges = np.histogram(dct_slice, bins = range(100))\n", "img_hist, img_bin_edges = np.histogram(img_slice, bins = range(100))\n", "\n", "f, (plt1, plt2) = plt.subplots(1, 2, figsize=(15, 5))\n", "\n", "plt1.set_title('Frequency histogram')\n", "plt1.bar(dct_bin_edges[:-1], dct_hist, width = 1)\n", "\n", "plt2.set_title('Spatial histogram')\n", "plt2.bar(img_bin_edges[:-1], img_hist, width = 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Quantize by dividing and requantize by multyplying" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.image.AxesImage at 0x7f4df35f8f28>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7f4df5b8c898>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "block = img_slice[80:88, 40:48]\n", "\n", "quantize_step = 5\n", "\n", "dct_slice = fftpack.dct(fftpack.dct(block.T, norm='ortho').T, norm='ortho')\n", "\n", "\n", "dct_slice_quantized = np.divide(dct_slice,[quantize_step])\n", "rounded_quantized = np.around(dct_slice_quantized)\n", "\n", "dct_slice_requantized = np.multiply(rounded_quantized,[quantize_step])\n", "\n", "idct_slice = fftpack.idct(fftpack.idct(dct_slice_requantized.T, norm='ortho').T, norm='ortho')\n", "\n", "\n", "f, (plt1, plt2) = plt.subplots(1, 2, figsize=(15, 5))\n", "\n", "plt1.axis('off');\n", "plt1.set_title('Original')\n", "plt1.imshow(block, cmap='gray',interpolation='nearest')\n", "\n", "plt2.axis('off');\n", "plt2.set_title('Quantized')\n", "plt2.imshow(idct_slice, cmap='gray',interpolation='nearest')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# DCT Coefficients" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.colorbar.Colorbar at 0x7f4df3533c18>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nogAAAABJRU5ErkJggg==\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7f4df8f71860>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(dct_slice, interpolation='nearest', cmap=plt.cm.Paired)\n", "plt.colorbar(shrink=1)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# Discarding based on coefficient importance" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "It compressed 67.1875 % of the block.\n" ] } ], "source": [ "# a 8x8 block\n", "block = img_slice[80:88, 40:48]\n", "\n", "# a 2D DCT\n", "dct_slice = fftpack.dct(fftpack.dct(block.T, norm='ortho').T, norm='ortho')\n", "\n", "original_dct_slice = np.copy(dct_slice)\n", "\n", "# keeps only the top left 5 element triangle\n", "for u in range(8):\n", " for v in range(8):\n", " if (u + v) > 5:\n", " dct_slice[u, v] = 0\n", "\n", "print(\"It compressed \", 100 - ((np.count_nonzero(dct_slice)/64) * 100), \"% of the block.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pixel Original" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[227, 255, 255, 155, 146, 158, 169, 178],\n", " [247, 255, 255, 161, 171, 186, 194, 197],\n", " [255, 255, 246, 193, 198, 197, 194, 192],\n", " [226, 206, 193, 193, 192, 189, 189, 188],\n", " [191, 191, 190, 190, 190, 190, 189, 190],\n", " [191, 191, 190, 191, 190, 191, 191, 191],\n", " [191, 191, 192, 192, 193, 193, 193, 193],\n", " [192, 193, 193, 195, 195, 195, 196, 197]], dtype=uint8)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.set_printoptions(precision=1, linewidth=140, suppress=True)\n", "block" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DCT Original" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1582. , 87.2, 51.8, -15.9, -34.2, -12.8, 14. , 17.4],\n", " [ 38.5, 96.1, 56. , -24.7, -44.4, -15.5, 17.1, 20.9],\n", " [ -3.2, 24.8, 20.3, -26.2, -28.9, -9. , 8.6, 9.8],\n", " [ -47.1, -9.9, -1.5, -15.9, -8.3, -1.2, 0.9, -1.4],\n", " [ -33. , -8.3, -5. , -3. , 7.8, 3.5, -4.2, -6. ],\n", " [ -8.3, 8.5, -3.5, 2.3, 7.9, 2.9, -3.7, -4. ],\n", " [ 8.6, 12.1, -5.1, -3.3, -0.5, -1.5, -2. , -1.8],\n", " [ 7.4, 5.8, -6.7, -5.9, -5. , -3.8, 0.4, 0.9]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "original_dct_slice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Quantized" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1582. , 87.2, 51.8, -15.9, -34.2, -12.8, 0. , 0. ],\n", " [ 38.5, 96.1, 56. , -24.7, -44.4, 0. , 0. , 0. ],\n", " [ -3.2, 24.8, 20.3, -26.2, 0. , 0. , 0. , 0. ],\n", " [ -47.1, -9.9, -1.5, 0. , 0. , 0. , 0. , 0. ],\n", " [ -33. , -8.3, 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ -8.3, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dct_slice" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.image.AxesImage at 0x7f4df34877b8>" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7f4df34f2470>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "idct_slice = fftpack.idct(fftpack.idct(dct_slice.T, norm='ortho').T, norm='ortho')\n", "\n", "\n", "f, (plt1, plt2) = plt.subplots(1, 2, figsize=(15, 5))\n", "\n", "plt1.axis('off');\n", "plt1.set_title('Original')\n", "plt1.imshow(block, cmap='gray', interpolation='nearest')\n", "\n", "plt2.axis('off');\n", "plt2.set_title('Quantized')\n", "plt2.imshow(idct_slice, cmap='gray', interpolation='nearest')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# JPEG quantization table" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<matplotlib.image.AxesImage at 0x7f4df34eb518>" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nwsSJExV5+/fJkycRFBRU1WWUEhsbi5CQkKouo5S8vDyoVCrY29vypbTWS0pKgp+fX1WXUabU1FR4\ne3uXP+BD9t1336FHjx5VXUYpFy9ehK+vb1WXUcrRo0dx7dq1qi6juHJ3qAwmIiJ6mMoNJp7KIyIi\nRWEwERGRojCYiIhIURhMRESkKAwmIiJSFAYTEREpCoOJiIgUhcFERESKwmAiIiJFYTAREZGiMJiI\niEhRGExERKQoDCYiIlIUBhMRESkKg4mIiBSFwURERIrCYCIiIkVhMBERkaIwmIiISFEYTEREpCgM\nJiIiUhQGExERKQqDiYiIFIXBREREisJgIiIiRWEwERGRojCYiIhIURhMRESkKAwmIiJSFAYTEREp\nCoOJiIgUhcFERESKwmAiIiJF0VR1AVZQVXUBRERkezxiIiIiRWEwERGRojCYiIhIURhMRESkKAwm\nIiJSFAYTEREpCoOJiIgUhcFERESKwmAiIiJFYTAREZGiMJiIiEhRGExERKQoDCYiIlIUBhMRESkK\ng4mIiBSFwURERIrCYCIiIkVhMBERkaIwmIiISFEYTEREpCgMJiIiUhQGExERKQqDiYiIFIXBRERE\nisJgIiIiRWEwERGRojCYiIhIURhMRESkKAwmIiJSlP8BbXCM973CvEEAAAAASUVORK5CYII=\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7f4df34eb630>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "img = mpimg.imread('i/jpeg_quantization_table.png')\n", "plt.axis('off');\n", "plt.imshow(img)" ] } ], "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 }