OTSU-method 大津演算法
阿新 • • 發佈:2019-02-02
大津演算法是將灰度圖二值化的常用方法,對具有兩個峰的灰度圖效果很好。
閾值 將影象分為前景畫素和背景畫素。設整幅影象的平均灰度值為;前景畫素所佔的比例為,平均灰度值為;背景畫素所佔比例為,平均灰度值為。則此時的類間方差
其中
整理得:
接下來就是要遍歷 找到最大的類間方差,那麼此時的就是我們要找的二值化閾值。
matlab程式碼如下所示:
% 讀取影象 I = imread('ccc.jpg'); % 初始化灰度直方圖 H = zeros(256); % 計算灰度直方圖 [l, w] = size(I); for r = 1:l for c = 1:w index = I(r, c) + 1; H(index) = H(index) + 1; end end % 顯示灰度直方圖 figure; hist = bar(0:255, H, 'histc'); max = 0; % 閾值 index = 0; sum = 0; for j = 1:256 sum = sum + j * H(j); end n_pixels = l * w; n_current_pixels = 0; average_gray_value = 0; % 尋找最大類間方差 for i = 1:255 gray_value = i * H(i) + average_gray_value * n_current_pixels ; n_current_pixels = n_current_pixels + H(i); average_gray_value = gray_value / n_current_pixels; average_gray_value2 = (sum-gray_value)/(n_pixels - n_current_pixels) s = n_current_pixels * (n_pixels - n_current_pixels) / n_pixels^2 * (average_gray_value-average_gray_value2)^2; if (s > max) max = s; index = i; end end th = index I2 = zeros(size(I)); I2 (find(I>=th)) = 255; I2 (find(I<th)) = 0; figure; imshow(I2)
測試結果:
輸入影象
輸出影象
OTSU-method視覺化: