337 lines
46 KiB
Plaintext
337 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": 17,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Container object of 5 artists>"
|
|
]
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x35df750>"
|
|
]
|
|
},
|
|
"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": [
|
|
"<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": "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\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.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
|
|
} |