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!