Program to find the median of the matrix (need to use for loop)
2 次查看(过去 30 天)
显示 更早的评论
Hi,
I need to make a progrqam for the following logic:
1. Consider a matrix of size 120x120. Now consider a section of 3x3 and find the median of the 3x3 section, replacing the values of the matrix to make a new matrix (of a smaller size). The new 3x3 section will be taking the next element as the central element.
2. Please see that there is a command in MATLAB, called medfilt, medfilt2, which does the same, but I need to develop a program which does this manually i.e. it first sorts our the elements in ascending or descending order and then selects the middle value as the median thereby forming a new matrix with the median values.
The program that I am building is more complex than the section which I need help on. Any help in deleveloping this program will be highly appreciated.
Thanks and Regards
Manpreet Kaur
2 个评论
回答(2 个)
Andrei Bobrov
2011-4-17
variant % size(Min) = [m1 n1], size(Msection) = [m2 n2]
mn1 = size(Min)+2;
Min1 = zeros(mn1);
Min1(2:end-1,2:end-1) = Min;
Mout = zeros(mn1-2);
IJ = arrayfun(@(x)subsref(buffer(1:x,3,2),struct('type','()','subs',{{':',3:x}})),mn1,'UniformOutput', false);
[I,J] = IJ{:};
for ii = 1:length(I)
for jj = 1:length(J)
Mout(ii,jj) = median(median(Min1(I(:,ii),J(:,jj))));
end
end
as in the previous variant without a loop (as in medfilt2)
mn1 = size(Min)+2;
Min1 = zeros(mn1);
Min1(2:end-1,2:end-1) = Min;
IJ = arrayfun(@(x)subsref(buffer(1:x,3,2),struct('type','()','subs',{{':',3:x}})),mn1,'Un', false);
[I,J] = IJ{:};
[j3,i3] = meshgrid((1:mn1(2)-2),(1:mn1(1)-2));
Mout = arrayfun(@(x,y)median( reshape(Min1(I(:,x),J(:,y)),[],1)),i3,j3);
2 个评论
Manpreet Kapoor
2011-4-21
3 个评论
Sean de Wolski
2011-4-27
I wouldn't want to take a class taught by someone who: A) doesn't know how to follow instructions (this post, and your identical duplicate post) and B) Can't read documentation. $0.02
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!