如何在二維圖像中確定我們的多個最大值,而最大值不一定都是相同的高度?我發現imregionalmax()
,imextendedmax()
和findpeaks()
函數不一定非常有用,因爲它們給出了很多本地最大值,它們只是背景噪聲中的最大值。我試過如何在嘈雜的圖像中找到許多本地最大值?
bw=array > imdilate(array,[1 1 1; 1 0 1; 1 1 1]);
但是這也是有限制的,因爲同樣的原因(同樣的事情擴大矩陣,它使用)。
如何在二維圖像中確定我們的多個最大值,而最大值不一定都是相同的高度?我發現imregionalmax()
,imextendedmax()
和findpeaks()
函數不一定非常有用,因爲它們給出了很多本地最大值,它們只是背景噪聲中的最大值。我試過如何在嘈雜的圖像中找到許多本地最大值?
bw=array > imdilate(array,[1 1 1; 1 0 1; 1 1 1]);
但是這也是有限制的,因爲同樣的原因(同樣的事情擴大矩陣,它使用)。
噪聲確實是圖像分析中的一個問題,您可以嘗試查找強度最大值。與圖像分析中的其他任務一樣,您可以通過預處理圖像並對算法結果進行後處理來改善最終結果。
作爲局部最大檢測前的預處理步驟,您可以對圖像進行去噪聲,即對圖像進行濾波以抑制一些雜散最大值(您可能希望查看的功能是imfilter
)。
去噪不會消除所有的噪音,所以當你進行局部最大檢測時,你仍然會選取一些不需要的最大值。因此,你應用某種啓發式來區分「好」和「壞」局部最大值。例如,您可以應用強度閾值,在該閾值以下,您會丟棄所有最大值。
你可以在這裏找到一個很好的評論:Smal et al。熒光顯微鏡中斑點檢測方法的定量比較。 IEEE Trans Med Imaging(2010)vol。 29(2)第282-301頁
我總是先嚐試中值濾波(medfilt2
)。它可以在保持大多數輪廓的同時消除小噪音。
如果你已經有候選人 - 爲什麼不用一些測試過濾他們?就像峯值下的音量或下一個峯值的距離一樣。
這是一個代碼,finds 2D peaks在嘈雜的數據。代碼對數據進行閾值處理,對其進行中值濾波,使用用戶定義的濾波器對其進行平滑處理,再次進行閾值處理,並在相關像素處查找局部最大值。該代碼還提供了一種簡單而強大的方法來估計所需的閾值。
相關問題(無噪音情況下):http://stackoverflow.com/questions/1856197/how-can-i-find-local-maxima-in-an-image-in-matlab – 2011-12-29 13:34:34