{ "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": 17, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "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 = 4\n", " SHIFT = 4\n", " w, h, d = img.shape\n", " std = []\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.append(std_sum)\n", " \n", " return np.average(std)\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": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "2\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAKvCAYAAACI+Bx2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAGBJJREFUeJzt3X+sZ3ld3/HXuzuLiNpC3euPAONoSoiWpGBvCHaTxgJt+GGWJtJkSbRiMBObVqExadY2Lal/bZPG1iZN2ylSaKWrdoWKglYqEmpStp1dV2EZSJGuuC51B6nARgNdfPeP+a6Mw+zeM3vPuffOm8cjuZnvvd/PfO9789mz+8y5535PdXcAAGCqP3XcAwAAwJYELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0U5t8aI33XRTnzlzZouXBgCAJMndd9/9ie7eO2jdJsF75syZnD9/fouXBgCAJElV/daSdS5pAABgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoi4K3qv5uVd1XVR+oqjuq6slbDwYAAGs4MHir6ulJfjDJfnc/J8kNSW7dejAAAFjD0ksaTiX58qo6leQpSR7cbiQAAFjPgcHb3b+T5J8m+ViSjyf5VHf/0taDAQDAGk4dtKCqnpbkFUm+McnvJ/lPVfVd3f0TV6w7m+Rskpw+fXqDUQFgvjO3veO4R4Brdv/tLz/uER7XkksaXpzkf3f3xe7+f0nemuQvXbmou89193537+/t7a09JwAAPCFLgvdjSV5QVU+pqkryoiQXth0LAADWseQa3ruS3JnkniTv3/2dcxvPBQAAqzjwGt4k6e7XJ3n9xrMAAMDq3GkNAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjHZg8FbVs6vq3ss+Pl1VrzuK4QAA4LBOHbSguz+c5LlJUlU3JPmdJG/beC4AAFjFtV7S8KIkv9ndv7XFMAAAsLZrDd5bk9yxxSAAALCFAy9peFRVPSnJLUl++DGeP5vkbJKcPn16leGAk+XMbe847hHgmt1/+8uPewTgmF3LGd6XJrmnu3/3ak9297nu3u/u/b29vXWmAwCAQ7qW4H1VXM4AAMB1ZlHwVtVTkvzVJG/ddhwAAFjXomt4u/sPknz1xrMAAMDq3GkNAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYbVHwVtVTq+rOqvpQVV2oqm/bejAAAFjDqYXrfizJL3b3K6vqSUmesuFMAACwmgODt6r+dJK/nOTVSdLdn0vyuW3HAgCAdSy5pOGbklxM8u+q6teq6g1V9RUbzwUAAKtYcknDqSTfmuQHuvuuqvqxJLcl+YeXL6qqs0nOJsnp06fXnnORM7e941i+LxzG/be//LhHAIDRlpzhfSDJA9191+7zO3MpgP+E7j7X3fvdvb+3t7fmjAAA8IQdGLzd/X+S/HZVPXv3pRcl+eCmUwEAwEqWvkvDDyR5y+4dGj6a5Hu3GwkAANazKHi7+94k+xvPAgAAq3OnNQAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYLRTSxZV1f1JPpPk80ke6e79LYcCAIC1LArenb/S3Z/YbBIAANiASxoAABhtafB2kl+qqrur6uyWAwEAwJqWXtJwc3c/WFVfk+RdVfWh7n7v5Qt2IXw2SU6fPr3ymAAA8MQsOsPb3Q/u/nwoyduSPP8qa85193537+/t7a07JQAAPEEHBm9VfUVVfdWjj5P8tSQf2HowAABYw5JLGr42yduq6tH1/7G7f3HTqQAAYCUHBm93fzTJXziCWQAAYHXelgwAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMtjh4q+qGqvq1qvr5LQcCAIA1XcsZ3tcmubDVIAAAsIVFwVtVz0jy8iRv2HYcAABY19IzvP88yd9L8kcbzgIAAKs7MHir6juSPNTddx+w7mxVna+q8xcvXlxtQAAAOIwlZ3hvTnJLVd2f5CeTvLCqfuLKRd19rrv3u3t/b29v5TEBAOCJOTB4u/uHu/sZ3X0mya1J3t3d37X5ZAAAsALvwwsAwGinrmVxd78nyXs2mQQAADbgDC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADDagcFbVU+uqv9RVb9eVfdV1T8+isEAAGANpxas+WySF3b3w1V1Y5Jfrapf6O73bTwbAAAc2oHB292d5OHdpzfuPnrLoQAAYC2LruGtqhuq6t4kDyV5V3ffte1YAACwjkXB292f7+7nJnlGkudX1XOuXFNVZ6vqfFWdv3jx4tpzAgDAE3JN79LQ3b+f5D1JXnKV585193537+/t7a00HgAAHM6Sd2nYq6qn7h5/eZIXJ/nQ1oMBAMAalrxLw9cneXNV3ZBLgfzT3f3z244FAADrWPIuDb+R5HlHMAsAAKzOndYAABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRDgzeqnpmVf1KVV2oqvuq6rVHMRgAAKzh1II1jyT5oe6+p6q+KsndVfWu7v7gxrMBAMChHXiGt7s/3t337B5/JsmFJE/fejAAAFjDNV3DW1VnkjwvyV1Xee5sVZ2vqvMXL15cZzoAADikxcFbVV+Z5GeSvK67P33l8919rrv3u3t/b29vzRkBAOAJWxS8VXVjLsXuW7r7rduOBAAA61nyLg2V5MeTXOjuH91+JAAAWM+SM7w3J/nuJC+sqnt3Hy/beC4AAFjFgW9L1t2/mqSOYBYAAFidO60BADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0Q4M3qp6Y1U9VFUfOIqBAABgTUvO8L4pyUs2ngMAADZxYPB293uTfPIIZgEAgNW5hhcAgNFWC96qOltV56vq/MWLF9d6WQAAOJTVgre7z3X3fnfv7+3trfWyAABwKC5pAABgtCVvS3ZHkv+e5NlV9UBVvWb7sQAAYB2nDlrQ3a86ikEAAGALLmkAAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACjCV4AAEYTvAAAjCZ4AQAYTfACADCa4AUAYDTBCwDAaIIXAIDRBC8AAKMJXgAARhO8AACMJngBABhN8AIAMJrgBQBgNMELAMBoghcAgNEELwAAowleAABGWxS8VfWSqvpwVX2kqm7beigAAFjLgcFbVTck+ZdJXprkW5K8qqq+ZevBAABgDUvO8D4/yUe6+6Pd/bkkP5nkFduOBQAA61gSvE9P8tuXff7A7msAAHDinVqwpq7ytf6iRVVnk5zdffpwVX34cV7zpiSfWPC9OTns2Ubqn2z20vbs+mK/NuIY4zL2bCMbHWdL9usblrzQkuB9IMkzL/v8GUkevHJRd59Lcm7JN62q8929v2QtJ4M9u/7Ys+uL/br+2LPrjz27vqy5X0suafifSZ5VVd9YVU9KcmuSt6/xzQEAYGsHnuHt7keq6u8k+S9Jbkjyxu6+b/PJAABgBUsuaUh3vzPJO1f8vosufeBEsWfXH3t2fbFf1x97dv2xZ9eX1farur/o988AAGAMtxYGAGC0IwneqvqzVfWuqvpfuz+f9hjrPl9V9+4+/GLcMTjoNtJV9WVV9VO75++qqjNHPyWPWrBfr66qi5cdV993HHPyBVX1xqp6qKo+8BjPV1X9i92e/kZVfetRz8gXLNivb6+qT112jP2jo56RP6mqnllVv1JVF6rqvqp67VXWOM5OiIX7dejj7KjO8N6W5Je7+1lJfnn3+dX8YXc/d/dxyxHNxs7C20i/Jsn/7e4/l+SfJdnuHS55XNdw2++fuuy4esORDsnVvCnJSx7n+Zcmedbu42ySf3UEM/HY3pTH368k+W+XHWM/cgQz8fgeSfJD3f3NSV6Q5G9f5b+NjrOTY8l+JYc8zo4qeF+R5M27x29O8teP6PtybZbcRvryvbwzyYuq6mo3J2F7bvt9Heru9yb55OMseUWSf9+XvC/JU6vq649mOq60YL84Ybr74919z+7xZ5JcyBffIdZxdkIs3K9DO6rg/dru/nhy6R8sydc8xronV9X5qnpfVYnio7fkNtJ/vKa7H0nyqSRffSTTcaWlt/3+zt2P7O6sqmde5XlOFrdzv/58W1X9elX9QlX9+eMehi/YXXb3vCR3XfGU4+wEepz9Sg55nC16W7Ilquq/Jvm6qzz1D67hZU5394NV9U1J3l1V7+/u31xnQhZYchvpRbea5kgs2YufS3JHd3+2qr4/l87Ov3DzyTgMx9j15Z4k39DdD1fVy5L851z6MTnHrKq+MsnPJHldd3/6yqev8lccZ8fogP069HG22hne7n5xdz/nKh8/m+R3H/1Rwe7Phx7jNR7c/fnRJO/Jpcrn6Cy5jfQfr6mqU0n+TPy477gcuF/d/Xvd/dndp/82yV88otl44hbdzp2Tobs/3d0P7x6/M8mNVXXTMY/1Ja+qbsyleHpLd7/1KkscZyfIQfu1xnF2VJc0vD3J9+wef0+Sn71yQVU9raq+bPf4piQ3J/ngEc3HJUtuI335Xr4yybvbmzkflwP364pr0m7JpWujONnenuRv7n6L/AVJPvXoJWGcPFX1dY/+HkNVPT+X/r/6e8c71Ze23X78eJIL3f2jj7HMcXZCLNmvNY6z1S5pOMDtSX66ql6T5GNJ/kaSVNV+ku/v7u9L8s1J/k1V/VEu/YPc3t2C9wg91m2kq+pHkpzv7rfn0r+U/6GqPpJLZ3ZvPb6Jv7Qt3K8frKpbcum3YD+Z5NXHNjBJkqq6I8m3J7mpqh5I8vokNyZJd//rXLqr5cuSfCTJHyT53uOZlGTRfr0yyd+qqkeS/GGSW50EOHY3J/nuJO+vqnt3X/v7SU4njrMTaMl+Hfo4c6c1AABGc6c1AABGE7wAAIwmeAEAGE3wAgAwmuAFAGA0wQsAwGiCFwCA0QQvAACj/X82A/LvMjljrgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "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.0 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }