matlab图像处理——分水岭法
分水嶺算法(watershed)是一種借鑒了形態(tài)學(xué)理論的分割方法,在該方法中,將一幅圖像看成一個(gè)拓?fù)涞匦螆D,其中灰度值f(x,y)對(duì)應(yīng)地形高度值。高灰度值對(duì)應(yīng)的山峰,低灰度值對(duì)應(yīng)山谷。水總是朝地勢(shì)低的地方流動(dòng),直到某一局部低洼處才停下來(lái),這個(gè)低洼處被稱為吸水盆地。最終所有的水分會(huì)分聚在不同的吸水盆地,吸水盆地之間的山脊被稱為分水嶺。水從分水嶺留下時(shí),朝不同的吸水盆地流動(dòng)的可能性是相等的。使用這種想法用于圖像分割,就是要在灰度圖像中找出不同的“吸水盆地”和“分水嶺”。
分水嶺閾值選擇算法可以看作一種自適應(yīng)的多閾值分割算法,在圖像梯度圖上進(jìn)行閾值選擇時(shí),經(jīng)常遇到的問(wèn)題是如何恰當(dāng)?shù)倪x擇閾值。若閾值選得太高,則許多邊緣會(huì)丟失或出現(xiàn)破碎現(xiàn)象;若閾值選得太低,則容易產(chǎn)生虛假邊緣,而且邊緣變厚導(dǎo)致定位不精確。分水嶺法可以避免這個(gè)問(wèn)題。
matlab中提供的watershed函數(shù)用于實(shí)現(xiàn)分水嶺分割圖像,其調(diào)用格式如下。
L=watershed(A):輸入?yún)?shù)A為待分割的圖像;輸出參數(shù)L為與A維數(shù)相同的非負(fù)整數(shù)矩陣,標(biāo)記分割結(jié)果。矩陣元素值為對(duì)應(yīng)位置上像素點(diǎn)所屬區(qū)域編號(hào),0元素表示對(duì)該像素點(diǎn)是分水嶺像素,不屬于任何一個(gè)區(qū)域。
L=watershed(A,conn):參數(shù)conn用于指定算法中使用的元素的連通方式。(二維連通:conn取 4或8;三維conn可取4、8或16)
watershed函數(shù)不僅適用于圖像分割,也可以用于對(duì)任意維區(qū)域進(jìn)行分割,A是對(duì)這個(gè)區(qū)域的描述,可以是任意維的數(shù)組,每一個(gè)元素可以是任意實(shí)數(shù)。
clear all %產(chǎn)生一個(gè)包含兩個(gè)重疊的圓形圖案的二值圖像 center1 = -10; center2 = -center1; dist = sqrt(2*(2*center1)^2);radius = dist/2 * 1.4; lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)]; [x,y]=meshgrid(lims(1):lims(2)); bw1 = sqrt((x-center1).^2+(y-center1).^2) <=radius; bw2 = sqrt((x-center2).^2+(y-center2).^2) <=radius; bw = bw1 | bw2; subplot(131);imshow(bw,'InitialMagnification','fit');xlabel('(a)二值圖像'); %對(duì)二值圖像進(jìn)行變換,得到一個(gè)包含兩個(gè)“盆地”的圖像 D=bwdist(~bw); subplot(132);imshow(D,[],'InitialMagnification','fit'); xlabel('(b)分割前的等高線'); %補(bǔ)充距離變換 D=-D; D(~bw) =-Inf; %進(jìn)行watershed分割并將分割結(jié)果以標(biāo)記圖形式繪出 L=watershed(D); rgb = label2rgb(L,'jet',[.5 .5 .5]); subplot(133);imshow(rgb,'InitialMagnification','fit'); xlabel('(c)D的分水嶺變換')結(jié)果圖如下:
三維不作解釋,差不多道理。還請(qǐng)多多指教。
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的matlab图像处理——分水岭法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 监督学习 | 集成学习 之AdaBoos
- 下一篇: MapReduce_自学过程(一)