matrix, window finding median....
1 次查看(过去 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
4 个评论
Walter Roberson
2011-5-13
duplicates http://www.mathworks.com/matlabcentral/answers/5656-program-to-find-the-median-of-the-matrix-need-to-use-for-loop
回答(3 个)
Sean de Wolski
2011-4-21
Well what are the steps? First you have to sort:
doc sort
then you have to extract the middle value
xmiddle = x(floor(numel(x)/2))
If you can't figure it out from here; ask your professor because they're either failing to teach you properly, or you're sleeping during class.
3 个评论
Sean de Wolski
2011-4-22
How are you going to replace one value with two median values in the even that it's even? Also, how can you have an even number of elements in a square window (i.e. a window with even sides centered on one pixel) It will always be odd (one per side=> 3*3=9; two per side => 5*5 = 25 etc.)
PS. A kind word of advice for learning MATLAB is to learn to use the built-in/stock functions and to read/understand the documentation related to them. This will get you much further and save time as there is no reason to reinvent the wheel.
Andrei Bobrov
2011-4-22
variant (as in medfilt2)
x = randi(125,3);% input array
x = sort(x(:));
I = numel(x)/2;
if rem(I,1), y = x(ceil(I));
else y = sum(x(floor(I)+ [0 1]))/2; end
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!