{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "A notebook to test calculating of SNR, SSIM, and MSE for a filter using a number of randomly generated additive noise problems" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Setup\n", "Here we import the libraries we need" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt # plotting and showing images\n", "import numpy as np # handling arrays\n", "from skimage.io import imread # reading images\n", "from skimage.measure import compare_ssim as ssim # structural similarity\n", "mse = lambda img1, img2: np.sum(np.power(img1-img2,2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Load and Show Phantom" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "d=np.mean(imread('data/testpattern.png'),2)\n", "plt.imshow(d, cmap= 'gray')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tasks\n", "Evaluate a number of different filters using different noise levels and determine which works the best under which circumstances. The example is done for a uniform filter, and you job is to add \n", "\n", " 1. gaussian\n", " 2. median \n", " 3. wavelet (advanced) \n", " 4. anisotropic diffusion (expert)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "\n", "scales = [0.1, 0.5, 1, 10, 20, 100];\n", "\n", "Ntests = 10;\n", "\n", "# initialize arrays for results\n", "mse1 = np.zeros((len(scales), Ntests), dtype = np.float32)\n", "ssim1 = np.zeros((len(scales), Ntests), dtype = np.float32)\n", "from scipy.ndimage.filters import uniform_filter\n", "current_filter = lambda img: uniform_filter(img, 5)\n", "\n", "for i, c_scale in enumerate(scales):\n", " for j in range(Ntests):\n", " x = current_filter(d+c_scale*np.random.uniform(-c_scale, c_scale, size = d.shape))\n", " mse1[i,j]=mse(d,x);\n", " ssim1[i,j]=ssim(d,x); \n", " # Add some lines here to display the latest image in a subplot" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'SSIM')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (ax1, ax2) = plt.subplots(1,2)\n", "ax1.loglog(scales,np.mean(mse1,1)) # Add annotations for the plot and axes\n", "ax1.set_title('MSE vs Scale')\n", "ax1.set_xlabel('Scale')\n", "ax1.set_ylabel('MSE')\n", "\n", "ax2.semilogx(scales,np.mean(ssim1,1))\n", "ax2.set_title('SSIM vs Scale')\n", "ax2.set_xlabel('Scale')\n", "ax2.set_ylabel('SSIM')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# make a version of the plot showing SNR instead of scale" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Test run for filter 2\n", "\n", "### repeat the code from filter 1 \n", "\n", "```" ] }, { "cell_type": "code", "execution_count": null, "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.6.4" } }, "nbformat": 4, "nbformat_minor": 1 }