許超 王仕山
摘要:分割圖像的方法有很多種,文章主要涉及的內(nèi)容是基于分水嶺算法的圖像分割,并且應(yīng)用壘卷積神經(jīng)網(wǎng)絡(luò)模型和Kcras框架編程實(shí)現(xiàn)基于U-net網(wǎng)絡(luò)的圖像語義分割,以及實(shí)現(xiàn)對細(xì)胞圖像的分割。
關(guān)鍵詞:圖像語義分割;全卷積神經(jīng)網(wǎng)絡(luò);分水嶺算法
中圖法分類號:TP391 文獻(xiàn)標(biāo)識碼:A
圖像分割技術(shù)的實(shí)質(zhì)是將圖像分為許多有特定性質(zhì)的區(qū)域,并對這些圖像子區(qū)域定義研究目標(biāo),得到內(nèi)部互相連通的部分過程,同一區(qū)域內(nèi)部一致,不同區(qū)域表現(xiàn)不同。
但隨著圖像應(yīng)用領(lǐng)域的不斷發(fā)展,待分析的圖像也隨之改變,對圖像分割的質(zhì)量也提出了更高的要求。
因此,傳統(tǒng)圖像分割算法已不能滿足發(fā)展的需要,所以圖像分割技術(shù)要向著更加廣泛、細(xì)致的方向研究,以取得新的研究成果。新的理論知識也為圖像的研究提供了思路,為解決出現(xiàn)的新問題,國內(nèi)外學(xué)者將各種新的理論知識與方法融合到圖像分割算法中。
1 傳統(tǒng)圖像分割方法
1.1 基于閾值的圖像分割方法
圖像分割方法中較為傳統(tǒng)的閾值分割法,是一種基本的、應(yīng)用廣泛的分割技術(shù),尤其是在圖像處理領(lǐng)域被廣泛使用。閾值分割法在實(shí)現(xiàn)的過程中簡單快捷、性能穩(wěn)定,而且計(jì)算量小。
閾值分割方法根據(jù)不同的灰度背景和目標(biāo)區(qū)域?qū)λ鼈冞M(jìn)行分類[1] ,并通過設(shè)置不同的閾值將圖像像素分成幾類。閾值分割方法非常適用于目標(biāo)和背景占據(jù)不同灰度范圍時(shí)的圖像處理,圖像閾值分割的關(guān)鍵是閾值的選取是否合理、正確。
灰度閾值分割是一種并行區(qū)域分割技術(shù)。單閾值分割是指圖像若僅用目標(biāo)和背景這2 大類分割,則選?。?個閾值即可。事實(shí)上,單閾值分割是從輸入圖像f 到輸出圖像g 的轉(zhuǎn)換,即:
式中,T 為閾值,g(i,j)= 1 是對應(yīng)目標(biāo)的圖像元素,g(i,j)= 0 是對應(yīng)背景的圖像元素。但如果要從圖像中提取多個目標(biāo),使用單個的閾值分割將會出現(xiàn)錯誤,那么就需要選取多個閾值來達(dá)到將每個目標(biāo)都分割開的目的,這其實(shí)就是多閾值分割。這也證實(shí)了閾值分割的結(jié)果主要取決于閾值的設(shè)定。閾值選定后,可以并行進(jìn)行對閾值和像素點(diǎn)灰度值的比較及對各像素的分割。
1.2 基于區(qū)域的圖像分割方法
在圖像分割算法中,基于區(qū)域的分割方法將區(qū)域作為分割基礎(chǔ)。區(qū)域生長和區(qū)域分裂合并是其包含的2 種具體算法。
1.2.1 區(qū)域生長
區(qū)域生長是一種串行區(qū)域技術(shù)。在分割過程中,需要根據(jù)上一步的結(jié)果來確定后續(xù)每一步的處理。
常用的算法有:結(jié)合模糊連接度的區(qū)域生長、對稱區(qū)域生長。
將具有相似特性的像素集合構(gòu)成區(qū)域是區(qū)域生長的基本思想。區(qū)域生長的過程大致如下:第一步,在每個需要分割的區(qū)域中找到一個種子像素點(diǎn)作為生長起點(diǎn);第二步,找到種子像素周圍具有相同或相似屬性的像素合并到種子像素中的區(qū)域;最后,新像素作為一個新的種子像素重復(fù)上述過程,直到像素不再符合條件。
區(qū)域生長算法很簡單,而且分割效果好,甚至可以用于分割連在一起且相對均勻的對象。但它需要人工選取種子, 且對噪聲比較敏感,容易導(dǎo)致誤差,如區(qū)域內(nèi)有空洞出現(xiàn)。由于目標(biāo)較大時(shí)分割速度較慢,因此盡量提高運(yùn)行效率成為算法設(shè)計(jì)的關(guān)注點(diǎn)。
1.2.2 區(qū)域分裂合并
為實(shí)現(xiàn)采用區(qū)域分裂合并算法對目標(biāo)的提取,從整幅圖像中將各個區(qū)域進(jìn)行分裂,輸出的結(jié)果被稱為子區(qū)域,然后將前景區(qū)域合并得到前景目標(biāo)。區(qū)域生長實(shí)現(xiàn)目標(biāo)的提取,要從某個或者某些像素點(diǎn)出發(fā)得到整個區(qū)域,而分裂合并可以理解為區(qū)域生長的逆過程。分割合并假設(shè)是圖像的前景區(qū)域由相互連接的像素組成,那么判定該像素是否為前景像素需要把一幅圖像分裂到像素級,然后對所有像素或子區(qū)域進(jìn)行判斷,前景區(qū)域或像素合并,即可得到前景目標(biāo)。
一種典型的區(qū)域分裂合并法是四叉樹分解法,設(shè)計(jì)分裂合并準(zhǔn)則是分裂合并法的關(guān)鍵。區(qū)域分裂合并方法對于復(fù)雜的圖像分割是一種很好的方法,但其算法較復(fù)雜,且在分割過程中可能會出現(xiàn)區(qū)域邊界被破壞的現(xiàn)象。
1.3 基于邊緣檢測的圖像分割方法
基于邊緣檢測的分割方法是通過檢測對包含不同區(qū)域的邊緣進(jìn)行分割,這也是研究者使用最多的一種方法。實(shí)現(xiàn)邊緣檢測方法的主要假設(shè)之一是:不同區(qū)域之間在邊緣上的像素灰度值的變化大多較為劇烈。邊緣檢測法一般以圖像一階導(dǎo)數(shù)的極大值或二階導(dǎo)數(shù)過零點(diǎn)的信息為標(biāo)準(zhǔn),為判斷邊緣點(diǎn)提供基本依據(jù)。
根據(jù)處理技術(shù),邊緣檢測可分為串行邊緣檢測和并行邊緣檢測。串行邊緣檢測利用之前的像素驗(yàn)證結(jié)果來確定當(dāng)前像素是否屬于檢測邊緣上的點(diǎn);并行邊緣檢測是確定一個像素點(diǎn)是否屬于檢測邊緣上的一個點(diǎn);并行邊緣檢測是對目標(biāo)像素點(diǎn)和其相鄰像素點(diǎn)進(jìn)行檢測。
如今還有很多方法被提出,如基于曲面擬合法、基于邊界曲線擬合法、基于反映?擴(kuò)散方程法、串行邊界查找法以及基于變形模型法。邊緣檢測法的優(yōu)點(diǎn)是運(yùn)算速度快且邊緣定位準(zhǔn),但在圖像分割中的應(yīng)用不能保證邊緣的連續(xù)性和封閉性,且高細(xì)節(jié)區(qū)域具有大量的斷裂邊緣,不能形成整個大區(qū)域。
由于以上2 大難點(diǎn)的限制,無論采用何種方法,單獨(dú)的邊緣檢測只能產(chǎn)生邊緣點(diǎn),而不是完整意義上的圖像分割過程。采用邊緣生長技術(shù)能夠最大程度地保證邊緣的封閉性,或使用有向勢能函數(shù)將有缺口的兩邊緣強(qiáng)制連接一起,以得到封閉邊緣圖。未來的研究方向?yàn)閼?yīng)用于提取初始邊緣點(diǎn)的自適應(yīng)閾值的選取、層次分割圖像更大區(qū)域的選取以及如何確認(rèn)重要邊緣以去除假邊緣。
2 原理
分水嶺分割技術(shù)是一種基于區(qū)域增長的分割方法,能夠得到目標(biāo)連續(xù)、閉合的邊界,但像素邊界寬。
分水嶺算法是一種實(shí)用而且應(yīng)用廣泛的分割技術(shù),在很多領(lǐng)域都達(dá)到了預(yù)期的分割效果。
分水嶺分割法是指將一幅圖像比作一個拓?fù)涞匦螆D,它的灰度值相當(dāng)于地形高度值,即對應(yīng)圖像空間和對應(yīng)圖像灰度,山峰是高灰度值,山谷是低灰度值。通常低洼處被稱為匯水盆地,匯水盆地之間的山脊被稱為分水嶺,水會從分水嶺流下去,而且朝著不同匯水盆地流的可能性是相同的。
分水嶺圖像分割算法就是通過確定分水嶺的位置來進(jìn)行圖像分割的,分割是為了找到分水線。在灰度圖中找到不同的分水嶺和匯水盆地,邊緣用分水嶺來表示,而不同的匯水盆地則代表不同的區(qū)域。分水嶺分割算法經(jīng)常用于處理圖像中連接在一起的目標(biāo)物體,通常會取得較好的效果。
3 算法
分水嶺的計(jì)算過程是一個迭代標(biāo)記過程。文森特L 提出了一種計(jì)算分水嶺的經(jīng)典方法。在該算法中,需要分2 步進(jìn)行計(jì)算,其中一個是排序過程,另一個是淹沒過程。在運(yùn)算中要先按照升序?qū)⒚總€像素的灰度級進(jìn)行排序,然后在從低到高逐步實(shí)現(xiàn)淹沒的過程中,用先進(jìn)先出的結(jié)構(gòu)對每一個局部極小值在h階高度的影響域進(jìn)行判斷及標(biāo)注。
分水嶺變換得到的是輸入圖像的匯水盆圖像,分水嶺是匯水盆之間的邊界點(diǎn)。由此可見,分水嶺表示的是輸入圖像的極大值點(diǎn),一般將梯度圖像作為輸入圖像,以得到圖像的邊緣信息,表達(dá)式為:
g(x,y)= grad(f(x,y))= {[f(x,y)-f(x-1,y)]2[f(x,y)-f(x,y-1)]2}0.5 (2)
式中,f(x,y)為原始圖像,grad{.}為梯度運(yùn)算。
在保證封閉連續(xù)邊緣的前提下,分水嶺算法在對微弱邊緣處理上具有良好的效果,但也存在缺陷,即使用時(shí)會因圖像中的噪聲和物體表面細(xì)密紋理的灰度變化,而導(dǎo)致過度分割現(xiàn)象出現(xiàn)。應(yīng)用分水嶺算法得到的封閉的匯水盆,為分析圖像的區(qū)域特征提供了可能。
改進(jìn)的分水嶺分割技術(shù)有很多種。一般可以采用2 種處理方法消除分水嶺算法產(chǎn)生的過度分割。
(1)分割前進(jìn)行預(yù)處理。先對圖像進(jìn)行預(yù)處理,去除無關(guān)邊緣信息,再用分水嶺分割。通過除噪標(biāo)記前景背景、求梯度圖像等,減少較小的匯水盆,以減少分割區(qū)域數(shù)量。比如,修改梯度函數(shù),使匯水盆只能響應(yīng)想要探測的目標(biāo)。因此,對梯度函數(shù)進(jìn)行調(diào)整,以及對梯度圖像進(jìn)行閾值處理是一個較簡單的方法,可以消除因灰度的微小變化產(chǎn)生的過度分割。表達(dá)式為:g(x,y)= max(grad(f(x,y)),gθ) (3)式中,gθ 為閾值。用Sobel 算子計(jì)算可以獲得梯度圖像。但若選取閾值過大,則在處理實(shí)際圖像過程時(shí),圖像中含有灰度變化小的微弱邊緣可能會被消除。
(2)分割后處理。在分割后對結(jié)果圖像進(jìn)行合并。在初始分割過程中,若產(chǎn)生了較多小區(qū)域,則最后合并處理過程就會出現(xiàn)運(yùn)算量過大的現(xiàn)象,復(fù)雜的計(jì)算大幅降低了處理的效率。比如,閾值的選擇會影響分割,合并標(biāo)準(zhǔn)的確定也會產(chǎn)生影響。通常情況下,合并標(biāo)準(zhǔn)與相鄰區(qū)域有關(guān),由其邊界強(qiáng)度信息和平均灰度信息確定,根據(jù)合并標(biāo)準(zhǔn),獲得的分割結(jié)果會有所不同。
4 基于全卷積神經(jīng)網(wǎng)絡(luò)的圖像分割
4.1 Python 介紹
Python 是一種面向?qū)ο?、動態(tài)數(shù)據(jù)類型的程序編寫設(shè)計(jì)語言。其不僅語法全面,而且可以大量開發(fā)文檔。它是用途廣泛且功能強(qiáng)大的代碼運(yùn)行工具。
Matlab 與Python 可以算得上是能夠相提并論的計(jì)算機(jī)編寫程序,Python 中常用的擴(kuò)展庫以及大多被廣泛使用的功能,在Matlab 中都能找到與其對應(yīng)的。
但是,Matlab 中有很強(qiáng)專業(yè)性的工具箱還不能夠被取代。
Python 有以下優(yōu)點(diǎn)。(1)免費(fèi)。Python 是一種開放源碼的軟件。(2) 簡單易學(xué)。(3) 豐富的庫。另外,其還有速度快、支持面向?qū)ο缶幊?、易于移植以及可嵌入等?yōu)點(diǎn)。但是,它幾乎不能將程序連用一行寫成,命令行輸出時(shí)也有限制, 必須將程序?qū)懭耄?Py文件。
Python 常用于系統(tǒng)、數(shù)據(jù)庫以及網(wǎng)絡(luò)的編程、圖形處理、數(shù)字處理、文本處理以及多媒體應(yīng)用等。簡單爬蟲也可以用Python 編寫。本文也采用了Python軟件中的機(jī)器學(xué)習(xí)模型進(jìn)行實(shí)踐,以實(shí)現(xiàn)數(shù)字圖像的處理。
4.2 全卷積神經(jīng)網(wǎng)絡(luò)
通?;趥鹘y(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)的分割方法是采用一個像素周圍的一個圖像塊,輸入卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練和預(yù)測,以達(dá)到對該像素分類的目的。這種方法有3 個缺點(diǎn):存儲較大、計(jì)算效率低、感知區(qū)域的大小受像素塊大小的限制。分析像素塊只能提取局部的特征,由于整幅圖像比像素塊大很多,因此限制了分類的性能。全卷積神經(jīng)網(wǎng)絡(luò)能夠有針對性地解決以上分割缺點(diǎn)。
全卷積神經(jīng)網(wǎng)絡(luò)可以做到像素級的分割圖像,能處理語義級別的圖像分割問題。它與經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)分類不同,全卷積神經(jīng)網(wǎng)絡(luò)在卷積層轉(zhuǎn)化為全連接層,以得到固定長度的特征向量。在全卷積網(wǎng)絡(luò)中,任意尺寸的輸入圖像都可被接受,對最后一個卷積層的特征圖用反卷積層上采樣處理[2] ,使它恢復(fù)到與輸入圖像相同大小,然后在上采樣的特征圖上逐一進(jìn)行像素分類,最終完成整幅圖像分割。這樣不僅能對每個像素進(jìn)行預(yù)測,還保留了原始輸入圖像中的空間信息。
4.3 細(xì)胞分割中的應(yīng)用
(1)導(dǎo)入需要使用的系統(tǒng)包和自定義模塊。導(dǎo)入keras 中的優(yōu)化器,數(shù)據(jù)預(yù)處理模塊中的three_to_one?channel 函數(shù)和one_to_one?channel 函數(shù),trainGenerator函數(shù)和validGenerator 函數(shù)。
(2)輸入待分割數(shù)據(jù)的信息。首先給出訓(xùn)練集和驗(yàn)證集中標(biāo)注圖片的路徑信息,再給出需要備份標(biāo)注的圖片,標(biāo)注圖片是三通道還是單通道,最后給出標(biāo)注數(shù)據(jù)的詳細(xì)信息。信息中包括顏色與待分割識別物體的對應(yīng)關(guān)系,以及待分割識別物體對應(yīng)的新標(biāo)注圖片像素信息。
(3)數(shù)據(jù)預(yù)處理。生成新標(biāo)注圖片像素和顏色的關(guān)系字典、顏色和新標(biāo)注圖片像素的關(guān)系數(shù)組以及源圖顏色和新圖標(biāo)注序號對應(yīng)關(guān)系。復(fù)制訓(xùn)練集和驗(yàn)證集標(biāo)注圖片到一個臨時(shí)文件夾并且將原標(biāo)注圖片所在文件夾的標(biāo)注圖片轉(zhuǎn)換為可輸入全卷積網(wǎng)絡(luò)的圖片格式。
(4)模型建立和編譯。輸入已知信息,計(jì)算分割物體包括背景的類別數(shù)。
(5)模型訓(xùn)練。
(6)訓(xùn)練效果可視化:得到圖1、圖2。
從可視化圖中得出,圖1 隨訓(xùn)練樣本個數(shù)的不斷增加,精準(zhǔn)度越來越高。圖2 隨訓(xùn)練次數(shù)的增加,損失率趨近于0。訓(xùn)練集與驗(yàn)證集的相似度越來越高,表示圖片分割效果理想,幾乎能全部分割清楚。模型結(jié)果避免了過擬合。
過擬合是指為了得到一致性的假設(shè),使假設(shè)過程變得過度嚴(yán)格,其本質(zhì)是數(shù)學(xué)優(yōu)化的問題。因訓(xùn)練集和測試集存在差異,若最初得到的損失函數(shù)為0,則表示對訓(xùn)練集中的內(nèi)容過分?jǐn)M合,所以評價(jià)時(shí)為了避免過擬合,可以采用增大數(shù)據(jù)運(yùn)行量以及增加測試樣本集個數(shù)這2 種常用方法。
5 結(jié)束語
本文主要介紹了圖像分割的原理、傳統(tǒng)的幾種圖像分割方法及全卷積神經(jīng)網(wǎng)絡(luò)算法?;冢?net神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)對細(xì)胞圖像進(jìn)行分割處理,它對小樣本的訓(xùn)練集也能夠得到很好的效果。將細(xì)胞圖像生成可以訓(xùn)練的樣本,實(shí)現(xiàn)分割訓(xùn)練模型,并且分析處理結(jié)果是否能夠達(dá)到預(yù)期效果。在具體實(shí)驗(yàn)中,將圖片轉(zhuǎn)化為二維數(shù)組并將其輸入到U?net 模型進(jìn)行分割,實(shí)現(xiàn)訓(xùn)練可視化,分析判斷過程訓(xùn)練集與預(yù)測集的損失函數(shù)以及精確度。研究發(fā)現(xiàn),使用U?net 神經(jīng)網(wǎng)絡(luò)進(jìn)行的圖像分割與原圖像基本相近,精準(zhǔn)度高。
參考文獻(xiàn):
[1] 許曉麗.基于聚類分析的圖像分割算法研究[D].哈爾濱:哈爾濱工程大學(xué),2012.
[2] 梅迪.應(yīng)用于圖像語義分割的神經(jīng)網(wǎng)絡(luò)———從SEGNET 到U?NET[J].電子制作,2021(12):49?52.
作者簡介:許超(1994—),碩士,助教,研究方向:人工智能技術(shù)。