2009-12-09 124 views
9

自動找出將灰度圖像轉換爲黑白的最佳閾值的最佳方法是什麼?我可以手動計算出相當不錯的閾值,但我想自動選擇閾值。將灰度轉換爲黑白的最佳閾值

編輯:我一直在讀這個問題,並通過查看圖像的直方圖可以幫助,例如,如果圖像具有雙模式直方圖,則在模式之間選擇閾值似乎是合理的。但是,對於多模態或平坦直方圖而言,它顯得更加複雜。所以我想我還有更多的閱讀要做。感謝所有回覆的人!

回答

5

0.5通常會丟失大量信息,除非原始圖像非常亮。事實上,任何絕對閾值都會混淆一種圖像或另一種圖像。

更好的方法是製作亮度直方圖並選擇模式附近的閾值。這應該對大多數圖像比任何絕對閾值更好地工作。

+0

對不起,但你能解釋一下,當你說: 「選擇模式附近的閾值」是什麼意思? – maximus 2010-02-17 16:59:40

+0

模式是圖像中出現頻率最高的亮度。 – 2010-02-22 18:17:03

+0

爲了將來參考,模式是平均值。 – cxdf 2016-01-05 18:37:46

1

什麼是您的「良好」門檻標準?您可能想要從圖像的平均灰度強度開始...

1

我認爲閾值將取決於每個圖像上的平均黑度(或顏色分佈)。如果你用一個任意的值,那麼如果圖像開始漂白,你最終會丟失大量數據。

此外,您可以通過稀疏地填充黑白區域來模擬一些灰度。 50%灰色是其他棋盤格,75%是其餘白色方塊的一半,25%是黑色和白色反轉等。

我不認爲這個問題有固定的答案,不考慮每個問題圖像單獨。

1

基於閾值的半色調通常會導致大量信息丟失。根據目的,您可能需要考慮dithering

我喜歡Stucki過濾器的外觀,因爲它很鋒利並保留了細節。執行算法的Here's a C# project。如果您有興趣,可以下載源代碼。

3

我會研究一個自適應閾值算法。其中一個不太難實施的是Otsus method

它的工作原理是假設您有前景像素和背景像素,並試圖找到它們的最佳分離。

3

K-Means Clustering Method如果你做以下的偉大工程:

  1. 將圖像分割成子像塊。
  2. 在每個子塊上應用K均值聚類。結果是一個二進制圖像(讓我們假設你想要的是'1',其餘爲'0')。
  3. 再次進行第2步,這次是重疊塊。
  4. 在子圖像上應用'AND'運算符(對於重疊子塊)。

在Matlab中很容易做到。
如果需要,我可以分享代碼。