336 lines
46 KiB
Plaintext
336 lines
46 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"source": [
|
|
"# Image Processing SS 18 - Assignment - 04\n",
|
|
"\n",
|
|
"### Deadline is 16.5.2016 at 8:00 o'clock\n",
|
|
"\n",
|
|
"Please solve the assignments together with a partner.\n",
|
|
"I will run every notebook. Make sure the code runs through. Select `Kernel` -> `Restart & Run All` to test it.\n",
|
|
"Please strip the output from the cells, either select `Cell` -> `All Output` -> `Clear` or use the `nb_strip_output.py` script / git hook."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# display the plots inside the notebook\n",
|
|
"%matplotlib inline"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import pylab\n",
|
|
"try:\n",
|
|
" import urllib.request as urllib2\n",
|
|
"except ImportError:\n",
|
|
" import urllib2\n",
|
|
"\n",
|
|
"import random\n",
|
|
"try:\n",
|
|
" from StringIO import StringIO as BytesIO\n",
|
|
"except ImportError:\n",
|
|
" from io import BytesIO\n",
|
|
" \n",
|
|
"from PIL import Image\n",
|
|
"\n",
|
|
"pylab.rcParams['figure.figsize'] = (12, 12) # This makes the plot bigger"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Exercise 1 - Qualify sharpness and noise - 5 Points\n",
|
|
"\n",
|
|
"Qualify the noise and sharpness in the images. Make a plot images, noise\n",
|
|
"\n",
|
|
"Please download sample picture from [here](http://sipi.usc.edu/database/misc.zip)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load the pictures here\n",
|
|
"sample_images = []\n",
|
|
"direc = 'misc/' # directory of the sample pictures relatively to your notebook\n",
|
|
"for number in [1,3,5,6]:\n",
|
|
" sample_images.append(\n",
|
|
" np.array(Image.open(direc+'4.2.0'+str(number)+'.tiff'))\n",
|
|
" )\n",
|
|
"for name in ['house']:\n",
|
|
" sample_images.append(\n",
|
|
" np.array(Image.open(direc+name+'.tiff'))\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Container object of 5 artists>"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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AKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiHRu83f3U7v5cd3+hux/r7redxDAAAFjC6Q2O+VFV3TUzP+zum6rqM939zzPzbytvAwCA63Zs8M7MVNUPj7686ehj1hwFAABL2ege3u4+1d2PVtWlqnpwZh5edxYAACxjo+CdmZ/MzG1VdUtV3dHdL7jymO4+290H3X1weHi49E4AAHhSrukpDTPzvap6qKruvsrPzs3M/szs7+3tLTQPAACuzyZPadjr7mcfff60qnpZVX1l7WEAALCETZ7S8Jyq+vvuPlWXA/mDM/OxdWcBAMAyNnlKwxer6vYT2AIAAIvzpjUAAKIJXgAAogleAACiCV4AAKIJXgAAogleAACiCV4AAKIJXgAAom3ypjUAgBvCmfse2PYEruLi/fdse8Iv5QovAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANEELwAA0QQvAADRBC8AANFOb3vAks7c98C2J3CFi/ffs+0JAMCOc4UXAIBoghcAgGiCFwCAaFH38AK7x737Nx737gM3Gld4AQCIJngBAIgmeAEAiCZ4AQCIJngBAIgmeAEAiCZ4AQCIJngBAIgmeAEAiCZ4AQCIJngBAIgmeAEAiCZ4AQCIJngBAIgmeAEAiCZ4AQCIJngBAIgm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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x991a870>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def qualify_noise(img):\n",
|
|
" \"\"\"Qualify the noise based on the std of a gaussian model.\n",
|
|
" You may find a window that is contant in the images.\n",
|
|
" \"\"\"\n",
|
|
" # your code here\n",
|
|
" WINDOW_SIZE = 16\n",
|
|
" SHIFT = 16\n",
|
|
" w, h, d = img.shape\n",
|
|
" std_min = np.inf\n",
|
|
" for ox in range(0, w-WINDOW_SIZE+1, SHIFT):\n",
|
|
" for oy in range(0, h-WINDOW_SIZE+1, SHIFT):\n",
|
|
" std_sum = np.std(img[ox:ox+WINDOW_SIZE, oy:oy+WINDOW_SIZE, 0]) + \\\n",
|
|
" np.std(img[ox:ox+WINDOW_SIZE, oy:oy+WINDOW_SIZE, 0]) + \\\n",
|
|
" np.std(img[ox:ox+WINDOW_SIZE, oy:oy+WINDOW_SIZE, 0])\n",
|
|
" std_min = min(std_min, std_sum)\n",
|
|
" \n",
|
|
" return std_min\n",
|
|
"\n",
|
|
"plt.bar(range(len(sample_images)), [qualify_noise(i) for i in sample_images])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Container object of 5 artists>"
|
|
]
|
|
},
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2c609d0>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def qualify_sharpness(img):\n",
|
|
" \"\"\"Qualify the sharpness based on the average pixel differences.\"\"\"\n",
|
|
" # your code here\n",
|
|
" return random.randint(0, 10)\n",
|
|
"plt.bar(range(len(sample_images)), [qualify_sharpness(i) for i in sample_images])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Does the result match the expectations? If not what processing step can be done?/"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Exercise 2 - SSIM JPEG Compression - 5 Points"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def jpeg_enocde(img, quality):\n",
|
|
" pil_img = Image.fromarray(img)\n",
|
|
" buffer = BytesIO()\n",
|
|
" pil_img.save(buffer, \"JPEG\", quality=quality)\n",
|
|
" return buffer\n",
|
|
"\n",
|
|
"def jpeg_decode(buffer):\n",
|
|
" img = Image.open(buffer)\n",
|
|
" return np.array(img)\n",
|
|
"\n",
|
|
"def jpeg_quality_filter(img, quality):\n",
|
|
" as_jpeg = jpeg_enocde(img, quality)\n",
|
|
" return jpeg_decode(as_jpeg)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"3"
|
|
]
|
|
},
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"images_for_jpeg = sample_images[2::]\n",
|
|
"len(images_for_jpeg)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"images10 = [jpeg_quality_filter(img, 10) for img in images_for_jpeg]\n",
|
|
"images50 = [jpeg_quality_filter(img, 10) for img in images_for_jpeg]\n",
|
|
"images80 = [jpeg_quality_filter(img, 10) for img in images_for_jpeg]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"0\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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Ixuu+40kf7HWevrM3DXJPXY4EwAAbM2+wTsz35rkh5M8O0nWWl9M8sXdjgUAANuxySUND0lyKsnvzcy7Z+YVM3PPHc8FAABbsUnwHknyqCQvX2s9Msl/J7nq7EUzc+XMnJiZE6dOndrymAAAcOdsEry3JLllrXX93ufX5nQAf4211jVrreNrreNHjx7d5owAAHCn7Ru8a63/SPKRmfm+vS89Icn7djoVAABsyaav0vCzSV679woNH0zynN2NBAAA27NR8K61bkpyfMezAADA1rnTGgAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANU2Dt6ZuWRm3j0zf7bLgQAAYJvuyBneFyY5uatBAABgFzYK3pm5f5KnJnnFbscBAIDt2vQM768n+fkkX9rhLAAAsHX7Bu/M/EiSj6+1bthn3ZUzc2JmTpw6dWprAwIAwPnY5AzvZUmeNjMfSvL6JI+fmT88e9Fa65q11vG11vGjR49ueUwAALhz9g3etdYvrLXuv9Y6luSKJG9faz1j55MBAMAWeB1eAACqHbkji9da70zyzp1MAgAAO+AMLwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANX2Dd6ZecDMvGNmTs7MzTPzwoMYDAAAtuHIBmtuTfLitdaNM/MtSW6Ymbeutd6349kAAOC87XuGd631sbXWjXsffzbJyST32/VgAACwDXfoGt6ZOZbkkUmu38UwAACwbRsH78zcK8kfJ3nRWusz53j8ypk5MTMnTp06tc0ZAQDgTtsoeGfmLjkdu69da73xXGvWWtestY6vtY4fPXp0mzMCAMCdtsmrNEySVyY5udZ62e5HAgCA7dnkDO9lSZ6Z5PEzc9Pe21N2PBcAAGzFvi9Lttb6uyRzALMAAMDWudMaAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1QQvAADVBC8AANUELwAA1TYK3pl50sy8f2Y+MDNX7XooAADYln2Dd2YuSfJbSZ6c5OFJfmJmHr7rwQAAYBs2OcP76CQfWGt9cK31xSSvT3L5bscCAIDt2CR475fkI2d8fsve1wAA4IJ3ZIM1c46vra9bNHNlkiv3Pv3czLz/dp7z0iSf2OB7c+GwZzsyv7Kzp7ZnFxf7tSOOMc5gz3ZkR8fZJvv1oE2eaJPgvSXJA874/P5JPnr2orXWNUmu2eSbzsyJtdbxTdZyYbBnFx97dnGxXxcfe3bxsWcXl23u1yaXNPx9kofOzINn5q5Jrkhy3Ta+OQAA7Nq+Z3jXWrfOzM8k+csklyR51Vrr5p1PBgAAW7DJJQ1Za70lyVu2+H03uvSBC4o9u/jYs4uL/br42LOLjz27uGxtv2atr/v9MwAAqOHWwgAAVDuQ4J2Zb5+Zt87MP++9v89trPu/mblp780vxh2C/W4jPTN3m5k37D1+/cwcO/gp+bIN9uvZM3PqjOPqeYcxJ181M6+amY/PzHtv4/GZmd/c29N/nJlHHfSMfNUG+/W4mfn0GcfYLx/0jHytmXnAzLxjZk7OzM0z88JzrHGcXSA23K/zPs4O6gzvVUnettZ6aJK37X1+Lp9fa/3A3tvTDmg29mx4G+nnJvmvtdb3Jvm1JLt7hUtu1x247fcbzjiuXnGgQ3Iur07ypNt5/MlJHrr3dmWSlx/ATNy2V+f29ytJ/vaMY+ylBzATt+/WJC9eaz0syWOS/PQ5/m10nF04Ntmv5DyPs4MK3suTvGbv49ck+dED+r7cMZvcRvrMvbw2yRNm5lw3J2H33Pb7IrTW+pskn7qdJZcn+f112ruS3HtmvvtgpuNsG+wXF5i11sfWWjfuffzZJCfz9XeIdZxdIDbcr/N2UMH7XWutjyWn/2JJvvM21t19Zk7MzLtmRhQfvE1uI/2VNWutW5N8Osl3HMh0nG3T237/2N6P7K6dmQec43EuLG7nfvF57Mz8w8z8+cx8/2EPw1ftXXb3yCTXn/WQ4+wCdDv7lZzncbbRy5JtYmb+Osl9z/HQL92Bp3ngWuujM/OQJG+fmfestf5lOxOygU1uI73RraY5EJvsxZ8med1a6wsz8/ycPjv/+J1PxvlwjF1cbkzyoLXW52bmKUn+JKd/TM4hm5l7JfnjJC9aa33m7IfP8UccZ4don/067+Nsa2d411pPXGs94hxvb0ryn1/+UcHe+4/fxnN8dO/9B5O8M6crn4OzyW2kv7JmZo4k+bb4cd9h2Xe/1lqfXGt9Ye/T303ygwc0G3feRrdz58Kw1vrMWutzex+/JcldZubSQx7rG97M3CWn4+m1a603nmOJ4+wCst9+beM4O6hLGq5L8qy9j5+V5E1nL5iZ+8zM3fY+vjTJZUned0Dzcdomt5E+cy+fnuTty4s5H5Z99+usa9KeltPXRnFhuy7JT+79Fvljknz6y5eEceGZmft++fcYZubROf3/1U8e7lTf2Pb245VJTq61XnYbyxxnF4hN9msbx9nWLmnYx9VJ/mhmnpvkw0l+PElm5niS56+1npfkYUl+Z2a+lNN/kavXWoL3AN3WbaRn5qVJTqy1rsvp/yj/YGY+kNNndq84vIm/sW24Xy+Ymafl9G/BfirJsw9tYJIkM/O6JI9LcunM3JLkJUnukiRrrd/O6btaPiXJB5L8T5LnHM6kJBvt19OT/NTM3Jrk80mucBLg0F2W5JlJ3jMzN+197ReTPDBxnF2ANtmv8z7O3GkNAIBq7rQGAEA1wQsAQDXBCwBANcELAEA1wQsAQDXBCwBANcELAEA1wQsAQLX/B9DVOmgej+lmAAAAAElFTkSuQmCC\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2e840f0>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"1\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAKvCAYAAACPusJjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFn1JREFUeJzt3X+s5Xld3/HXWwaxaBVwxx8F1pFICOofohMCkjQGNEEwrIk0WRIVDGSiqRUbk2bbJiXxrzVpUJs0tisiVAlqViKrYlsEiZrIxtkF5cfUgBRxy9YdxYC0RLr66R9z0HGY2bncc+659+b1eCQ39/z43nPek89+d5/7ne8931lrBQAAGn3ecQ8AAADHRQwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUOvMPt/slltuWefOndvnWwIAUOa+++7787XW2YNsu9cYPnfuXC5evLjPtwQAoMzM/MlBt3WaBAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1bhrDM/PamXloZt571WNPmJm3zswHNt8ff7RjAgDA7h3kyPDrkjz/msfuSPK2tdZTk7xtcx8AAE6Vm8bwWuu3k3zsmodvS/L6ze3XJ/nOHc8FAABH7rDnDH/5WuvBJNl8/7LdjQQAAPtx5qjfYGYuJLmQJLfeeutRvx1wTM7d8evHPQJ8zj585wuPewTgmB32yPCfzcxXJsnm+0M32nCtddda6/xa6/zZs2cP+XYAALB7h43he5K8dHP7pUnevJtxAABgfw7y0WpvTPJ7SZ42Mw/MzMuT3Jnk22bmA0m+bXMfAABOlZueM7zWeskNnnrejmcBAIC9cgU6AABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqbRXDM/MvZ+Z9M/PemXnjzHzBrgYDAICjdugYnpknJvmhJOfXWl+f5FFJbt/VYAAAcNS2PU3iTJJ/NDNnkjw2yUe3HwkAAPbj0DG81vpfSf59ko8keTDJx9da/31XgwEAwFHb5jSJxye5LclXJ/knSb5wZr77OttdmJmLM3Px8uXLh58UAAB2bJvTJL41yf9ca11ea/2/JG9K8s3XbrTWumutdX6tdf7s2bNbvB0AAOzWNjH8kSTPmpnHzswkeV6SS7sZCwAAjt425wzfm+TuJPcnec/mte7a0VwAAHDkzmzzw2utVyV51Y5mAQCAvXIFOgAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAaolhAABqiWEAAGqJYQAAam0VwzPzuJm5e2b+x8xcmpln72owAAA4ame2/PmfTPJf11ovnpnPT/LYHcwEAAB7cegYnpkvTvJPk7wsSdZan07y6d2MBQAAR2+b0ySekuRykp+dmXfNzGtm5gt3NBcAABy5bWL4TJJvTPJTa61nJPk/Se64dqOZuTAzF2fm4uXLl7d4OwAA2K1tYviBJA+ste7d3L87V+L4H1hr3bXWOr/WOn/27Nkt3g4AAHbr0DG81vrfSf50Zp62eeh5Sd6/k6kAAGAPtv00iX+R5A2bT5L4UJLv234kAADYj61ieK317iTndzQLAADslSvQAQBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBr6xiemUfNzLtm5td2MRAAAOzLLo4MvzLJpR28DgAA7NVWMTwzT0rywiSv2c04AACwP9seGf6JJP8qyd/eaIOZuTAzF2fm4uXLl7d8OwAA2J1Dx/DMfEeSh9Za9z3Sdmutu9Za59da58+ePXvYtwMAgJ3b5sjwc5K8aGY+nOQXkjx3Zn5+J1MBAMAeHDqG11r/eq31pLXWuSS3J3n7Wuu7dzYZAAAcMZ8zDABArTO7eJG11juSvGMXrwUAAPviyDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtc4c9wAAwM2du+PXj3sE+Jx9+M4XHvcIN+XIMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtcQwAAC1xDAAALXEMAAAtQ4dwzPz5Jn5rZm5NDPvm5lX7nIwAAA4ame2+NmHk/zIWuv+mfnHSe6bmbeutd6/o9kAAOBIHfrI8FrrwbXW/Zvbf5XkUpIn7mowAAA4ajs5Z3hmziV5RpJ7d/F6AACwD1vH8Mx8UZJfTvLDa61PXOf5CzNzcWYuXr58edu3AwCAndkqhmfm0bkSwm9Ya73petuste5aa51fa50/e/bsNm8HAAA7tc2nSUySn0lyaa316t2NBAAA+7HNkeHnJPmeJM+dmXdvvl6wo7kAAODIHfqj1dZav5tkdjgLAADslSvQAQBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQSwwDAFBLDAMAUEsMAwBQa6sYnpnnz8wfzcwHZ+aOXQ0FAAD7cOgYnplHJfmPSb49ydcmecnMfO2uBgMAgKO2zZHhZyb54FrrQ2utTyf5hSS37WYsAAA4etvE8BOT/OlV9x/YPAYAAKfCmS1+dq7z2PqsjWYuJLmwufvJmfmjm7zuLUn+fIu52C/rdfpYs9PHmh2R+bEjeVnrdfpYsyNyRPtYcvM1+6qDvtA2MfxAkidfdf9JST567UZrrbuS3HXQF52Zi2ut81vMxR5Zr9PHmp0+1ux0sV6njzU7fXa5ZtucJvH7SZ46M189M5+f5PYk9+xiKAAA2IdDHxleaz08Mz+Y5L8leVSS16613rezyQAA4Ihtc5pE1lpvSfKWHc3yGQc+pYITwXqdPtbs9LFmp4v1On2s2emzszWbtT7rd94AAKCCyzEDAFDr2GN4Zp4wM2+dmQ9svj/+Btv9zcy8e/PlF/X27GaX3p6Zx8zML26ev3dmzu1/Sq52gDV72cxcvmq/esVxzMkVM/PamXloZt57g+dnZv7DZj3/cGa+cd8z8vcOsF7fMjMfv2r/+nf7npF/aGaePDO/NTOXZuZ9M/PK62xjPzshDrheO9nPjj2Gk9yR5G1rracmedvm/vV8aq31DZuvF+1vPA546e2XJ/nLtdbXJPnxJEf3yYLc1OdwufRfvGq/es1eh+Rar0vy/Ed4/tuTPHXzdSHJT+1hJm7sdXnk9UqS37lq//rRPczEI3s4yY+stZ6e5FlJ/vl1/r1oPzs5DrJeyQ72s5MQw7clef3m9uuTfOcxzsL1HeTS21ev491Jnjcz17swC/vhcumnzFrrt5N87BE2uS3Jf1lXvDPJ42bmK/czHdc6wHpxwqy1Hlxr3b+5/VdJLuWzr5xrPzshDrheO3ESYvjL11oPJlf+4Em+7AbbfcHMXJyZd86MYN6vg1x6+++2WWs9nOTjSb50L9NxPQe9XPp3bf4q8O6ZefJ1nufkOOiacnI8e2b+YGZ+Y2a+7riH4e9tTuV7RpJ7r3nKfnYCPcJ6JTvYz7b6aLWDmpnfTPIV13nq334OL3PrWuujM/OUJG+fmfestf54NxNyEwe59PaBLs/N3hxkPX41yRvXWn89M9+fK0f2n3vkk3FY9rHT5f4kX7XW+uTMvCDJr+TKX71zzGbmi5L8cpIfXmt94tqnr/Mj9rNjdJP12sl+tpcjw2utb11rff11vt6c5M8+81cQm+8P3eA1Prr5/qEk78iV/0NgPw5y6e2/22ZmziT5kvgrxON00zVba/3FWuuvN3d/Osk37Wk2Ducg+yEnxFrrE2utT25uvyXJo2fmlmMeq97MPDpXwuoNa603XWcT+9kJcrP12tV+dhJOk7gnyUs3t1+a5M3XbjAzj5+Zx2xu35LkOUnev7cJOcilt69exxcnefvyIdbH6aZrds15cC/KlfOxOLnuSfK9m992f1aSj3/mFDNOnpn5is/83sTMPDNX/nv7F8c7VbfNevxMkktrrVffYDP72QlxkPXa1X62l9MkbuLOJL80My9P8pEk/yxJZuZ8ku9fa70iydOT/OeZ+dtc+YPeudYSw3tyo0tvz8yPJrm41ronV/6B/bmZ+WCuHBG+/fgm5oBr9kMz86Jc+Y3djyV52bENTGbmjUm+JcktM/NAklcleXSSrLX+U65c7fMFST6Y5P8m+b7jmZTkQOv14iQ/MDMPJ/lUktsdIDh2z0nyPUneMzPv3jz2b5LcmtjPTqCDrNdO9jNXoAMAoNZJOE0CAACOhRgGAKCWGAYAoJYYBgCglhgGAKCWGAYAoJYYBgCglhgGAKDW/wf7c2lChIVu9wAAAABJRU5ErkJggg==\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2e713f0>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x3146b10>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def ssim(img, filtered_img):\n",
|
|
" \"\"\"The SSIM similarity measure. Use the parameters from the paper \n",
|
|
" as on the second to last slide from the lecture\"\"\"\n",
|
|
" # your code\n",
|
|
" return random.randint(0, 10)\n",
|
|
"\n",
|
|
"for i, img in enumerate(images_for_jpeg):\n",
|
|
" print(i)\n",
|
|
" compressed_images = [images10[i], images50[i], images80[i]]\n",
|
|
" plt.bar(range(len(compressed_images)),\n",
|
|
" [ssim(img, comp) for comp in compressed_images])\n",
|
|
" plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"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": 1
|
|
}
|