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

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by FIR
on 28 Jul 2012

Input = imread('baby1.jpeg') ; size(Input) P=rgb2gray(Input); image= im2double(P); [m n ] = size(A); Med = []; %Modified filter for i=2:m-1 for j=2:n-1 Med(1) = image(i,j); Med(2) =image(i-1,j) ; Med(3) = image(i-1,j+1); Med(4) = image(i,j-1); Med(5) = image(i,j+1); Med(6) = image(i+1, j-1); Med(7) = image(i+1,j); Med(8) = image(i+1,j+1); Afilteres(i, j) = median(Med(:)); end end imshow(Af);

In this the size of image varies

size(P)=201 300

size(Af)

200 299

PLease help

*No products are associated with this question.*

Answer by Andrei Bobrov
on 28 Jul 2012

Edited by Andrei Bobrov
on 28 Jul 2012

Accepted answer

m = size(A); A1 = zeros([m(1:2) + 2,m(3)]); A1(2:end-1,2:end-1,:) = A; Af = zeros(m); for ii = 1:m(1) for jj = 1:m(2) k = reshape(A1(ii:ii+2,jj:jj+2,:),[],1,3); Af(ii,jj,:) = median(k([1:4,6:9],:,:)); % EDIT end end

Image Analyst
on 28 Jul 2012

You forgot to exclude the middle pixel when taking the median, like he did. Though I don't know what the use of this strange type of median filter would be. Maybe he can explain that.

Answer by Wayne King
on 28 Jul 2012

The Image Processing Toolbox has medfilt2

Wayne King
on 28 Jul 2012

The file exchange appears to have median filter implementations, but I'm guessing if you're not allowed to use medfilt2, then you're not supposed to use those either

Image Analyst
on 28 Jul 2012

If the built-in function must not be used, then it must be some kind of homework assignment, which means that code solutions provided by Answers must not be used either. Too bad because I have a nice demo using blockproc that I could have given you. However it's strange that median(), the 1D version, **can** be used while medfilt2(), the sliding 2D version, cannot be used.

Answer by Image Analyst
on 28 Jul 2012

Of course the image sizes are different, because you're sliding a window along, and you have it so that when the edge of the window touches the edge of the image, it stops. So of course the output image will not be as big as the input image.

Again, I have demo code but since you said you're not allowed to use built in functions, and probably not code handed over to you in Answers or code you got from the File Exchange, I won't post it. Yeah, sometimes instructors/professors are picky about doing your own work.

Show 1 older comment

Image Analyst
on 30 Jul 2012

"median" like he used is also a single word function, as would "sort()" which is what I would have suggested as a second method. Sort and take the middle value. By the way, why are you excluding the pixel itself when you are taking the median?

Image Analyst
on 30 Jul 2012

Well then you're all set, because Andrei gave you code that used median() (and you've already accepted his answer), and I suggested using sort() and taking the middle element. So I'm assuming that you're done now.

## 2 Comments

## Sean de Wolski (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/44727#comment_92194

In reponse to the flags and requests for deletion. I will not delete this question since Andrei, Wayne and IA all put effort into helping you.

## FIR (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/44727#comment_92310

ok Sean thank u