我有一个特定的问题和一个相关的更一般的问题...为什么imextendedmax()不给A(3,3)中的例子9作为最大值?通常......找到多个最大值/峰值的最佳方法是什么?关于imextended max的好处是它允许一个阈值,大概在这个阈值以下的所有东西都不计算,而imregionalmax和findpeaks更普遍,效率更低。
A =圆形(RAND(5)* 10)
A =
1 5 4 8 3
5 1 8 8 3
9 3 9 1 2
9 7 3 5 9
6 3 5 6 8
B = imextendedmax(A,8)
B =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
答案 0 :(得分:0)
根据我的理解,imextendedmax(A,x)
首先抑制所有超出周围环境x或更低的最大值,然后调用imregionalmax
。
因此,您想要致电
imextendedmax(A,1)
ans =
0 0 0 1 0
0 0 1 1 0
1 0 1 0 0
1 0 0 0 1
0 0 0 0 1
如果要查找图像中x或更多的所有区域,也可以调用(对于x = 8)
x = 8;
A >= x
ans =
0 0 0 1 0
0 0 1 1 0
1 0 1 0 0
1 0 0 0 1
0 0 0 0 1
从而对图像进行阈值处理。
最后,它归结为你想要做的事情。如果您将图像视为具有峰和谷,是否要查找峰的位置?然后使用imdilate
进行局部最大检测(见下文)。如果用水填充所有水平x,你想知道山峰和山谷的哪些部分会保持干燥吗?然后使用A>x
等。
编辑
关于findpeaks
的道歉。我假设你提到它,因为它适用于2D,我没有检查。对于局部最大检测,一种非常好的方法是使用像这样的imdilate
locMaxMask = A > imdilate(A,[1,1,1;1,0,1;1,1,1]);
对imdilate的调用将每个像素替换为其周围的最大值。因此,比较将产生具有比8个周围像素更高值的所有像素。
关于噪音:有一个类似的问题,所以我将你链接到我在那里给的answer。