在計算機視覺和影像處理領域，大津二值化法（Otsus method）是由命名的一種用於自動影像閾值分割的方法。 該方法用於對基於聚類的影像進行二值化，即將一個灰度影像轉化為二值影像。演算法假定影像根據雙模直方圖（前景畫素和背景畫素）包含兩類畫素，並計算出能將這兩類畫素分開的最佳閾值，使得類內方差最小，或等效地，類間方差最大。 因此，大津二值化法是一種一維離散的費舍爾判別分析的類似方法，與相關，並且等同於在強度直方圖上執行的全域性最優 kmeans 演算法。 原始論文中還描述了多級閾值擴充套件方法， 並且後來提出了計算效率高的實現方法。 方法 在大津演算法中，我們窮舉搜尋能使類內方差最小的閾值，定義為兩個類的方差的加權和： sigma2_w tomega_1 tsigma2_1 tomega_2 tsigma2_2 t 權重 omega_i 是被閾值 t 分開的兩個類的機率，而 sigma2_ i 是這兩個類的方差。 大津證明了最小化類內方差和最大化類間方差是相同的： sigma2_b tsigma2sigma2_w tomega_1 tomega_2 tleft mu_1 tmu_2 tright2 用類機率 omega_i 和類均值 mu_i 來表示。 類機率 omega_1 t 用閾值為 t 的直方圖計算： omega_1 tSigma_0t p i 而類均值 mu_1 t 為： mu_1 tleft Sigma_0t p ix irightomega_1 其中 x i 為第 i 個直方圖面元中心的值。 同樣的，你可以對大於 t 的面元求出右側直方圖的 omega_2 t 與 mu_2。 類機率和類均值可以迭代計算。這個想法會產生一個有效的演算法。 大津演算法得出了 01 範圍上的一個閾值。這個閾值用於影像中出現的畫素強度的動態範圍。例如，若影像只包含 155 到 255 之間的畫素強度，大津閾值 075 會對映到灰度閾值 230（而不是 192，因為影像包含的畫素不是 0255 全範圍的）。常見的攝影影像往往包含全範圍的畫素強度，就會讓這一點有爭論，但其他應用會對這點區別很敏感。 演算法 計算每個強度級的直方圖和機率 設定 omega_i 0 和 mu_i 0 的初始值 遍歷所有可能的閾值 t 1 ldots 最大強度 更新 omega_i 和 mu_i 計算 sigma2_b t 所需的閾值對應於最大的 sigma2_b t 你可以計算兩個最大值（和兩個對應的）。sigma2_b1t 是最大值而 sigma2_b2t 是更大的或相等的最大值 所需的閾值 frac text threshold_1 text threshold_2 2 JavaScript 實現 注：輸入引數 total 是給定影像中的畫素數。輸入引數 histogram 是灰度影像不同灰度級（典型的 8 點陣圖像）的 256 元直方圖。此函式輸出影像的閾值。 function otsu histogram total var sum 0 for var i 1 i 256 i sum i histogram i var sumB 0 var wB 0 var wF 0 var mB var mF var max 00 var between 00 var threshold1 00 var threshold2 00 for var i 0 i 256 i wB histogram i if wB 0 continue wF total wB if wF 0 break sumB i histogram i mB sumB wB mF sum sumB wF between wB wF mB mF mB mF if between max threshold1 i if between max threshold2 i max between return threshold1 threshold2 20 C 實現 unsigned char otsu_threshold int histogram int pixel_total unsigned int sumB 0 unsigned int sum1 0 float wB 00f float wF 00f float mF 00f float max_var 00f float inter_var 00f unsigned char threshold 0 unsigned short index_histo 0 for index_histo 1 index_histo 256 index_histo sum1 index_histo histogram index_histo for index_histo 1 index_histo 256 index_histo wB wB histogram index_histo wF pixel_total wB if wB 0 wF 0 continue sumB sumB index_histo histogram index_histo mF sum1 sumB wF inter_var wB wF sumB wB mF sumB wB mF if inter_var max_var threshold index_histo max_var inter_var return threshold MATLAB 實現 total 為給定影像中的畫素數。 histogramCounts 為灰度影像不同灰度級（典型的 8 點陣圖像）的 256 元直方圖。 level 為影像的閾值（double）。 function level otsu histogramCounts total OTSU automatic thresholding method sumB 0 wB 0 maximum 00 threshold1 00 threshold2 00 sum1 sum 1256histogramCounts the above code is replace with this single line for ii1256 wB wB histogramCounts ii if wB 0 continue end wF total wB if wF 0 break end sumB sumB ii histogramCounts ii mB sumB wB mF sum1 sumB wF between wB wF mB mF mB mF if between maximum threshold1 ii if between maximum threshold2 ii end maximum between end end level threshold1 threshold22 end 另一種方法是用向量化方法（可以很容易地轉換為便於 GPU 處理 Python 矩陣陣列版本） function threshold_otsu Thredsholding_Otsu Image Intuition 1 pixels are divided into two groups 2 pixels within each group are very similar to each other Parameters t threshold r pixel value ranging from 1 to 255 q_L q_H the number of lower and higher group respectively sigma group variance miu group mean Author Lei Wang Date 22092013 References Wikepedia for multi children Otsu method please visit httpsdrivegooglecomfiled0BxbR2jt9XyxteF9fZ0NDQ0dKQkUviewuspsharing This is my original work nbins 256 counts imhist Imagenbins p counts sum counts for t 1 nbins q_L sum p 1 t q_H sum p t 1 end miu_L sum p 1 t 1 t q_L miu_H sum p t 1 end t 1 nbins q_H sigma_b t q_L q_H miu_L miu_H2 end threshold_otsu max sigma_b end 該實現有一點點冗餘的計算。但由於大津演算法快速，這個實現版本是可以接受，並且易於理解的。因為在一些環境中，如果使用向量化的形式，可以更快地運算迴圈。大津二值化法使用架構最小的堆－孩子標籤（heapchildren label）可以很容易地轉變成多執行緒的方法。 參考文獻 外部連結 Lecture notes on thresholding covers the Otsu method A plugin for ImageJ using Otsus method to do the threshold A full explanation of Otsus method with a working example and Java implementation Implementation of Otsus method in ITK Otsu Thresholding in C A straightforward C implementation with explanation Otsus method using MATLAB Category 影像分割 Category 統計偏差和離散度