2011-04-13 63 views
2

我使用OpenCV庫中的cvThresholding()例程來使用Otsu的閾值方法執行二進制化。有時這種方法失敗了,這是可以理解的,因爲Otsu計算整個圖像的單個閾值。爲了改善結果,我決定將圖像分解成網格,然後在網格的每個部分執行Otsu二值化。結果現在看起來令人鼓舞,但基於網格的分割使得輸出二進制圖像本質上不連續,特別是在網格的邊緣處。有沒有辦法解決這個問題?實現本地化的Otsu二元化

請注意,這種方法最適合我。我意識到opencv中的自適應閾值選項,對於我來說它似乎不起作用,因爲它與Otsu的二進制方法相比太敏感了。

等待回覆。提前致謝。

+0

Hi @Saurabh Gandhi正在嘗試以下語句「cvThreshold(Img1,Img1,0,255,CV_THRESH_BINARY | CV_THRESH_OTSU);」 Img1是32F的1通道圖像,但它不斷地引發歧視。你可以幫幫我嗎 。 pLzzzz – krishna 2013-05-03 03:52:28

回答

3

最簡單的可能是內插網格中心之間的閾值。雖然閾值圖像是不連續的(漸變,而不是幅度),但最終結果不太可能出現。

3

如果您嘗試移動窗口而不是打磨?例如,對於每個像素,基於以該像素爲中心的5x5或7x7面片獲得的閾值進行二值化(在邊緣處進行適當的包裹)。

移動的窗口將使閾值在圖像上逐漸連續變化。

+0

對於圖像中的每個像素,聲音在計算上花費相當大。這就是說,我現在無法想象任何更好的事情。 – misha 2011-04-15 13:25:02