{"nbformat_minor": 0, "worksheets": [{"cells": [{"source": ["Advanced Wavelet Thresholdings\n", "==============================\n", "\n*Important:* Please read the [installation page](http://gpeyre.github.io/numerical-tours/installation_matlab/) for details about how to install the toolboxes.\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n"], "metadata": {}, "cell_type": "markdown"}, {"source": ["This numerical tour present some advanced method for denoising that makes\n", "use of some exoting 1D thresholding functions, that in some cases give\n", "better results than soft or hard thresholding."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 2, "cell_type": "code", "language": "python", "metadata": {}, "input": ["warning off\n", "addpath('toolbox_signal')\n", "addpath('toolbox_general')\n", "addpath('solutions/denoisingwav_3_advanced')\n", "warning on"]}, {"source": ["Generating a Noisy Image\n", "------------------------\n", "Here we use an additive Gaussian noise.\n", "\n", "\n", "First we load an image."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 3, "cell_type": "code", "language": "python", "metadata": {}, "input": ["n = 256;\n", "name = 'hibiscus';\n", "M0 = load_image(name,n);\n", "M0 = rescale( sum(M0,3) );"]}, {"source": ["Noise level."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 4, "cell_type": "code", "language": "python", "metadata": {}, "input": ["sigma = .08;"]}, {"source": ["Then we add some Gaussian noise to it."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 5, "cell_type": "code", "language": "python", "metadata": {}, "input": ["M = M0 + sigma*randn(size(M0));"]}, {"source": ["Compute a 2D orthogonal wavelet transform."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 6, "cell_type": "code", "language": "python", "metadata": {}, "input": ["Jmin = 3;\n", "MW = perform_wavelet_transf(M,Jmin,+1);"]}, {"source": ["Semi-soft Thresholding\n", "----------------------\n", "Hard and soft thresholding are two specific non-linear diagonal\n", "estimator, but one can optimize the non-linearity to capture the\n", "distribution of wavelet coefficient of a class of images.\n", "\n", "\n", "Semi-soft thresholding is a familly of non-linearities that interpolates between soft and hard thresholding.\n", "It uses both a main threshold |T| and a secondary threshold |T1=mu*T|.\n", "When |mu=1|, the semi-soft thresholding performs a hard thresholding,\n", "whereas when |mu=infty|, it performs a soft thresholding."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [{"metadata": {}, "png": "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\nFRKwL9QLoE6WEBdJF0DNTGDzck5JvQAqZgKbkVNOg3oBVM0ENmXlECAEAftDvQCisIT4j3QBxGIC\nS0m9AAISMPUCCKnrJUTpAoir3wlMvQBC6zRg6gUQXY9LiDll6QKIrrsJbJy97v5D8wN/6KcaLqOG\na0guo7JrSC6jsmtI1VzGuo4mMMuGAC1pKmDv/2QYhj+hUi+AxjQVsPTRrZF6AbQnzz7iB/WawF5/\nqX93vAKs5QLUpf46tDmB5fwvzP+mrtq/CgDsFjVgkx0y/3JV/b8XACglasA+W/WaugDoQVMP+p/3\nwABoVVMBA6AfUZcQt1h5Wtj9nl3hrGQ2reQyRr4iL48vv9fw2ajhGl7q+YqkOj4hS1oOWKrmU1/D\noSyT/Zk9X8bjX473v37nn4qXGr4xariGVM0XpZIHz3WNn4WYc378u+Hxn4dUzfdiPZdRyZU8rpJP\nhWt4qeHhYlTDg+dXXUxg9XxPPKie70VfDmY9/o1Rz89IDUI8eDYSsEqeFvZ5GeNbXv97zyWtfDZu\n+xGdvYbxjXd+XWYvg9rc/40x6+afkU+PPFzMevxrsVEjAavkaWGff+IjtzqmBxnX8alYf/vNl0Ft\nHp+9avhWqefOaA2fjS0aCdin1/STnv7ZeFwln4r3f10+eyWPq+QrUokavjF8Rd4F+myEKS0AvGt8\nFyIArRIwAEISMABCEjAAQhIwAEISMABCEjAAQhIwAEISMABCEjAAQhIwAEISMABCEjAAQhIwAEIS\nMABCEjAAQhIwAEISMABCEjAAQhIwAEISMABCEjAAQhIwAEISMABCEjAAQhIwAEISMABCEjAAQhIw\nAEISMABCEjAAQhIwAEISMABCEjAAQvo/oUKIhjS4BQkAAAAASUVORK5CYII=\n", "output_type": "display_data"}], "prompt_number": 7, "cell_type": "code", "language": "python", "metadata": {}, "input": ["T = 1; % threshold value\n", "v = linspace(-5,5,1024);\n", "clf;\n", "hold('on');\n", "plot(v, perform_thresholding(v,T,'hard'), 'b--');\n", "plot(v, perform_thresholding(v,T,'soft'), 'r--');\n", "plot(v, perform_thresholding(v,[T 2*T],'semisoft'), 'g');\n", "plot(v, perform_thresholding(v,[T 4*T],'semisoft'), 'g:');\n", "legend('hard', 'soft', 'semisoft, \\mu=2', 'semisoft, \\mu=4');\n", "hold('off');"]}, {"source": ["__Exercise 1__\n", "\n", "Compute the denoising SNR for different values of |mu| and different\n", "value of |T|. Important: to get good results, you should not threshold\n", "the low frequency residual.\n", "list/sigma, mulist,"], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [{"metadata": {}, "png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAIAAADOgk3lAAAACXBIWXMAAAsSAAALEgHS3X78AAAA\nIXRFWHRTb2Z0d2FyZQBBcnRpZmV4IEdob3N0c2NyaXB0IDguNTRTRzzSAAARuElEQVR4nO3dQYsj\nxfsH8O6Z2R3ZUfbwg8WD4iLeBHFxBY96Eb2JFw+CIILgRRD1XSiCF0EQQfDgxavgyRcg6HvwBYi6\nqMPuTP6H/tubTSfdna4kVU/y+Zx6k1SqOjvT3zxVlUw9m80qAIjmKPcAAGAKAQZASAIMgJBOcg+A\nXavreuGWhXXQ9gFL10ebe+fv6j7hqmeepttjRlkGk9JpuAGPf4b5xxT1Q8LOqMAOy9Kwqeu6J4Q2\n3t2OnyE6rwCsogI7IKtKq1WXyLqux7+l7T6yedq1nmT8k+eSayRtv4OlxmHWIod2vjRUYAen+6s+\nPwmzIOXtv2sKsFUqMJabzWZ7P3nVFivzZ9qN8+6Cn2wujf+XwyTAqKqhKamtXhcWYnJhrmxwDKua\nT35AN7YTX4HJI1x4BQaHNPiKLU3lhRTv2Z7TP/M85j9o2jMsffDgI7vvwPpPTQRGZArxgLS1xchd\nG4m/zOM3kvXfktJ85PPPZrOFcXZvmWZTI0wfRn+/Y4bRE6irbunpZa0Tn/Ca9Dz/bl5zdkAFdljm\n58d63hrP395chgav5quCYUyThWqg6W789ujBsS2tabr3dt+Gb2oedbA6Gf8K9Lwg/a/YyBdhI60G\nm/ef+OCzrRrPyN6nPRsFUoEdotmc5pbBX+Bpv+Hr1nmbncDpXsp7tqtktL1XYHIXG3npBjsdOaql\nkTw+O6tlWbXus1EmFdihm59XXHWVmTbfuMFt9D2dtvNUIxfJNqj/mZvxjBlhsXpOMPR5sTcE2AGZ\nfLkZP5HYbbVuX+vqFpGlXU/LH+E0+3peBCLAWENpk2/zVpWSW63/Jjx+wluBXEYOMtx5sTesgR2c\naVuwtndh6t+ZNth23dW7kTswN2XdERb1FqHnpdvIyzjyxJcuv03ufbPPRl4qsAPSzulN3lG22d/z\nVeNZNyxXjWpTz59u4yMcrHUSi6GRA0tJkQknvtkfP6G1B1Rgh2Xpx5s29ZmnVQbfXPff0mPwXBKf\nP93GR7jW7rsU/QNL/yla68S7T54Yz+O7pmTmrAGmb3EiIxUYcFi6C3imE4OyBgYcom5oKb/CMYUI\nHKLsW3tIJ8AACMkaGAAhCTAAQhJgAIQkwAAISYABEJIAAyAkAQZASAIMgJAEGAAhCTAAQvJlvmyG\n7/NmZ3wBHg0BRhEeeeSRnnv/+uuvngc8+uijKV0/9dRTPff+8MMPr776as8Dnn766cldP/PMMz33\nvvXWW998803PA5544onJXV+/fr3n3mefffbXX3/tecDVq1cnd11V1fn5+aq7bt269csvv/S0vXXr\nVkrX7BNTiACEJMAACEmAARCSvwfGZiRu4uhfA+u31TWwQdtbAxu0vTWwQdtbAxt069YtVy0aKjAA\nQhJgAIQkwAAISYABEJIAAyAkAQZASAIMgJAEGAAhCTAAQhJgAIQkwAAISYABEJIAAyAkAQZASAIM\ngJBOcg+A/XF6ejq57WOPPTa57QsvvDC5bVVVL730Ukrz559/fnLbxL9klvJnse7cuZPS9e+//57S\n/I8//khpDg0VGAAhCTAAQhJgAIRkDYxR6rqe/2fK6gvARqjAGLaQXktvAdgxAcaANqtm/1m4HSAL\nAcYo83OG5g+BEggwAEKyiYMB6i2gTAKMtTWrX91gOz8/bw5SvpIDul588cXcQ6BEAoz1rEqvSm6x\nNT/99FN7LMxoCTDG6okugN0TYAyb30mfdyQALQHGKKILKI1t9AzwgWWgTCowRlkaY8oyICMVGAAh\nqcAYoMwCyqQCAyAkAQZASKYQ2Zizs7PJbW/evDm57e3btye3rarqueeeS2meMvKjo6R3kH/++efk\ntn///XdK13fu3ElpnjJyaKnAAAhJgAEQkgADICQBBkBIAgyAkAQYACEJMABCEmAAhCTAAAhJgAEQ\nkgADICQBBkBIAgyAkAQYACEJMABCEmAAhCTAAAhJgAEQkgADIKST3ANgf5ydnU1u+/jjj09ue/Pm\nzcltq6q6ceNGSvPT09PJbc/Pz1O6Tmn+77//pnT9zz//ZGwODRUYACEJMABCEmAAhCTAWE9d13Vd\n5x4FgAADICYBxhrUXkA5BBhj1XU9m81yjwLg/wkwAEISYIyi/AJK45s4GDZy6eu3335rDlK+VgO6\n3njjjdxDoEQCjFHGlF9yiy357rvv2mNhRssUIgNMHgJlUoExrDuF2Nwi2ICMVGAAhKQCY8BCmaX2\nAgqhAgMgJAEGQEimEFmPyUOgECowAEISYACEZAqRjXn44Ycnt71x48bktv/73/8mt62q6tq1aynN\n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\n", "output_type": "display_data"}], "prompt_number": 8, "cell_type": "code", "language": "python", "metadata": {}, "input": ["exo1()"]}, {"collapsed": false, "outputs": [], "prompt_number": 9, "cell_type": "code", "language": "python", "metadata": {}, "input": ["%% Insert your code here."]}, {"source": ["One can display, for each |mu|, the optimal SNR (obtained by testing many\n", "different |T|). For |mu=1|, one has the hard thresholding, which gives\n", "the worse SNR. The optimal SNR is atained here for |mu| approximately\n", "equal to 6."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [{"metadata": {}, "png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAIAAADOgk3lAAAACXBIWXMAAAsSAAALEgHS3X78AAAA\nIXRFWHRTb2Z0d2FyZQBBcnRpZmV4IEdob3N0c2NyaXB0IDguNTRTRzzSAAAPsklEQVR4nO3d25qb\nxhKAUcjn939l9gUOWwHESdBUda915cxIthQ0/FPQQv0wDB0AZPPP2w8AAK4QMABSEjAAUhIwAFIS\nMABSEjAAUhIwAFISMABSEjAAUhIwAFISMABSEjAAUhIwAFISMABSEjAAUhIwAFISMABSEjAAUhIw\nAFISMABSEjAAUhIwAFISMABSEjAAUhIwAFISMABSEjAAUhIwAFISMABSEjAAUvrzyr/a9/0wDN++\nNf35221Wb3z8XgBsmPaswfemLwRstTqr39ro3O//FgBrYlfrQ9GAbedk/O5UrIPt2S3cWwPZ7/VN\nx1NuRIPPuu6nPNvXjk+076OPX13JgJ2q1/jnvu/rft0AvOJzf/ztfE78UaxcwM6OVt3h4enUaTOA\nBq2OWdm9s4hjw/Eajbe8/bQZQB0OjFm5vbC7Xx4t7L6PZRsPb7rLcrbbmPbkDajM5/mqX6I122HG\n31uGm8Bm7dmdqJanzTZuAFCZcZ93y8L3z71liiXcsQK2W6NvNwZox2zMGv+zwT1irIABsGrj2GCD\n6RoJGEBQ1a/C+FGUgC3f9bV7BHa5GGR1eQhALlmu5PS6KAGbbCyDmfVpal7JhwfwBMPWBYECtly1\nceQyUd7FDCRy15J3ulcCtpGZ4yvmD94FII4bl7zThZrAAKq0PNEhXbcQMIBHmLSeJmAAd9KtYgQM\n4FeWY7xCwAAuMmy9S8AATjBsxSFgAPsMWwEJGMA6w1ZwAgYwJ10pCBjAX44T5iJgQOt0KykBAxql\nW9kJGNAW3aqGgAFN0K36CBhQM92qmIABFdKtFggYUIPZZ27pVgsEDEjPvNWmf95+AADX9X3X93+7\npV6tMYEB+SxHLvVqkIABmYzpkis6AQNScJaLJQEDQjNy8Y2AAREZudglYEAsRi4OEjAgBCMXZwkY\n8DIjF9cIGFCayz5xCwED3qFb/EjAgHJmsxf8QsCAEpzo4nYCBjzI2kKeI2DAI4xcPE3AgJtJF2UI\nGHAb6aIkAQNuIF2UJ2DAT6SLtwgYcJF08S4BA06TLiIQMOAE6SIOAQP2eT8yAQkYsMXIRVj/vP0A\n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\n", "output_type": "display_data"}], "prompt_number": 10, "cell_type": "code", "language": "python", "metadata": {}, "input": ["err_mu = compute_min(err, 2);\n", "clf;\n", "plot(mulist, err_mu, '.-');\n", "axis('tight');\n", "set_label('\\mu', 'SNR');"]}, {"source": ["Soft and Stein Thresholding\n", "---------------------------\n", "Another way to achieve a tradeoff between hard and soft thresholding is\n", "to use a soft-squared thresholding non-linearity, also named a Stein estimator.\n", "\n", "\n", "We compute the thresholding curves."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 11, "cell_type": "code", "language": "python", "metadata": {}, "input": ["T = 1; % threshold value\n", "v = linspace(-4,4,1024);"]}, {"source": ["hard thresholding"], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 12, "cell_type": "code", "language": "python", "metadata": {}, "input": ["v_hard = v .* (abs(v)>T);"]}, {"source": ["soft thresholding"], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 13, "cell_type": "code", "language": "python", "metadata": {}, "input": ["v_soft = v .* max( 1-T./abs(v), 0 );"]}, {"source": ["Stein thresholding"], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 14, "cell_type": "code", "language": "python", "metadata": {}, "input": ["v_stein = v .* max( 1-(T^2)./(v.^2), 0 );"]}, {"source": ["We display the classical soft/hard thresholders."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [{"metadata": {}, "png": "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\npAlBlgnQ1MATWJAsBFkmQGujBuyKi14HbvZSL4BPhtxCXD5upOn/4O4Dh9IF8N1gAbsiC+oFUEOq\ngD326NZroV4AiaQK2HRPxcpdVhfV68B9ytIFsEWqQxwfa3HRUKNeAPVkm8BeTvrdnr904sGDtdk2\nBNgrasBeQ3V/739sIf77ZdN06zNZT9QL4ICoAXuv0rGnC5blyAZAM1ED9u52u/04hVjZ3npJF8AZ\neQI2XXd9y+AF0F6qU4gXUi+AxlJNYJfYde1NugBKMYGdpV4AlxCwRtQLoCwBa0G9AIoTsH0OfKyX\negHU4BDHbi56AfRAwLZynzJAV2whbqJeAL0xgW0iXQC9MYGVpF4AzQhYMeoF0JItxHUeEAXQORPY\nil13eqkXwCUE7NWuA4fqBXAVAftDvQCicA3sP657AQQiYP9sr5d0AfRAwGwbAoQ0+jUw9QIIaugJ\nbHu9pAugN6NPYOoFENTQAVMvgLiG3kL8TroAejbWBLbrGVGTegF0bKAJbHu9zF4A/RslYO5TBkhm\niC1E9QLIJ/8EtrFe0gUQS/4JTL0AUsofsJ/UCyCi/FuIX0gXQFzjTmDqBRDaoAFTL4DoRtxCnGfp\nAghvuAls58OkGtn7jKurWGdZ1llQiEVO1lnUQBOYbUOATBJOYKt/cVAvgGSyBUy9AAax9SGBISxP\njXp+dtQ9ZwE2cwG60n8dkl8Du3//e/8xALBX1AnsZatwGbxevtJ2RQA0FTVgX2z/8BQA4sp2iAOA\nQRhWAAgp+SGOKcKO4uPqnXUW1PnP3TezrCjfzyjrXPT/c08esBBPQ5nur+b+Xy4h1tn/D/3vnR6+\nmWWEeHFOcdYZ4kef+RpY/y+RRYhFTqHWGWWp/YvyzQyxyCnOOqO8eSafwKII8ZedRZRXNgMK8eIM\n9Ie9f0kC9um2sMe/dvKy/nSz2mNX4YI1rVld5/LFTr6TCzf/sejwxflJb3/Y3/X55rkqScDev8V9\nXmN4X0lXy3v4tKTeltrberhQ/y+GPv+wv+vzzXNVkoDF9fwMkZ5fK89/KZv6Xmr/ovzQo4jy4vRz\nL673wALAqsynEAFITMAACEnAAAhJwAAIScAACEnAAAhJwAAIScAACEnAAAhJwAAIScAACEnAAAhJ\nwAAIScAACEnAAAhJwAAIScAACEnAAAhJwAAIScAACEnAAAhJwAAIScAACEnAAAhJwAAIScAACEnA\nAAhJwAAIScAACEnAAAhJwAAIScAACEnAAAhJwAAI6f8BPxqWvoK2oEcAAAAASUVORK5CYII=\n", "output_type": "display_data"}], "prompt_number": 15, "cell_type": "code", "language": "python", "metadata": {}, "input": ["clf;\n", "hold('on');\n", "plot(v, v_hard, 'b');\n", "plot(v, v_soft, 'r');\n", "plot(v, v_stein, 'k--');\n", "hold('off');\n", "legend('Hard', 'Soft', 'Stein');"]}, {"source": ["__Exercise 2__\n", "\n", "Compare the performance of Soft and Stein thresholders, by determining\n", "the best threshold value."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [{"metadata": {}, "png": "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\n", "output_type": "display_data"}], "prompt_number": 16, "cell_type": "code", "language": "python", "metadata": {}, "input": ["exo2()"]}, {"collapsed": false, "outputs": [], "prompt_number": 17, "cell_type": "code", "language": "python", "metadata": {}, "input": ["%% Insert your code here."]}], "metadata": {}}], "nbformat": 3, "metadata": {"kernelspec": {"name": "matlab_kernel", "language": "matlab", "display_name": "Matlab"}, "language_info": {"mimetype": "text/x-matlab", "name": "matlab", "file_extension": ".m", "help_links": [{"url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md", "text": "MetaKernel Magics"}]}}}