Will's pick this week is Genetic Packman by Hanan Kavitz. Here we have a fun application of genetic algorithms. For those of you unfamiliar, a genetic algorithm mimics evolutionary biology by improving the performance of a population of candidate solutions for a particular problem. Candidates have their "fitness" evaluated by defining... read more >>
]]>Sean's pick this week is A thin MATLAB wrapper for the Git source control system by Manu Raghavan. I just began working on my first collaborative project where we're using... read more >>
]]>Sean's pick this week is A thin MATLAB wrapper for the Git source control system by Manu Raghavan.
I just began working on my first collaborative project where we're using Git as the Source Control system.
Starting in MATLAB R2014b, MATLAB supports Git and SVN source control directly from the Current Folder browser.
The Current Folder has support for a common subset of Git functionality. However, some of the more advanced operations, like merging, are not supported. This is where Manu's submission comes in handy. It provides a simple function that wraps around the Git OS command to give you all of the functionality in a similar mechanism to those who have used command line Git before.
Let's take a look at it working when I fixed a bug in my generateReport function. The blue square indicates that the file has changed since it was last commited.
And then to commit the fix:
All green, good to go!
As an aside  Additionally, I learned about the more() function from looking through Manu's code as well!
Give it a try and let us know what you think here or leave a comment for Manu.
Also, what do you think of the new changes to MATLAB Central profile? For example, here is my colleague, Brett's page:
Please let us know your feelings on these changes as well below too!
Get
the MATLAB code
Published with MATLAB® R2014b
Jiro's pick this week is num2words by Stephen Cobeldick. Just recently, I witnessed a typo on a check payment. The amount was for "$19050" (unfortunately, it wasn't for me) but the written text read "One thousand nine hundred ... read more >>
]]>Jiro's pick this week is num2words by Stephen Cobeldick.
Just recently, I witnessed a typo on a check payment. The amount was for "$19050" (unfortunately, it wasn't for me) but the written text read "One thousand nine hundred fifty dollars". Many people might wonder why someone would make such a simple mistake. Did the person miscount the number of zeroes?
I think I have an idea. This was written in Japan. In Japan, and in many other Asian countries, large numbers are grouped in myriads (every 10000). is called man (万), is called oku (億), is called cho (兆). However in Western counting, large numbers are grouped in 1000s  thousand, million, billion, trillion, etc. So, it's likely that the person writing the check wrote "19050", read it as "1 man 9050", and incorrectly translated to "1 thousand 9 hundred 50". Maybe...
Anyway, all of this could have been avoided if this person had access to Stephen's num2words! Just let his function spell out the number in words.
num2words(19050)
ans = nineteen thousand and fifty
This is the simplest use case, but num2words comes with a wealth of options to customize how the results are returned.
num2words(19050,'type','cheque')
ans = nineteen thousand and fifty dollars only
Stephen includes a detailed help in the function, so you can learn about all the options just by typing
help num2words
What gave me a little chuckle was that when I looked inside his function, I could see that he made sure that his function can count up to Uncentillion which is . So if you need to spell out a number larger than , you might be out of luck. :)
Comments
Give this a try, and let us know what you think here or leave a comment for Stephen.
Get
the MATLAB code
Published with MATLAB® R2014b
And so...another year over, a new one just begun.2014 saw some very big changes. MATLAB has changedsubtly. If you haven't tried R2014b yet, try itwe think you'll like it. The new MATLAB Graphics systemlongawaited! is live, and while there may be some growing pains, we're excited about the new things... read more >>
]]>And so...another year over, a new one just begun.
2014 saw some very big changes. MATLAB has changedsubtly. If you haven't tried R2014b yet, try itwe think you'll like it. The new MATLAB Graphics systemlongawaited! is live, and while there may be some growing pains, we're excited about the new things it will enable us to do. In this forum, we welcomed Sean as a lead blogger, and Brett stepped aside to pursue other projects. (He's still around, contributing now and then ;) !)
And once again, the year has seen big growth of MATLAB Central, and lots of big additions to the File Exchange. So without further ado, here is the retrospective of 2014's Picks of the Week.
You can read the original blog posts for each of these picks by clicking on the names of the files and following the links to the "Pick of the Week" tag. As always, your comments are welcome.
Get
the MATLAB code
Published with MATLAB® R2014b
Title/Author/Summary/Notes  Image 

