大津算法OTSU

1、大津算法OTSU是一種常用的閾值化分割方法,既然是閾值化方法就是需要找到一個閾值,利用這個閾值對圖像中所有的像素點(diǎn)進(jìn)行區(qū)分,哪些像素點(diǎn)屬于前景,哪些像素點(diǎn)屬于背景。

2、如何找到這個閾值呢?OTSU算法中有一個假設(shè),最優(yōu)的閾值是能夠使圖像中的前景和背景之間的差最大的那個值,所以大津算法又名最大類間差算法。

3、我們來定義這個類間差(漢字公式,請見諒 ≥???≤):
類間差 = 前景比重 x 背景比重 x (前景均值 - 背景均值)^2
這個比重其實(shí)就是該類所擁有的像素個數(shù),均值就是該類所擁有的像素的灰度均值。

4、有了類間差公式后,閾值就直接遍歷0~255,不斷的計算類間差值,找到最大的類間差值就可以找到最優(yōu)的閾值了。
python code:

import cv2 as cv
import math
import numpy as np
def otsu_threshold(img):
    h=img.shape[0]
    w=img.shape[1]
    m=h*w   # 圖像像素點(diǎn)總和
    otsuimg=np.zeros((h,w),np.uint8)
    threshold_max=threshold=0   # 定義閾值
    histogram=np.zeros(256,np.int32)   # 初始化各灰度級個數(shù)統(tǒng)計參數(shù)
    probability=np.zeros(256,np.float32)   # 初始化各灰度級占圖像中的分布的統(tǒng)計參數(shù)
    for i in range (h):
        for j in range (w):
            s=img[i,j]
            histogram[s]+=1   # 統(tǒng)計灰度級中每個像素在整幅圖像中的個數(shù)
    for k in range (256):
        probability[k]=histogram[k]/m   # 統(tǒng)計每個灰度級占圖像中的分布
    for i in range (255):
        w0 = w1 = 0  # 定義前景像素點(diǎn)和背景像素點(diǎn)灰度級占圖像中的分布
        fgs = bgs = 0  # 定義前景像素點(diǎn)灰度級總和and背景像素點(diǎn)灰度級總和
        for j in range (256):
            if j<=i:   # 當(dāng)前i為分割閾值
                w0+=probability[j]   # 前景像素點(diǎn)占整幅圖像的比例累加
                fgs+=j*probability[j]
            else:
                w1+=probability[j]   # 背景像素點(diǎn)占整幅圖像的比例累加
                bgs+=j*probability[j]
        u0=fgs/w0   # 前景像素點(diǎn)的平均灰度
        u1=bgs/w1   # 背景像素點(diǎn)的平均灰度
        g=w0*w1*(u0-u1)**2   # 類間方差
        if g>=threshold_max:
            threshold_max=g
            threshold=i
    print(threshold)
    return threshold

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 大津算法(OTSU)在圖像處理領(lǐng)域,我們會遇到如下需求:把圖像中的目標(biāo)物體和背景分開。比如背景用白色表示,目標(biāo)物體...
    invisprints閱讀 5,993評論 0 3
  • 邊緣檢測是圖像處理和計算機(jī)視覺的基本問題,邊緣檢測的目的是標(biāo)識數(shù)字圖像中亮度變化明顯的點(diǎn),圖像屬性中的顯著變化通常...
    Daniel大人閱讀 6,429評論 0 0
  • 此系列的其他文章:OpenCV算法學(xué)習(xí)筆記之初識OpenCVOpenCV算法學(xué)習(xí)筆記之幾何變換OpenCV算法學(xué)習(xí)...
    Aengus_Sun閱讀 5,350評論 0 5
  • 1.簡單閥值cv2.threshold() 當(dāng)像素值高于閥值時,我們給這個像素賦予一個新值(可能是白色),否則我們...
    Zoe_C閱讀 1,006評論 0 0
  • 虛里人家緲緲煙 比翼飛鳥雙雙還 無限人生憂愁事 山河繁茂與我閑
    奧_0bf2閱讀 237評論 0 0

友情鏈接更多精彩內(nèi)容