迭代的(最優的)閾值選擇


迭代法閾值選擇算法是對雙峰法的改進,他首先選擇一個近似的閾值T,將圖像分割成兩個部分,R1和R2,計算出區域R1和R2的均值u1和u2,再選擇新的

閾值T=(u1+u2)/2;

重復上面的過程,直到u1和u2不在變化為止,

實現前后對比:

實現代碼:

import numpy as np
import cv2

img = cv2.imread('./0.jpg', 0)
#print(img[2, 4])
max_value = np.max(img)
min_value = np.min(img)
average_value = (max_value+min_value)/2

h, w = img.shape

while True:
    fnum = 0
    bnum = 0
    fvalue = 0
    bvalue = 0
    faverage = 0
    baverage = 0
    b = 0
    
    for i in range(h):
        for j in range(w):
            if img[i, j] > average_value:
                fnum += 1
                fvalue += img[i, j]
            else:
                bnum += 1
                bvalue += img[i, j]
                
    faverage = fvalue/fnum
    baverage = bvalue/bnum
    new_average = int((faverage + baverage)/2)
    if new_average == int(average_value):
        break
    else:
        average_value = new_average
        print(new_average)

img = cv2.threshold(img, new_average, 255, cv2.THRESH_BINARY)[1]
cv2.imshow('img', img)
cv2.imwrite('9.jpg', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM