MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by FIR on 19 Dec 2012

I am designing a filter removing impulses noises from an RGB IMAGE

For identifying the noise pixels in the image I need a 3x3 window to slide over the image starting from the first Pixel to the Last.

If the corrupted Pixel is found i have to do some calculation to correct it.

To find this Corrupted Pixel I need a 3x3 Window to slide over my Image.

please send me the code for this

Answer by Walter Roberson on 19 Dec 2012

blockproc()

Show 4 older comments

FIR on 19 Dec 2012

did u mean like

x=myimage;

img = zeros(size(x));

filtImg = conv2(img,Gaussian,'same');

FIR on 19 Dec 2012

or

I = imread(...) kernel = ones(3, 3) / 9; % 3x3 mean kernel J = conv2(I, kernel, 'same');

Walter Roberson on 19 Dec 2012

Matt J is referring to the second of those forms, where you create your own kernel.

Answer by Image Analyst on 19 Dec 2012

FIR, I've ALREADY posted code to get rid of impulse noise. In fact it was to your very own question just a few days ago! Perhaps you've forgotten, or just ignored my answer. Here is the link: http://www.mathworks.com/matlabcentral/answers/56515#answer_68417 If you want to replace noise pixels with blurred pixels, just replace the medfilt2() with conv2() like Matt said, though I don't know why you'd do that because you'd be designing a worse filter.

Show 3 older comments

Walter Roberson on 20 Dec 2012

Put in a breakpoint just at the medfilt2() call. Check size() of the array you are passing in to medfilt2(). If the array is 3 dimensional, then you have not separated the color planes.

FIR on 20 Dec 2012

no walter my question is without separating the RGB image to ,R,G,B plane can we directly proceed on RGB IMAGE,i dont want to separate into planes ,is it possible

Walter Roberson on 20 Dec 2012

Not using the code posted by Image Analyst. That code could be altered to *effectively* pull apart the planes without **looking** like it was pulling apart the planes. You can for example create a routine *similar* to medfilt2() but which accepts an RGB image and does plane-by-plane filtering internally.

You need to ask yourself, though, what it means to do a median() with respect to values that have three components (R, G, B), and how that differs from [median®, median(G), median(B)] applied individually. The problem becomes rather similar to that of comparing two complex numbers: just as there is no defined sorting order for all P < Q when P and Q are complex, there is also no defined sorting order for all (R1,G1,B1) < (R2,G2,B2) pixels. Without a defined sorting order, you cannot determine median() as median() requires logically fully ordering the values to find which value is in the "middle" of the fully ordered list.

## 1 Comment

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/56958#comment_118050

Essentially the same as http://www.mathworks.com/matlabcentral/answers/56515-noise-removal-in-image. See my answer below.