[Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
1. 分水嶺原理
分水嶺算法是一種基于拓?fù)淅碚摰臄?shù)學(xué)形態(tài)學(xué)分割理論,其基本思想是把圖像看作是測(cè)地學(xué)上的拓?fù)涞孛?#xff0c;圖像中每一點(diǎn)像素的灰度值表示該點(diǎn)的海拔高度,每一個(gè)局部極小值及其影響區(qū)域成為集水盆,而集水盆的邊界則形成分水嶺。分水嶺的概念和形成可以通過(guò)模擬浸入過(guò)程來(lái)說(shuō)明。在每一個(gè)局部極小值表面,刺穿一個(gè)小孔,然后把整個(gè)模型慢慢浸入水中,隨著浸入的加深,每一個(gè)局部極小值的影響域慢慢向外擴(kuò)展,在兩個(gè)集水盆匯合處構(gòu)筑大壩,即形成分水嶺。分水嶺的計(jì)算過(guò)程是一個(gè)迭代標(biāo)注過(guò)程。
分水嶺比較經(jīng)典的計(jì)算方法是L.Vincent提出的。在該算法中,分水嶺計(jì)算分兩個(gè)步驟,一個(gè)是排序過(guò)程,一個(gè)是淹沒(méi)過(guò)程。首先對(duì)每個(gè)像素的灰度級(jí)進(jìn)行從低到高的排序,然后再?gòu)牡偷礁邔?shí)現(xiàn)淹沒(méi)過(guò)程中,對(duì)每一個(gè)局部極小值在H階高度的影響域采用先進(jìn)先出(FIFO)結(jié)構(gòu)進(jìn)行判斷及標(biāo)注。
分水嶺變換得到的是輸入圖像的集水盆圖像,集水盆之間的分界點(diǎn)即為分水嶺。顯然分水嶺表示的是輸入圖像極大值點(diǎn)。因此為了得到圖像的邊緣信息,通常把梯度圖像作為輸入圖像,即g(x,y)=grad(f(x,y))=sqrt{[f(x,y)-f(x-1,y)]^2 + [f(x.y)-f(x,y-1)]^2}。
分水嶺算法對(duì)微弱的邊緣具有良好的響應(yīng),是得到封閉連續(xù)邊緣的保證。另外,分水嶺算法所得到的封閉的集水盆,為分析圖像的區(qū)域特征提供了可能。
實(shí)際應(yīng)用過(guò)程中,由于一幅圖像存在非常多極小值,就會(huì)造成圖像的過(guò)分割。通常可以采用兩種方法加以解決,一是利用先驗(yàn)知識(shí)去除無(wú)關(guān)邊緣信息。二是修改梯度函數(shù),使得集水盆只響應(yīng)想要探測(cè)的目標(biāo)。為了降低分水嶺算法產(chǎn)生的過(guò)度分割,通常要對(duì)梯度函數(shù)進(jìn)行修改,一個(gè)最簡(jiǎn)單的方法就是對(duì)梯度圖像進(jìn)行閾值處理,用以消除灰度的微小變化產(chǎn)生的過(guò)度分割。即g(x,y)=max(grad(f(x,y)),gΘ),式中g(shù)Θ表示閾值。程序可采用的方法:用閾值限制梯度圖像已達(dá)到消除灰度值的微小變化造成的過(guò)分割結(jié)果,獲得適量分割區(qū)域,在對(duì)這些區(qū)域的邊緣點(diǎn)的灰度級(jí)進(jìn)行從高到低的排序,然后再?gòu)牡偷礁邔?shí)現(xiàn)淹沒(méi)過(guò)程。梯度圖像用Sobel算子計(jì)算獲得。對(duì)梯度圖像進(jìn)行閾值處理時(shí),選取合適的閾值對(duì)最終分割的圖像有很大影響,因此閾值的選取是圖像分割效果好壞的一個(gè)關(guān)鍵。缺點(diǎn):實(shí)際圖像中可能含有微弱的邊緣,灰度變化的數(shù)值差別不是特別明顯,選取閾值過(guò)大可能會(huì)消去這些微弱邊緣。
2. Matlab仿真分析分水嶺算法
2.1 算法綜述
如果圖像中的目標(biāo)物體是連接在一起的,則分割起來(lái)會(huì)更困難,分水嶺算法通常用于處理這一類問(wèn)題,通常也會(huì)取得非常不錯(cuò)的結(jié)果。分水嶺分割算法把圖像看成一幅“地形圖”,其中亮度比較強(qiáng)的區(qū)域像素值比較大,而比較暗的區(qū)域像素值比較小,通過(guò)尋找“匯水盆地”和“分水嶺”界限,對(duì)圖像進(jìn)行分割。(Separating touching objects in an image is one of the most difficult image processing operations. The watershed transform is often applied to this problem. The watershed transform finds "catchment basins " and " watershed rigid lines" in an image by treating is as a surface where light pixels are high and dark pixels are low.) 就像上面所說(shuō)一樣,直接應(yīng)用分水嶺分割算法的效果往往是不好的,如果在圖像中對(duì)前景對(duì)象和背景對(duì)象進(jìn)行標(biāo)注區(qū)別,再應(yīng)用分水嶺算法會(huì)取得較好的分割效果。(Segmentation using the watershed transform works better if you can identify or "mark", foreground object and background object.)2.2 算法執(zhí)行步驟
1.計(jì)算分割函數(shù)。圖像中較暗的區(qū)域是要分割的對(duì)象。 2.計(jì)算前景標(biāo)志。這些是每個(gè)對(duì)象內(nèi)部連接的斑點(diǎn)像素。 3.計(jì)算背景標(biāo)志。這些不屬于任何對(duì)象的像素。 4.修改分割函數(shù),使其僅在前景和背景標(biāo)記位置有極小值。 5.對(duì)修改后的分割函數(shù)做分水嶺變換計(jì)算。2.3 matlab 仿真研究
2.3.1 讀入一幅彩色圖像,并轉(zhuǎn)成灰度圖。2.3.2 將圖像的梯度幅值作為分割函數(shù) 采用Sobel邊緣算子對(duì)圖像進(jìn)行水平方向和豎直方向進(jìn)行濾波,然后求取模值,作為圖像的邊緣梯度。這是因?yàn)镾obel算子濾波后,在圖像的邊界處將會(huì)出現(xiàn)較大值,在非邊界出現(xiàn)較小值。
(我們直接用梯度圖像做為“分水嶺”分割的導(dǎo)向函數(shù),觀察效果)
這樣,我們可以看到。如果不對(duì)原始的邊緣梯度圖像進(jìn)行處理,由于存在無(wú)數(shù)個(gè)極小值,這就勢(shì)必會(huì)導(dǎo)致算法發(fā)生過(guò)分割的現(xiàn)象。因此,實(shí)際操作過(guò)程中,應(yīng)該分別對(duì)前景對(duì)象和北京對(duì)象進(jìn)行標(biāo)記,已獲得更好的分割結(jié)果。 2.3.3 標(biāo)記前景對(duì)象 有多種方法可以應(yīng)用在這里來(lái)獲得前景標(biāo)記,這些標(biāo)記必須是前景對(duì)象內(nèi)部的連接斑點(diǎn)像素。我們可以使用形態(tài)學(xué)技術(shù)“基于開(kāi)的重建”和“基于閉的重建”來(lái)清理圖像。這些操作將會(huì)在每個(gè)像素內(nèi)部創(chuàng)建單位極大值,我們使用imregionalmax來(lái)定位。 開(kāi)閉運(yùn)算可以講圖像中壁結(jié)構(gòu)元素小的特定圖像細(xì)節(jié)去除,同時(shí)保證不產(chǎn)生全局幾何失真。開(kāi)運(yùn)算可以把比結(jié)構(gòu)單元小的突刺濾掉(比較亮的點(diǎn)),切斷細(xì)長(zhǎng)搭接而起到分離作用;閉運(yùn)算可以把比結(jié)構(gòu)元素小的缺口或空填上,搭接短的間隔而起到連接作用。
圖像開(kāi)操作
接下來(lái),通過(guò)腐蝕后的重建來(lái)做基于開(kāi)的重建計(jì)算。
在圖像開(kāi)操作的基礎(chǔ)之上,進(jìn)行圖像的閉操作,去除圖像中的暗點(diǎn)。
執(zhí)行基于閉的形態(tài)學(xué)重建操作
通過(guò)上面的對(duì)比,我們可以清晰地看出,基于重建的開(kāi)閉操作要比標(biāo)準(zhǔn)的開(kāi)閉重建更加有效。那么就可以直接獲取局部極大值來(lái)進(jìn)行前景標(biāo)記。 我們可以注意到,大多數(shù)閉塞處和陰影對(duì)象沒(méi)有被標(biāo)記,這就意味著這些對(duì)象在結(jié)果中將不會(huì)得到合理的分割。而且,一些對(duì)象的前景標(biāo)記會(huì)一直到對(duì)象的邊緣。這就意味著應(yīng)該清理標(biāo)記斑點(diǎn)的邊緣,然后收縮他們。下面通過(guò)閉操作來(lái)清理標(biāo)記斑點(diǎn)通過(guò)腐蝕操作來(lái)縮小區(qū)域。
這個(gè)過(guò)程中(腐蝕操作),會(huì)留下一些偏離的孤立元素,用bwareaopen移除少于特定像素個(gè)數(shù)的斑點(diǎn)。BW2 =?bwareaopen(BW,P)指的是從二值圖像中移除所有少于P像素的連通塊。
2.3.4 背景標(biāo)記 現(xiàn)在我們需要對(duì)背景進(jìn)行標(biāo)記,在清理后的“基于重建的拍閉運(yùn)算”圖像中,暗像素屬于背景,所以可以從閾值操作開(kāi)始。
背景像素在黑素的區(qū)域,但是理想情況下,不必要求背景標(biāo)記太接近于要分割的對(duì)象邊緣。通過(guò)計(jì)算“骨架影響范圍”來(lái)細(xì)化“背景”。這個(gè)可以通過(guò)計(jì)算BW的距離變換的分水嶺變換來(lái)實(shí)現(xiàn),然后尋找結(jié)果的分水嶺脊線D=bwdist(BW)計(jì)算二值圖像BW的歐幾里得矩陣。對(duì)BW的每一個(gè)像素,距離變換指定像素和最近的BW非零像素之間的距離。bwdist默認(rèn)使用歐幾里得距離公式。
2.3.5 梯度函數(shù)有限的分水嶺變換
源代碼: %Watershed clc; clear all; close all; ImgRgb = imread('apple.jpg'); if ndims(ImgRgb) == 3I = rgb2gray(ImgRgb); elseI = ImgRgb; end %Sobel 求圖像邊緣 hy = fspecial('sobel'); hx = hy'; Iy = imfilter(double(I), hy, 'replicate'); Ix = imfilter(double(I), hx, 'replicate'); GradMag = sqrt(Ix.^2 + Iy.^2); %直接利用梯度函數(shù)圖像分割 L = watershed(GradMag); %基于開(kāi)運(yùn)算的重建 se = strel('disk', 20); ImgOpen = imopen(I, se); ImgErode = imerode(I, se); ImgErodeConstrnct = imreconstruct(ImgErode, I); %基于閉操作的圖像重建 Ioc = imclose(ImgOpen, se); ImgErodeConstrnctDilate = imdilate(ImgErodeConstrnct, se); ImgErodeConstrnctDilateConstruct = imreconstruct(imcomplement(ImgErodeConstrnctDilate), imcomplement(ImgErodeConstrnct)); ImgErodeConstrnctDilateConstruct = imcomplement(ImgErodeConstrnctDilateConstruct); %標(biāo)記前景的極大值 fgm = imregionalmax(ImgErodeConstrnctDilateConstruct); %去除前景中的零散點(diǎn),并進(jìn)行區(qū)域收縮 se2 = strel(ones(5,5)); fgm2 = imclose(fgm, se2); fgm3 = imerode(fgm2, se2); %進(jìn)一步去除小的連通域 fgm4 = bwareaopen(fgm3, 20); %標(biāo)記背景 bw = im2bw(ImgErodeConstrnctDilateConstruct, graythresh(ImgErodeConstrnctDilateConstruct)); %脊線分割 D = bwdist(bw); DL = watershed(D); bgm = DL == 0; gradmag2 = imimposemin(GradMag, bgm | fgm4); L = watershed(gradmag2); It1 = ImgRgb(:, :, 1); It2 = ImgRgb(:, :, 2); It3 = ImgRgb(:, :, 3); fgm5 = imdilate(L == 0, ones(3, 3)) | bgm | fgm4; It1(fgm5) = 0; It2(fgm5) = 255; It3(fgm5) = 0; I4 = cat(3, It1, It2, It3); Lrgb = label2rgb(L, 'jet', 'w', 'shuffle'); figure('units', 'normalized', 'position', [0 0 1 1]); subplot(1, 2, 1); imshow(ImgRgb, []); title('原圖像'); subplot(1, 2, 2); imshow(I4, []); title('標(biāo)記和對(duì)象邊緣疊加到原圖像');
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的[Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 飞秋未来的发展趋势
- 下一篇: 图像及其表达与性质(上)