__________________________________________________________________________  
Smooth 3D bezier curves with implicit control points
Uses Hobby's algorithm to plot smooth curves in 3D through specified control points


__________________________________________________________________________  
Sphere Fit (least squared)
Fits a sphere to a set of noisy data. Does not require a wide arc or many points.


__________________________________________________________________________  
Texas Hold'Em Poker Analyzer
Analyzes the win frequency and expected return of a hand in a poker game called Texas Hold'Em.


__________________________________________________________________________  
URL Filter
Scrape one or more numbers off of a web page


__________________________________________________________________________  
International Flight Route Planning Simulator using Aerospace Blockset
Example that shows how you can visualize airline routes on the globe.


__________________________________________________________________________  
Bellagio Fountain Simulation
Simulation of the Bellagio Fountain (100 nozzles)


__________________________________________________________________________  
Polygon simplification
Simplifies a closed polygon by reducing the number of vertices to a specified number


__________________________________________________________________________  
Worker Object Wrapper
Simplifies managing resources such as large data within PARFOR loops and SPMD blocks


__________________________________________________________________________  
Draw a Polar Dendrogram
Draws a polar dendrogram.


__________________________________________________________________________  
Convert seconds to human readable string(s)
Convert an amount of seconds to hours/days/weeks/etc.


__________________________________________________________________________  
Straightforward COPY and PASTE functions
Allows very simple manual exchange with other applications through the clipboard.


__________________________________________________________________________  
Packing Santa's Sleigh
This is the solution by team alfnie to the Mathworks/Kaggle Packing Santa's Sleigh competition


__________________________________________________________________________  
2048 MATLAB Edition
This is a MATLAB implementation of the 2048 game


__________________________________________________________________________  
Communications System Toolbox Support Package for RTLSDR Radio
MathWorks Communications System Toolbox Team Design and prototype softwaredefined radio (SDR) systems using RTLSDR with MATLAB and Simulink


__________________________________________________________________________  
kml2struct
Import a .kml file as a series of shapefile structs. Like kml_shapefile, but more stable.


__________________________________________________________________________  
BOT
Block diagram Optimization Tool


__________________________________________________________________________  
ISSTracker V1.0.0
International Space Station Live Tracking GUI


__________________________________________________________________________  
Wing Designer
Wing Designer computes aircraft performance measures from wing and engine parameters.


__________________________________________________________________________  
Automatic enveloping, variance change and activity detection with Hilbert Transform
Automatic Signal Segmentation and activity detection with Hilbert Transform and smoothing.


__________________________________________________________________________  
cspy.m
cspy: a colorcoded version of sparse matrix viewer spy


__________________________________________________________________________  
MultipleColon
multiple colonintervals


__________________________________________________________________________  
Configurable Simulink Model for DCDC Converters with PWM PI Control
A Simulink model configurable to buck, boost and buckboost DCDC converters with PWM PI control


__________________________________________________________________________  
Useful Figure Management Utilities
3 Useful figure management utilities.


__________________________________________________________________________  
CMEX Programming Tutorial Examples
This submission contains several C scripts that help as an introduction to CMEX programming.


__________________________________________________________________________  
module  encapsulate MATLAB package into a name space module
Modules are handy way to access packages in MATLAB.


__________________________________________________________________________  
legappend
Append new entries to an existing legend


__________________________________________________________________________  
parTicToc
This is a utility for timing PARFOR loops.


__________________________________________________________________________  
ThingSpeak support from MATLAB
MathWorks Internet of Things Team Prototype Internet of Things applications using ThingSpeak and MATLAB


__________________________________________________________________________  
PianoTuner
Graphical aid for tuning the middle octave of a piano


__________________________________________________________________________  
Reference Creator
Find intext citations and create the reference list!


__________________________________________________________________________  
Image Blur Metric
Measure the blur level of still image.


__________________________________________________________________________  
Blind image quality assessment through anisotropy
This measure discriminates blur and Gaussian noise.


__________________________________________________________________________  
Noise Level Estimation from a Single Image
It can precisely estimate noise level from a single image.


