matlab中的图像处理工具箱

时间:2010-04-23 23:05:42

标签: image-processing max matlab

我有一个特定的问题和一个相关的更一般的问题...为什么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

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