2010-04-23 126 views
1

我有一個具體的問題和一個相關的更一般的問題...爲什麼imextendedmax()沒有給例如在A(3,3)作爲例子9作爲最大?一般來說...找到多個最大值/峯值的最佳方法是什麼?關於擴展最大值的好處是它允許一個閾值,大概所有低於該閾值的值都不會被計算出來,而imregionalmax和findpeaks更一般,效率更低。matlab中的圖像處理工具箱

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

據我瞭解,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