__________________________________________________________________________  
Simscape Language: Nonlinear rotational spring (Torque == kx^2)
Simscape language example showing how to use a MATLAB function in the equations section.


__________________________________________________________________________  
SimRF Models of Analog Devices RF Agile Transceivers
Simulate and verify agile RF transceivers and predict impact of RF imperfections using test signals


__________________________________________________________________________  
Colormouse
Mouse control of the color axis


__________________________________________________________________________  
makeinstall
Create a single install file for your toolbox distribution.


__________________________________________________________________________  
Makeinstall Technology
The technology behind the Makeinstall tool.


__________________________________________________________________________  
QuadSim
Parameter driven Simulink model for quadcopter simulation and control system design


__________________________________________________________________________  
Display progress, pause or stop a timeconsuming loop
Allows you to display a loop’s progress, pause (and also change related code) or stop it.


__________________________________________________________________________  
Simulink Dual Gravity Drained Tank
Process control simulation tutorial for PID tuning


__________________________________________________________________________  
votebar
function to plot 'electionlike' 3d bars


__________________________________________________________________________  
Fast Noise Estimation in Images
Estimate the standard deviation of the noise in a grayscale image.


__________________________________________________________________________  
Round with significant digits
Rounds towards the nearest number with N significant digits.


__________________________________________________________________________  
NaturalOrder Row Sort
Naturalorder row sort of a cell array of strings, with customizable numeric format.


__________________________________________________________________________  
NaturalOrder Filename Sort
Naturalorder sort of filenames or filepaths, with customizable numeric format.


__________________________________________________________________________  
Customizable NaturalOrder Sort
Naturalorder sort of a cell array of strings, with customizable numeric format.


__________________________________________________________________________  
Growth  Yet another Obfuscated MATLAB code
Obfuscated MATLAB code where the source looks like its output, with a functional programming demo.


__________________________________________________________________________  
Distribute figures
This function can distribute all open figures on different parts of the screen(s).


__________________________________________________________________________  
Koch curve
Interface for generating the Koch curve

