{"id":5629,"date":"2014-11-21T09:00:19","date_gmt":"2014-11-21T14:00:19","guid":{"rendered":"https:\/\/blogs.mathworks.com\/pick\/?p=5629"},"modified":"2014-11-19T12:01:34","modified_gmt":"2014-11-19T17:01:34","slug":"how-noisy-are-your-images-revisited","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/pick\/2014\/11\/21\/how-noisy-are-your-images-revisited\/","title":{"rendered":"How noisy are your images&#8230;revisited"},"content":{"rendered":"\r\n\r\n<div class=\"content\"><!--introduction--><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#e04db0c9-9cd1-477d-ba2f-f73f7431834f\">Create Noisy Images<\/a><\/li><li><a href=\"#7ef87e74-2526-4d28-80af-6cfeefe5d89a\">Quantifying Noise<\/a><\/li><li><a href=\"#c7352da9-37ce-4e73-a6bd-7d41b28f81fe\">Tabulate Results<\/a><\/li><li><a href=\"#e890cece-68b3-4f0e-89a7-874cd3284b89\">Interpretations?<\/a><\/li><li><a href=\"#4be0e49a-9ddb-4ea1-8705-9ee60dcbc1ef\">Improving the analysis<\/a><\/li><li><a href=\"#cde3f430-74ba-4201-8443-fef65240c448\">Plotting the results<\/a><\/li><li><a href=\"#62884273-d4d9-455c-b9ec-d7584487cc0c\">Conclusions<\/a><\/li><li><a href=\"#55ea98b6-3707-417c-9e98-8626ec814a95\">SWAG!<\/a><\/li><\/ul><\/div><p><a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/911\">Brett<\/a>'s Pick this week includes nods to two readers, and a submission called <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/36941-fast-noise-estimation-in-images\">Fast Noise Estimation in Images<\/a> by <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/50252\">Tolga Birdal<\/a>.<\/p><p>In my <a href=\"https:\/\/blogs.mathworks.com\/pick\/2014\/09\/05\/how-noisy-are-your-images\/\">last post, back in September<\/a>, I discussed several files for quantifying noise in images, without reference to a gold-standard image. I Picked and compared three submissions that simplified the quantification of image noise in isolated images. All of my tests, however, were conducted against image files that I had artificially blurred. Eric and Marco correctly <a href=\"https:\/\/blogs.mathworks.com\/pick\/2014\/09\/05\/how-noisy-are-your-images\/#respond\">took me to task<\/a> for that, pointing out that 'blur' is not synonymous with 'noise' (though maybe we can agree that it can be a <i>type<\/i> of noise.)<\/p><p>Marco further pointed me to Tolga's submission, a fiendishly simple function that convolves the test image with a reference kernel to quantify noise.<\/p><p>In today's post, I would like to revisit noise quantification using my previous Picks, <i>and<\/i> Tolga's, and to look at their application to images containing different types of noise. I will again use the \"rice.png\" image that ships with the <a href=\"https:\/\/www.mathworks.com\/products\/image\/\">Image Processing Toolbox<\/a> to consider how each does in quantifying the five types of noise-- \"contant Gaussian,\" \"locally varying Gaussian,\" Poisson, salt-and-pepper, and speckle--created by the <a href=\"https:\/\/www.mathworks.com\/help\/images\/ref\/imnoise.html\"><tt>imnoise<\/tt><\/a> function. To start, I'm going to use default input parameters (where possible) in the calls to <tt>imnoise<\/tt>.<\/p><h4>Create Noisy Images<a name=\"e04db0c9-9cd1-477d-ba2f-f73f7431834f\"><\/a><\/h4><pre>img = cell(6,1);\r\nimg{1} = imread('rice.png');\r\nsubplot(2,3,1)\r\nimshow(img{1});title('No Noise');\r\nimg{2} = imnoise(img{1},'gaussian');\r\nsubplot(2,3,2)\r\nimshow(img{2});title('Gaussian');\r\nimg{3} = imnoise(img{1},'localvar',0.05*rand(size(img{1})));\r\nsubplot(2,3,3)\r\nimshow(img{3});title('Local Gaussian');\r\nimg{4} = imnoise(img{1},'poisson');\r\nsubplot(2,3,4)\r\nimshow(img{4});title('Poisson');\r\nimg{5} = imnoise(img{1},'salt &amp; pepper');\r\nsubplot(2,3,5)\r\nimshow(img{5});title('Salt &amp; Pepper');\r\nimg{6} = imnoise(img{1},'speckle');\r\nsubplot(2,3,6)\r\nimshow(img{6});title('Speckle');<\/pre><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/NoisyImages.png\" alt=\"\"> <\/p><h4>Quantifying Noise<a name=\"7ef87e74-2526-4d28-80af-6cfeefe5d89a\"><\/a><\/h4><p>Now consider how each of the tools we've discussed:<\/p><div><ul><li><a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/24676-image-blur-metric\">Image Blur Metric<\/a> (<a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/63035\">Do Quoc Bao<\/a>)<\/li><li><a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/30800-blind-image-quality-assessment-through-anisotropy\">Blind image quality assessment through anisotropy<\/a> (<a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/127745\">Salvador Gabarda<\/a>)<\/li><li><a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/36921-noise-level-estimation-from-a-single-image\">Noise Level Estimation from a Single Image<\/a> (<a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/253277\">Masayuki Tanaka<\/a>)<\/li><li><a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/36941-fast-noise-estimation-in-images\">Fast Noise Estimation in Images<\/a> (<a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/50252\">Tolga Birdal<\/a>)<\/li><\/ul><\/div><p>quantifies noise in each of these images:<\/p><pre>for ii = 1:6\r\n   imageBlur(ii) = blurMetric(img{ii});\r\n   blindImageQuality(ii) = blindimagequality(img{ii},2);\r\n   noiseLevel(ii) = NLEstimate(img{ii});\r\n   fastNoiseEstimate(ii) = estimate_noise(img{ii});\r\nend<\/pre><h4>Tabulate Results<a name=\"c7352da9-37ce-4e73-a6bd-7d41b28f81fe\"><\/a><\/h4><pre>NoiseTypes = {'NoNoise';'Gaussian';'LocalGaussian';'Poisson';'SaltAndPepper';'Speckle'};\r\nResults = table(imageBlur,blindImageQuality,noiseLevelEstimage,fastNoise,...\r\n\t 'RowNames',NoiseTypes');<\/pre><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/TabularResults.png\" alt=\"\"> <\/p><h4>Interpretations?<a name=\"e890cece-68b3-4f0e-89a7-874cd3284b89\"><\/a><\/h4><p>Interpreting this table is difficult and subjective. We can't necessarily compare metrics (which are on different scales), and we can't assess how each metric reflects different <i>levels<\/i> of noise. So let's do another series of analyses, increasing the noise successively, and recalculating the metrics. We can then plot some trends.<\/p><h4>Improving the analysis<a name=\"4be0e49a-9ddb-4ea1-8705-9ee60dcbc1ef\"><\/a><\/h4><p>Let's increment four types of noise (omitting Poisson noise, for which <tt>imnoise<\/tt> is not adjustable) five times and recompute the metrics:<\/p><pre>noNoise = imread('rice.png');\r\nindex = 0;\r\nfor noiseType = 1:4\r\n % Loop over noise types\r\n for noiseLevel = 1:5\r\n   index = index + 1;\r\n   level = 0.01*noiseLevel;\r\n   % Create noisy images and loop over metrics\r\n   switch noiseType\r\n    case 1\r\n      str = ['Gaussian (' num2str(level) ')'];\r\n      img{noiseType} = imnoise(noNoise,'gaussian',0,level);\r\n    case 2\r\n      str = [' Local Gaussian (' num2str(level) ')'];\r\n      img{noiseType} = imnoise(noNoise,'localvar',level*rand(size(noNoise)));\r\n    case 3\r\n      str = ['Salt &amp; Pepper (' num2str(level) ')'];\r\n      img{noiseType} = imnoise(noNoise,'salt &amp; pepper',level);\r\n    case 4\r\n      str = ['Speckle (' num2str(level) ')'];\r\n      img{noiseType} = imnoise(noNoise,'speckle',level);\r\n   end\r\n   subplot(4,5,index);\r\n   imshow(img{noiseType});title(str);\r\n   imageBlur(noiseType,noiseLevel) = blurMetric(img{noiseType});\r\n   blindImageQuality(noiseType,noiseLevel) = blindimagequality(img{noiseType},2);\r\n   noiseLevelEstimage(noiseType,noiseLevel) = NLEstimate(img{noiseType});\r\n   fastNoise(noiseType,noiseLevel) = estimate_noise(img{noiseType});\r\n  end\r\nend<\/pre><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/NoisyImageTable.png\" alt=\"\"> <\/p><h4>Plotting the results<a name=\"cde3f430-74ba-4201-8443-fef65240c448\"><\/a><\/h4><pre>f = figure;\r\nset(f,'DefaultAxesFontsize',8)\r\nNoiseTypes = {'Gaussian';'LocalGaussian';'SaltAndPepper';'Speckle'};\r\nfor noiseType = 1:4\r\n   ax = subplot(4,1,noiseType);\r\n   noise = [Results{1,1},imageBlur(noiseType,:)];\r\n   plot(noise\/max(noise));\r\n   if noiseType == 1\r\n      title('Normalized Noise Metrics','fontsize',12);\r\n   end\r\n   hold on\r\n   noise = [Results{1,2},blindImageQuality(noiseType,:)];\r\n   plot(noise\/max(noise));\r\n   noise = [Results{1,3},noiseLevelEstimage(noiseType,:)];\r\n   plot(noise\/max(noise));\r\n   noise = [Results{1,4},fastNoise(noiseType,:)];\r\n   plot(noise\/max(noise));\r\n   ax.XTick = 1:6;\r\n   ax.XTickLabel = [];\r\n   ylabel(NoiseTypes{noiseType})\r\nend\r\nax.XTickLabel = 0:5;\r\nxlabel('NOISE LEVEL')\r\nlegend(MetricNames)<\/pre><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/NoisePlots.png\" alt=\"\"> <\/p><h4>Conclusions<a name=\"62884273-d4d9-455c-b9ec-d7584487cc0c\"><\/a><\/h4><p>Conclusions are easier to draw now. For the most part, we can see metric values monotonically increasing or decreasing with the amount of noise. (The trend is less important than the monotonicity; we can easily think of the metric values as quantifying image quality.)<\/p><p>One final comment: it's very possible--maybe even likely--that these metrics can be tweaked to give better results, and that they will perform differently for different image and noise types. I encourage you to play around with the inputs using your own images; hopefully this discussion will give you a framework for evaluating the different noise metrics.<\/p><h4>SWAG!<a name=\"55ea98b6-3707-417c-9e98-8626ec814a95\"><\/a><\/h4><p>Swag, and thanks, are due to Eric, Marco, and Tolga!<\/p><p>As always, I welcome your <a href=\"https:\/\/blogs.mathworks.com\/pick\/?p=5629#respond\">thoughts and comments<\/a>.<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_6d05a7fa8ec04443996965d7c717c762() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='6d05a7fa8ec04443996965d7c717c762 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 6d05a7fa8ec04443996965d7c717c762';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2014 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_6d05a7fa8ec04443996965d7c717c762()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2014b<br><\/p><\/div><!--\r\n6d05a7fa8ec04443996965d7c717c762 ##### SOURCE BEGIN #####\r\n%% How noisy is your image...revisited\r\n%% \r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/911 Brett>'s Pick this week\r\n% includes nods to two readers, and a submission called\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/36941-fast-noise-estimation-in-images Fast Noise Estimation in Images>\r\n% by <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/50252 Tolga Birdal>. \r\n\r\n%%\r\n% In my <https:\/\/blogs.mathworks.com\/pick\/2014\/09\/05\/how-noisy-are-your-images\/ last post, back in September>,\r\n% I discussed several files for quantifying noise in images, without\r\n% reference to a gold-standard image. I Picked and compared three submissions that simplified the \r\n% quantification of image noise in isolated images. All of my tests, however, were\r\n% conducted against image files that I had artificially blurred. Eric and\r\n% Marco correctly \r\n% <https:\/\/blogs.mathworks.com\/pick\/2014\/09\/05\/how-noisy-are-your-images\/#respond took me to task>\r\n% for that, pointing out that 'blur' is not\r\n% synonymous with 'noise' (though maybe we can agree that it can be a _type_ of noise.)\r\n\r\n%%\r\n% Marco further pointed me to Tolga's submission, a fiendishly simple\r\n% function that convolves the test image with a reference kernel to\r\n% quantify noise.\r\n\r\n%%\r\n% In today's post, I would like to revisit noise quantification using my\r\n% previous Picks, _and_ Tolga's, and to look at their application to images\r\n% containing different types of noise. I will again use the \"rice.png\"\r\n% image that ships with the <https:\/\/www.mathworks.com\/products\/image\/ Image\r\n% Processing Toolbox> to consider how each does in quantifying the five\r\n% types of noiseREPLACE_WITH_DASH_DASH \"contant Gaussian,\" \"locally varying Gaussian,\" Poisson,\r\n% salt-and-pepper, and speckleREPLACE_WITH_DASH_DASHcreated by the\r\n% <https:\/\/www.mathworks.com\/help\/images\/ref\/imnoise.html |imnoise|>\r\n% function. To start, I'm going to use default input parameters (where possible) in\r\n% the calls to |imnoise|.\r\n\r\n%% Create Noisy Images\r\n%  img = cell(6,1);\r\n%  img{1} = imread('rice.png');\r\n%  subplot(2,3,1)\r\n%  imshow(img{1});title('No Noise');\r\n%  img{2} = imnoise(img{1},'gaussian');\r\n%  subplot(2,3,2)\r\n%  imshow(img{2});title('Gaussian');\r\n%  img{3} = imnoise(img{1},'localvar',0.05*rand(size(img{1})));\r\n%  subplot(2,3,3)\r\n%  imshow(img{3});title('Local Gaussian');\r\n%  img{4} = imnoise(img{1},'poisson');\r\n%  subplot(2,3,4)\r\n%  imshow(img{4});title('Poisson');\r\n%  img{5} = imnoise(img{1},'salt & pepper');\r\n%  subplot(2,3,5)\r\n%  imshow(img{5});title('Salt & Pepper');\r\n%  img{6} = imnoise(img{1},'speckle');\r\n%  subplot(2,3,6)\r\n%  imshow(img{6});title('Speckle');\r\n\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/NoisyImages.png>>\r\n% \r\n\r\n%% Quantifying Noise\r\n% Now consider how each of the tools we've discussed:\r\n% \r\n% * <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/24676-image-blur-metric Image Blur Metric> (<https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/63035 Do Quoc Bao>)\r\n% * <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/30800-blind-image-quality-assessment-through-anisotropy Blind image quality assessment through anisotropy> (<https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/127745 Salvador Gabarda>) \r\n% * <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/36921-noise-level-estimation-from-a-single-image Noise Level Estimation from a Single Image> (<https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/253277 Masayuki Tanaka>)\r\n% * <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/36941-fast-noise-estimation-in-images Fast Noise Estimation in Images> (<https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/50252 Tolga Birdal>) \r\n%%\r\n% quantifies noise in each of these images:\r\n%\r\n%  for ii = 1:6\r\n%     imageBlur(ii) = blurMetric(img{ii});\r\n%     blindImageQuality(ii) = blindimagequality(img{ii},2);\r\n%     noiseLevel(ii) = NLEstimate(img{ii});\r\n%     fastNoiseEstimate(ii) = estimate_noise(img{ii});\r\n%  end\r\n\r\n%% Tabulate Results\r\n%  NoiseTypes = {'NoNoise';'Gaussian';'LocalGaussian';'Poisson';'SaltAndPepper';'Speckle'};\r\n%  Results = table(imageBlur,blindImageQuality,noiseLevelEstimage,fastNoise,...\r\n% \t 'RowNames',NoiseTypes');\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/TabularResults.png>>\r\n% \r\n\r\n%% Interpretations?\r\n% Interpreting this table is difficult and subjective. We can't necessarily\r\n% compare metrics (which are on different scales), and we can't assess how\r\n% each metric reflects different _levels_ of noise. So let's do another\r\n% series of analyses, increasing the noise successively, and recalculating\r\n% the metrics. We can then plot some trends.\r\n\r\n%% Improving the analysis\r\n% Let's increment four types of noise (omitting Poisson noise, for which\r\n% |imnoise| is not adjustable) five times and recompute the metrics:\r\n%\r\n%  noNoise = imread('rice.png');\r\n%  index = 0;\r\n%  for noiseType = 1:4\r\n%   % Loop over noise types\r\n%   for noiseLevel = 1:5\r\n%     index = index + 1;\r\n%     level = 0.01*noiseLevel;\r\n%     % Create noisy images and loop over metrics\r\n%     switch noiseType\r\n%      case 1\r\n%        str = ['Gaussian (' num2str(level) ')'];\r\n%        img{noiseType} = imnoise(noNoise,'gaussian',0,level);\r\n%      case 2\r\n%        str = [' Local Gaussian (' num2str(level) ')'];\r\n%        img{noiseType} = imnoise(noNoise,'localvar',level*rand(size(noNoise)));\r\n%      case 3\r\n%        str = ['Salt & Pepper (' num2str(level) ')'];\r\n%        img{noiseType} = imnoise(noNoise,'salt & pepper',level);\r\n%      case 4\r\n%        str = ['Speckle (' num2str(level) ')'];\r\n%        img{noiseType} = imnoise(noNoise,'speckle',level);\r\n%     end\r\n%     subplot(4,5,index);\r\n%     imshow(img{noiseType});title(str);\r\n%     imageBlur(noiseType,noiseLevel) = blurMetric(img{noiseType});\r\n%     blindImageQuality(noiseType,noiseLevel) = blindimagequality(img{noiseType},2);\r\n%     noiseLevelEstimage(noiseType,noiseLevel) = NLEstimate(img{noiseType});\r\n%     fastNoise(noiseType,noiseLevel) = estimate_noise(img{noiseType});\r\n%    end\r\n%  end\r\n\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/NoisyImageTable.png>>\r\n% \r\n%% Plotting the results\r\n%  f = figure;\r\n%  set(f,'DefaultAxesFontsize',8)\r\n%  NoiseTypes = {'Gaussian';'LocalGaussian';'SaltAndPepper';'Speckle'};\r\n%  for noiseType = 1:4\r\n%     ax = subplot(4,1,noiseType);\r\n%     noise = [Results{1,1},imageBlur(noiseType,:)];\r\n%     plot(noise\/max(noise));\r\n%     if noiseType == 1\r\n%        title('Normalized Noise Metrics','fontsize',12);\r\n%     end\r\n%     hold on\r\n%     noise = [Results{1,2},blindImageQuality(noiseType,:)];\r\n%     plot(noise\/max(noise));\r\n%     noise = [Results{1,3},noiseLevelEstimage(noiseType,:)];\r\n%     plot(noise\/max(noise));\r\n%     noise = [Results{1,4},fastNoise(noiseType,:)];\r\n%     plot(noise\/max(noise));\r\n%     ax.XTick = 1:6;\r\n%     ax.XTickLabel = [];\r\n%     ylabel(NoiseTypes{noiseType})\r\n%  end\r\n%  ax.XTickLabel = 0:5;\r\n%  xlabel('NOISE LEVEL')\r\n%  legend(MetricNames)\r\n\r\n%%\r\n% \r\n% <<https:\/\/blogs.mathworks.com\/pick\/files\/NoisePlots.png>>\r\n% \r\n%% Conclusions\r\n% Conclusions are easier to draw now. For the most part, we can see metric\r\n% values monotonically increasing or decreasing with the amount of noise.\r\n% (The trend is less important than the monotonicity; we can easily think\r\n% of the metric values as quantifying image quality.)\r\n\r\n%%\r\n% One final comment: it's very possibleREPLACE_WITH_DASH_DASHmaybe even likelyREPLACE_WITH_DASH_DASHthat these\r\n% metrics can be tweaked to give better results, and that they will perform\r\n% differently for different image and noise types. I encourage you to play\r\n% around with the inputs using your own images; hopefully this discussion\r\n% will give you a framework for evaluating the different noise metrics.\r\n\r\n%% SWAG!\r\n% Swag, and thanks, are due to Eric, Marco, and Tolga!\r\n\r\n%%\r\n% As always, I welcome your\r\n% <https:\/\/blogs.mathworks.com\/pick\/?p=5629#respond thoughts and comments>.\r\n##### SOURCE END ##### 6d05a7fa8ec04443996965d7c717c762\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img decoding=\"async\"  class=\"img-responsive\" src=\"https:\/\/blogs.mathworks.com\/pick\/files\/NoisyImages.png\" onError=\"this.style.display ='none';\" \/><\/div><p>\r\n\r\nContentsCreate Noisy ImagesQuantifying NoiseTabulate ResultsInterpretations?Improving the analysisPlotting the resultsConclusionsSWAG!Brett's Pick this week includes nods to two readers, and a... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/pick\/2014\/11\/21\/how-noisy-are-your-images-revisited\/\">read more >><\/a><\/p>","protected":false},"author":34,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[16],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/posts\/5629"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/comments?post=5629"}],"version-history":[{"count":12,"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/posts\/5629\/revisions"}],"predecessor-version":[{"id":5645,"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/posts\/5629\/revisions\/5645"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/media?parent=5629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/categories?post=5629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/pick\/wp-json\/wp\/v2\/tags?post=5629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}