Finiding Peaks and plotting in 3D
Show older comments
Hello everyone I have two problems with my project first is: 1) how i can plot tx, ty and tz? 2) I have to find peaks (I wrote program which check values in matrix 49x49. if "o" value is greater 8 times than all numbers around then that's the peak. Loop unfortunately doesn't work and I can't find a mistake
1 2 3
47 x x x
48 x o x
49 x x x
My program
%generate a reasonable terrain from a function
tx =linspace(-30, 30, 49*49);
ty = tx;
[xx, yy] = meshgrid(tx, ty);
tz = % I didnt paste it here because data from .m file contain 2401 values.
figure(1);
mesh(tx, ty, tz);
figure(2);
contour(xx, yy, tz);
for row = 2:48
for column = 2:48
p_c = 0;
t_c = 0;
for n = row - 1:row + 1
for m = column - 1:column + 1
if(tz(row, column) > tz(n, m))
p_c = p_c+1;
elseif(tz(row, column) < tz(n, m))
t_c = t_c+1;
end
end
end
if(p_c > 7)
disp( sprintf( 'Peak found at row %d column %d', row, column));
elseif(t_c > 7)
disp( sprintf( 'Trough found at row %d column %d', row, column));
end
end
end
4 Comments
Image Analyst
on 4 Nov 2013
Edited: Image Analyst
on 4 Nov 2013
What does "greater 8 times than all numbers around" mean? Would that mean that the center is greater than the mean of the 8 surrounding values? Or greater than any of the 8 surrounding values? Or the difference between the center and the mean of the 8 surrounding values is 8 times greater than the standard deviation of the surrounding values?
ANd you probably don't need a loop. You can probably use conv2 and thresholding, or a function in the Image Processing Toolbox, like imdilate(), if you have it.
Image Analyst
on 4 Nov 2013
Can you use imreagionalmax() in the Image Processing Toolbox?
Answers (1)
I ran your code and it works fine for me as long as I change the first line from
tx =linspace(-30, 30, 49*49);
to
tx =linspace(-30, 30, 49);
_____________________________________________________________________
I get the following:
Trough found at row 12 column 27
Peak found at row 20 column 21
Peak found at row 25 column 35
Trough found at row 27 column 14
Trough found at row 28 column 27
Peak found at row 38 column 25
These match what I see in the figures generated.
_____________________________________________________________________
(Though you might want to print out the values of tx(row) and ty(column) instead of just row and column, so it matches the indicies on your plots.)
Trough found at x=-16.250 y=2.500
Peak found at x=-6.250 y=-5.000
Peak found at x=0.000 y=12.500
Trough found at x=2.500 y=-13.750
Trough found at x=3.750 y=2.500
Peak found at x=16.250 y=0.000

Categories
Find more on Descriptive Statistics in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!