1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        基于閾值處理的圖像分割算法!

        共 1809字,需瀏覽 4分鐘

         ·

        2021-10-09 04:01

        圖像處理

        Author:louwill

        Machine Learning Lab

        ? ? ?

        基于閾值的圖像分割因其處理直觀、實現(xiàn)簡單和計算速度快,是一種更為常用的傳統(tǒng)圖像分割算法。本文基于圖像灰度閾值處理的基本原理,對全局閾值處理方法和大津法進(jìn)行介紹,并用一些圖像實例進(jìn)行展示。

        灰度閾值基礎(chǔ)

        給定灰度圖像,假設(shè)該圖像有目標(biāo)物體和背景像素所構(gòu)成,現(xiàn)在要從圖像中提取目標(biāo)物體,一個最為直接的方法就是使用一個固定閾值將目標(biāo)物體像素與背景像素分開,以區(qū)域為目標(biāo)物體區(qū)域,否則為背景區(qū)域。

        那么什么樣的圖像容易用閾值法進(jìn)行分割呢?簡單來說,就是目標(biāo)區(qū)域與背景區(qū)域具有較大圖像灰度差異時,用閾值法分割效果可能會比較好。這種較大的圖像灰度差異體現(xiàn)到圖像直方圖上時,就呈現(xiàn)處圖像灰度直方圖雙峰的特征。如圖1所示。

        圖1 雙峰圖像直方圖

        圖像使用閾值分割方法取得好的分割效果取決于如下關(guān)鍵因素:

        • 直方圖波峰之間的間隔;
        • 圖像的噪聲情況;
        • 目標(biāo)物體和背景的相對尺寸;
        • 圖像光源的均勻性;
        • 圖像反射的均勻性。

        全局閾值處理

        當(dāng)圖像中存在較大的灰度變化時,使用全局閾值處理的方法一般就能夠取得較好的效果。但我們?nèi)韵M麑τ谝环鶊D像,能夠找到一個相對合理的閾值來作為全局閾值。因而就有迭代的閾值圖像分割算法。算法流程如下:

        • 初始化全局閾值
        • 基于分割該圖像,產(chǎn)生兩組像素:由灰度值大于的像素組成,由灰度值小于等于的像素組成
        • 像素分別計算平均灰度值
        • 計算一個新的閾值
        • 重復(fù)第2到第4步,直到連續(xù)迭代中的值間的差小于一個預(yù)定的參數(shù)為止。

        下面來看一個使用全局閾值的圖像分割例子。直接讀入圖像,先基于Numpy進(jìn)行灰度化和二值化處理。

        img?=?cv2.imread('./harden.png')
        #?灰度化
        y?=?0.2126*img[:,:,2]?+?0.7152*img[:,:,1]?+?0.0722*img[:,:,0]
        img[:,:,0]?=?y
        img[:,:,1]?=?y
        img[:,:,2]?=?y
        #?以128為閾值進(jìn)行二值化
        y[y>=128]?=?255
        y[y<128]?=?0
        img[:,:,0]?=?y
        img[:,:,1]?=?y
        img[:,:,2]?=?y
        plt.imshow(img);

        原圖和分割效果分別如圖2和3所示。

        圖2?原圖

        圖3 全局閾值分割效果圖


        opencv也提供了全局閾值的分割方法,處理代碼如下:

        import?cv2
        import?numpy?as?np
        from?matplotlib?import?pyplot?as?plt
        img?=?cv2.imread('harden.png',?0)
        img?=?cv2.cvtColor(img,?cv2.COLOR_BGR2RGB)
        ret,?thresh1?=?cv2.threshold(img,?128,?255,?cv2.THRESH_BINARY)
        plt.imshow(thresh1);

        分割效果如圖4所示。

        圖4 opencv閾值法分割

        大津法(OTSU)

        基于閾值的圖像二值化方法的一個關(guān)鍵在于如何選定閾值,這可以視作為一個全局尋優(yōu)問題。大津法也即OTSU法,是由日本學(xué)者大津展之于1979年提出的一種圖像閾值分割方法。該方法將閾值劃分視作是一個統(tǒng)計決策問題,其目的在于將像素分配給兩組或多組的過程中使得引入的平均誤差最小。大津法給出的方案是使得兩組之間的類間方差最大時的閾值為最優(yōu)閾值。所以大津法也叫最大類間方差法。

        先來看一下大津法的基本原理。假設(shè)劃分閾值為,小于閾值的像素區(qū)域為,大于閾值的像素區(qū)域為。分別為被閾值分開的兩類像素占總像素的比值。分別為這兩個類像素均值,分別為這兩個類中像素值的方差。

        圖像的類內(nèi)方差和類間方差為:

        圖像的整體方差為:

        圖像的可分離度定義為:

        最大化圖像分離度即可,所以使得:

        最大化即可。

        基于NumPy的大津法實現(xiàn)例子如下代碼所示。

        img?=?cv2.imread('./harden.png')
        img?=?img.astype(np.float)
        H,?W,?C?=?img.shape
        #?灰度化
        out?=?0.2126*img[:,:,2]?+?0.7152*img[:,:,1]?+?0.0722*img[:,:,0]
        out?=?out.astype(np.uint8)
        #?初始化類間方差和最佳閾值
        max_sigma?=?0
        max_t?=?0

        #?遍歷迭代
        for?_t?in?range(1,?255):
        ????#?小于閾值t的類v0
        ????v0?=?out[np.where(out<_t)]
        ????#?計算v0均值
        ????M0?=?np.mean(v0)?if?len(v0)?>?0?else?0.
        ????#?v0類像素占比
        ????w0?=?len(v0)/(H*W)
        ????#?大于閾值t的類v1
        ????v1?=?out[np.where(out>=_t)]
        ????#?計算v1均值
        ????M1?=?np.mean(v1)?if?len(v1)?>?0?else?0.
        ????#?v1類像素占比
        ????w1?=?len(v1)/(H*W)
        ????#?類間方差
        ????Sb2?=?w0*w1*((M0-M1)**2)
        ????#?尋優(yōu)
        ????if?Sb2?>?max_sigma:
        ????????max_sigma?=?Sb2
        ????????max_t?=?_t
        ????????
        #?打印最佳閾值????????
        print(max_t)

        通過大津法尋優(yōu)可知示例圖片的最佳劃分閾值為。然后以為閾值進(jìn)行二值化。效果如圖5所示。

        圖5?大津法閾值分割


        opencv中直接提供了大津法的實現(xiàn)方法,如下代碼所示。

        img?=?cv2.imread('./harden.png')
        #?灰度化
        img?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
        #?大津法閾值化處理
        ret,?th?=?cv2.threshold(img,?0,?255,?cv2.THRESH_BINARY+cv2.THRESH_OTSU)
        plt.imshow(th);

        小結(jié)

        本文對基于閾值的圖像分割方法進(jìn)行了簡單的介紹,并給出了相應(yīng)的圖像實例?;陂撝档膱D像分割方法簡單直接,計算速度快,在圖像灰度差異較大的情況下,是首選的分割方法。但閾值分割方法本身也存在抗噪能力弱、使用條件嚴(yán)格等缺點,所以往往會配合圖像濾波去噪等方法一起使用。

        ? ?參考資料

        ? ? [1]?數(shù)字圖像處理第四版

        ? ? [2]?https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html


        往期精彩:

        ?時隔一年!深度學(xué)習(xí)語義分割理論與代碼實踐指南.pdf第二版來了!

        ?我工作第五年的學(xué)習(xí)與讀書之法

        瀏覽 77
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美一区二区三区 | ass中国极品嫩模 | 男女黄色视频网站 | 国产乱妇高潮无乱码 | 欧美插穴 | 日本按摩年轻高潮4~6 | 淫香淫色综合网天天插 | 欧美亚洲精品 99欧美久久久 | 日韩毛片视频 | 国产精品色哟哟 |