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