Get
the MATLAB code
Published with MATLAB® R2015a
Jiro's pick this week is "Distribute Figures" by Anders Simonsen. I must be obsessed with figure management, MATLAB figure that is. I've previously Picked three File Exchange entries around this topic: cascade, togglefig, and Useful Figure Management... read more >>
]]>Jiro's pick this week is "Distribute Figures" by Anders Simonsen.
I must be obsessed with figure management, MATLAB figure that is. I've previously Picked three File Exchange entries around this topic: cascade, togglefig, and Useful Figure Management Utilities. No wonder, I was drawn to this entry by Anders.
Have you ever generated lots of figures and wished you could quickly view all of them on one screen?
Anders's distFig lets you do that. Let's say that you have four figure windows.
logo figure surf(peaks) figure plot(rand(10,3)) figure scatter3(rand(50,1),rand(50,1),rand(50,1))
Just call distFig, and it distributes your figures on the screen. Pass in some parameters to control how the figures are distributed.
distFig('Rows',2,'Columns',2)
Anders provides detailed help with the function, as well as some sample code demonstrating the various uses. I also appreciate his responsiveness to user comments. You can see that he quickly updated his entry to fix some issues that came up in R2014b. Great stuff, Anders!
Comments
Give this a try and let us know what you think here or leave a comment for Anders.
Get
the MATLAB code
Published with MATLAB® R2014b
Sean's pick this week is Growth  Yet Another Obfuscated MATLAB Code by Hikaru. This is awesome.dbtype growth 1 ... read more >>
]]>Sean's pick this week is Growth  Yet Another Obfuscated MATLAB Code by Hikaru.
This is awesome.
dbtype growth
1 figure(1) 2 clf,hold on,grid on,view(58,38),feval(@(mm,x)mm(@(O)mm(@(Y,U,V,W,v,nN,NN,Mm,mM,md,Nn)... 3 mm(@(G)mm(Y(G),x,0,0,v(mM(x))),mm(@(L)(@(M)(@(n,p,q,r)mm(mm(@(l,n)l{n},{@()1,@(){mm(Y... 4 (L), [25*... 5 v(1. /r*(... 6 n1) ) 25/ 2*(r... 7 1); md((n1),r)*5 ^2(... 8 r1* 1)*5^ 2/ 2;0] ,[0;... 9 0;1] ,[ 1;0 ;0 ], 6) ,M(n... 10 1,0 ,0,v(mM(x)))} }, ~(n>... 11 .0)+ 2*~(n <= 0))) )) ,(@(... 12 d)(( @( u,n ,t ,N )( (( mm (mm ((@(... 13 l,n) l{n}),{(@()mm (@ ()(mm(@()Nn(u (1),... 14 u(2) ,u(3) ,( '*g' ), U,5)) )) ),(@ ()mm... 15 ((@( w, b, p, m, mN ){( mm (@ (A )Nn(... 16 A(1, :) ,A(2,:),A(3,: ), '',... 17 W,N^ 2* 0.3,V ,( mN(N /6 ))),... 18 [u,( u+ n* w)] )) ,( mm (@ (f ,T, S){(... 19 d(u+ n*w,S,T,N1)) ,( d(u+n*w,f(S,n ,p),... 20 f(T, n,p), N 1)) ,( d(u+n *w ,f(S ,n,p... 21 *2), (f (T ,n ,( p)* 2)), N1 )) }, (@(r... 22 ,n,p )r *(Mm(p))nN(r ,n )*NN... 23 (p)+ (1 Mm(p )) *n*( n' *r))... 24 ,NN( m) *n t* Mm (m ), n* Mm(m... 25 )+NN (m)*t))}),9.8 /( 7.14... 26 N), 0.1,2 +1 /10.6 , .102... 27 +1,( @( r) [1 *1 *.32... 28 ,.22 ,1 *.08... 29 ]*r+ [0 ,1,(... 30 .5)] *( 1r)... 31 )))} ,1+(... 32 N>0))))))))))),@(f)mm(@(g)@(m,n,o,p)mm(f(g(g)),m,n,o,p),@(g)@(m,n,o,p)mm(f(g(g)),m,n,... 33 o,p)),O(0),O(1),O(2),O(3),O(4),O(5),O(6),O(7),O(8),O(9)),(@(I)mm(@(l,m)mm(l{1+(I>2)},... 34 char(m((m(58+I)46):(m(59+I)47))+18)),{@(J)J,@str2func},['[O`YS`aWhS1]Z]`ZW\SEWRbV',... 35 'TZ]]`Q`]aaaW\Q]aa_`b[]R^Z]b!TSdOZ/9>GLQTW[^c']))),@feval,9); %% (c) woodrush (2014) ...
growth
They look the same!
Hikaru, also provides the technical details about the programming features used. However, the detail I care about most was left out: How long did this take to make?
It is also a great example of pushing the MATLAB interepreter to its limits.
Maybe some day we can have an obfuscated MATLAB Code Contest, similar to the C one.
Have a great New Year everyone!
Give it a try and let us know what you think here or leave a comment for Hikaru.
Get
the MATLAB code
Published with MATLAB® R2015a
Sean's pick this week is the suite of naturalorder sorting tools by Stephen Cobeldick
If you work with data, there are many different naming schemes for files that you will likely encounter. For some of these the numerical sorting order might be the same as the ASCII order sorting order. But it is not always, and how to deal with this is a common question on MATLAB Answers.
I typically try to set it up the following way when naming my own files using the "%0xi" format in num2str. For example:
for ii = [1 2 17 495 3920] % %04i  up to four zeros in front of the number. filenameii = ['file' num2str(ii,'%04i') '.csv']; disp(filenameii) end
file0001.csv file0002.csv file0017.csv file0495.csv file3920.csv
Stephen's naturalorder sorting tools help sort files or names that do not necessarily have this setup. For example, let's look at the ASCII order of a few files using sortrows.
files = {'file1.csv','file111.csv','file21.csv','file211.csv'}.'; disp(sortrows(files))
'file1.csv' 'file111.csv' 'file21.csv' 'file211.csv'
Numerically file111.csv should not be before file21.csv. Now let's use natsort to do this for us:
disp(natsort(files))
'file1.csv' 'file21.csv' 'file111.csv' 'file211.csv'
The other utilies that Stephen has provided allow more control over this and for the extension of it to not just working on single elements of a cell but on a whole full file path. For example, how should I sort the following?
files = {'C:\Documents\Exp1\test1.csv','C:\Documents\Exp2\test1.csv','C:\Documents\Exp2\test2.csv','C:\Documents\Exp1\test2.csv'}.'; disp(files)
'C:\Documents\Exp1\test1.csv' 'C:\Documents\Exp2\test1.csv' 'C:\Documents\Exp2\test2.csv' 'C:\Documents\Exp1\test2.csv'
Sorted by experiment:
disp(natsortfiles(files))
'C:\Documents\Exp1\test1.csv' 'C:\Documents\Exp1\test2.csv' 'C:\Documents\Exp2\test1.csv' 'C:\Documents\Exp2\test2.csv'
To sort by test, we can split the file path into pieces and then use natsortrows on the pieces:
% Split on file separators filepieces = regexp(files, ['' filesep ''], 'split'); filepieces = vertcat(filepieces{:}); disp(filepieces)
'C:' 'Documents' 'Exp1' 'test1.csv' 'C:' 'Documents' 'Exp2' 'test1.csv' 'C:' 'Documents' 'Exp2' 'test2.csv' 'C:' 'Documents' 'Exp1' 'test2.csv'
% Sort them by fourth column (test) then third column (experiment)
[~, idx] = natsortrows(filepieces,[4 3]);
disp(files(idx))
'C:\Documents\Exp1\test1.csv' 'C:\Documents\Exp2\test1.csv' 'C:\Documents\Exp1\test2.csv' 'C:\Documents\Exp2\test2.csv'
These files provide excellent help and are well documented.
My only suggestion for Stephen would be to provide these files together in one File Exchange entry (or as a fourth entry). This is solely for the reason that I am lazy and downloading all of the separate zip files and unpacking them took an extra few minutes. However, since the second two files depend on natsort, they wouldn't work on their own without this process.
If given the choice, how do you choose to store your files? What challenges do you face when you receive files from others or from hardware? Let us know below.
Give it a try and let us know what you think here or leave a comment for Stephen.
Get
the MATLAB code
Published with MATLAB® R2014b
Jiro's pick this week is roundsd by François Beauducel. There are a number of entries, including this, this, this, and this, that perform this useful task of rounding numbers to specific significant digits. François provides a simple, wellimplemented ... read more >>
]]>Jiro's pick this week is roundsd by François Beauducel.
There are a number of entries, including this, this, this, and this, that perform this useful task of rounding numbers to specific significant digits. François provides a simple, wellimplemented function with good documentation. Here's how it works.
format long
roundsd(pi,3)
ans = 3.140000000000000
roundsd(pi/100,3)
ans = 0.031400000000000
It works with arrays as well.
roundsd([pi pi/100],3)
ans = 3.140000000000000 0.031400000000000
Did you know that in R2014b, the round function gives you the option to do the same thing? It provides the option of rounding to significant digits or to digits respect to the decimal point.
round([pi pi/100],3)
ans = 3.142000000000000 0.031000000000000
round([pi pi/100],3,'significant') % Reset format format short
ans = 3.140000000000000 0.031400000000000
Thanks, François (and others), for providing this functionality to folks using MATLAB versions prior to R2014b!
Comments
Give it a try and let us know what you think here or leave a comment for François.
Get
the MATLAB code
Published with MATLAB® R2014b
ContentsCreate Noisy ImagesQuantifying NoiseTabulate ResultsInterpretations?Improving the analysisPlotting the resultsConclusionsSWAG!Brett's Pick this week includes nods to two readers, and a submission called Fast Noise Estimation in Images by Tolga Birdal.In my last post, back in September, I discussed several files for quantifying noise in images, without reference to a goldstandard image.... read more >>
]]>Brett's Pick this week includes nods to two readers, and a submission called Fast Noise Estimation in Images by Tolga Birdal.
In my last post, back in September, I discussed several files for quantifying noise in images, without reference to a goldstandard 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 took me to task for that, pointing out that 'blur' is not synonymous with 'noise' (though maybe we can agree that it can be a type of noise.)
Marco further pointed me to Tolga's submission, a fiendishly simple function that convolves the test image with a reference kernel to quantify noise.
In today's post, I would like to revisit noise quantification using my previous Picks, and 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 Image Processing Toolbox to consider how each does in quantifying the five types of noise "contant Gaussian," "locally varying Gaussian," Poisson, saltandpepper, and specklecreated by the imnoise function. To start, I'm going to use default input parameters (where possible) in the calls to imnoise.
img = cell(6,1); img{1} = imread('rice.png'); subplot(2,3,1) imshow(img{1});title('No Noise'); img{2} = imnoise(img{1},'gaussian'); subplot(2,3,2) imshow(img{2});title('Gaussian'); img{3} = imnoise(img{1},'localvar',0.05*rand(size(img{1}))); subplot(2,3,3) imshow(img{3});title('Local Gaussian'); img{4} = imnoise(img{1},'poisson'); subplot(2,3,4) imshow(img{4});title('Poisson'); img{5} = imnoise(img{1},'salt & pepper'); subplot(2,3,5) imshow(img{5});title('Salt & Pepper'); img{6} = imnoise(img{1},'speckle'); subplot(2,3,6) imshow(img{6});title('Speckle');
Now consider how each of the tools we've discussed:
quantifies noise in each of these images:
for ii = 1:6 imageBlur(ii) = blurMetric(img{ii}); blindImageQuality(ii) = blindimagequality(img{ii},2); noiseLevel(ii) = NLEstimate(img{ii}); fastNoiseEstimate(ii) = estimate_noise(img{ii}); end
NoiseTypes = {'NoNoise';'Gaussian';'LocalGaussian';'Poisson';'SaltAndPepper';'Speckle'}; Results = table(imageBlur,blindImageQuality,noiseLevelEstimage,fastNoise,... 'RowNames',NoiseTypes');
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 levels of noise. So let's do another series of analyses, increasing the noise successively, and recalculating the metrics. We can then plot some trends.
Let's increment four types of noise (omitting Poisson noise, for which imnoise is not adjustable) five times and recompute the metrics:
noNoise = imread('rice.png'); index = 0; for noiseType = 1:4 % Loop over noise types for noiseLevel = 1:5 index = index + 1; level = 0.01*noiseLevel; % Create noisy images and loop over metrics switch noiseType case 1 str = ['Gaussian (' num2str(level) ')']; img{noiseType} = imnoise(noNoise,'gaussian',0,level); case 2 str = [' Local Gaussian (' num2str(level) ')']; img{noiseType} = imnoise(noNoise,'localvar',level*rand(size(noNoise))); case 3 str = ['Salt & Pepper (' num2str(level) ')']; img{noiseType} = imnoise(noNoise,'salt & pepper',level); case 4 str = ['Speckle (' num2str(level) ')']; img{noiseType} = imnoise(noNoise,'speckle',level); end subplot(4,5,index); imshow(img{noiseType});title(str); imageBlur(noiseType,noiseLevel) = blurMetric(img{noiseType}); blindImageQuality(noiseType,noiseLevel) = blindimagequality(img{noiseType},2); noiseLevelEstimage(noiseType,noiseLevel) = NLEstimate(img{noiseType}); fastNoise(noiseType,noiseLevel) = estimate_noise(img{noiseType}); end end
f = figure; set(f,'DefaultAxesFontsize',8) NoiseTypes = {'Gaussian';'LocalGaussian';'SaltAndPepper';'Speckle'}; for noiseType = 1:4 ax = subplot(4,1,noiseType); noise = [Results{1,1},imageBlur(noiseType,:)]; plot(noise/max(noise)); if noiseType == 1 title('Normalized Noise Metrics','fontsize',12); end hold on noise = [Results{1,2},blindImageQuality(noiseType,:)]; plot(noise/max(noise)); noise = [Results{1,3},noiseLevelEstimage(noiseType,:)]; plot(noise/max(noise)); noise = [Results{1,4},fastNoise(noiseType,:)]; plot(noise/max(noise)); ax.XTick = 1:6; ax.XTickLabel = []; ylabel(NoiseTypes{noiseType}) end ax.XTickLabel = 0:5; xlabel('NOISE LEVEL') legend(MetricNames)
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.)
One final comment: it's very possiblemaybe even likelythat 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.
Swag, and thanks, are due to Eric, Marco, and Tolga!
As always, I welcome your thoughts and comments.
Get
the MATLAB code
Published with MATLAB® R2014b