opencv分水嶺演算法
❶ 分水嶺圖像分割中,常常用梯度圖像代替原始圖像作為分水嶺演算法的輸入的原因
分水嶺演算法是數學形態學分割方法中的經典演算法,它將圖像看作是地形學上被水覆蓋的自然地貌,圖像中的每一像素的灰度值表示該點的海拔高度,其每一個局部極小值及其影響區域稱為集水盆,集水盆的邊界則是分水嶺,在各極小區域的表面打一個小孔,同時讓水從小孔中湧出,並慢慢淹沒極小區域周圍的區域,那麼各極小區域波及的范圍,即是相應的集水盆,對應圖像中的區域;不同棗升區域的水流相遇時的界限,就是期望得到的分水嶺,對應區域的邊緣。分水嶺變換可以保證分割區域的連續性和封閉性。
分水嶺變換是從局部極小點扒漏開始,即只能是在梯度圖中用, 原始圖是轉換後才能用於分水嶺變換的
一般圖像中存在多個極小值點,通常會存在過分割現象,可以採用梯度閾值分割改進或者採用標記分春岩爛水嶺演算法將多個極小值區域連在一起
opencv提供分水嶺的代碼 可以找來看一下
❷ 分水嶺的計算過程
分水嶺的計算過程是一個迭代標注過程。分水嶺比較經典的計算方法是L. Vincent提出的。在該演算法中,分水嶺計算分兩個步驟,一個是排序過程,一個是淹沒過程。首先對每個像素的灰度級進行從低到高排序,然後在從低到高實現淹沒過程中,對每一個局部極小值在h階高度的影響域採用先進先出(FIFO)結構進行判斷及標注。
分水嶺變換得到的是輸入圖像的集水盆圖像,集水盆之間的邊界點,即為分水嶺。顯然,分水嶺表示的是輸入圖像極大值點。因此,為得到圖像的邊緣信息,通常把梯度圖像作為輸入圖像,即
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
式中,f(x,y)表示原始圖像,grad{.}表示梯度運算。
分水嶺演算法對微弱邊緣具有良好的響應,圖像中的雜訊、物體表面細微的灰度變化,都會產生過度分割的現象。但同時應當看出,分水嶺演算法對微弱邊緣具有良好的響應,是得到封閉連續邊緣的保證的。另外,分水嶺演算法所得到的封閉的集水盆,為分析圖像的區域特徵提供了可能。
為消除分水嶺演算法產生的過度分割,通常可以採用兩種處理方法,一是利用先驗知識去除無關邊緣信息。二是修改梯度函數使得集水盆只響應想要探測的目標。
為降低分水嶺演算法產生的過度分割,通常要對梯度函數進行修改,一個簡單的方法是對梯度圖像進行閾值處理,以消除灰度的微小變化產生的過度分割。即
g(x,y)=max(grad(f(x,y)),gθ)
式中,gθ表示閾值。
程序可採用方法:用閾值限制梯度圖像以達到消除灰度值的微小變化產生的過度分割,獲得適量的區域,再對這些區域的邊緣點的灰度級進行從低到高排序,然後在從低到高實現淹沒的過程,梯度圖像用Sobel運算元計算獲得。對梯度圖像進行閾值處理時,選取合適的閾值對最終分割的圖像有很大影響,因此閾值的選取是圖像分割效果好壞的一個關鍵。缺點:實際圖像中可能含有微弱的邊緣,灰度變化的數值差別不是特別明顯,選取閾值過大可能會消去這些微弱邊緣。
❸ OpenCV 如何進行二值圖像的分水嶺演算法
沒用過。不過從程序看,處理彩色圖像先要轉成灰色圖像,處理完再轉回彩色。轉換函數是cvCvtColor(...),參數CV_BGR2GRAY 是RGB到grey, 參數 CV_GRAY2BGR 是grey 到RGB.
處理結果是彩色的,則轉灰色就是了:
cvCvtColor( inputImg, grayImg, CV_BGR2GRAY);
❹ 圖像分割最好方法
1.基於閾值的分割方法
閾值法的基本思想是基於圖像的灰度特徵來計算一個或多個灰度閾值,並將圖像中每個像素的灰度值與閾值作比較,最後將像素根據比較結果分到合適的類別中。因此,該方法最為關鍵的一步就是按照某個准則函數來求解最佳灰度閾值。
閾值法特別適用於目標和背景占據不同灰度級范圍的圖。圖像若只有目標和背景兩大類,那麼只需要選取一個閾值進行分割,此方法成為單閾值分割;但是如果圖像中有多個目標需要提取,單一閾值的分割就會出現作物,在這種情況下就需要選取多個閾值將每個目標分隔開,這種分割方法相應的成為多閾值分割。
2.基於區域的圖像分割方法
基於區域的分割方法是以直接尋找區域為基礎的分割技術,基於區域提取方法有兩種基本形式:一種是區域生長,從單個像素出發,逐步合並以形成所需要的分割區域;另一種是從全局出發,逐步切割至所需的分割區域。
分水嶺演算法
分水嶺演算法是一個非常好理解的演算法,它根據分水嶺的構成來考慮圖像的分割,現實中我們可以想像成有山和湖的景象,那麼一定是水繞山山圍水的景象。
分水嶺分割方法,是一種基於拓撲理論的數學形態學的分割方法,其基本思想是把圖像看作是測地學上的拓撲地貌,圖像中每一點像素的灰度值表示該點的海拔高度,每一個局部極小值及其影響區域稱為集水盆,而集水盆的邊界則形成分水嶺。分水嶺的概念和形成可以通過模擬浸入過程來說明。在每一個局部極小值表面,刺穿一個小孔,然後把整個模型慢慢浸入水中,隨著浸入的加深,每一個局部極小值的影響域慢慢向外擴展,在兩個集水盆匯合處構築大壩,即形成分水嶺。
❺ 分水嶺演算法的應用
數學形態學一個應用是分水嶺演算法,為了便於理解,可以將圖像的灰度空間與地球表面的地形高度相類比,據此,發明了應用於圖像領域的分水嶺演算法。
假設,如下圖所示的一個島嶼,要從 點走到 點,虛線所表示的是最短的直線距離,也就是歐式距離,考慮到現實情況,不能穿過水面到達目標地點,所以,能夠從起點到終點的實際通行路線中最短的距離成為測地線距離。
通過以上分析,給出測地線距離的定義:
給定指定連通域 ,測地線距離就是 中兩個像素點 和 之間的最短(可執行)路徑的長度,用公式定義如下:
如下圖所示,假定一個連通域 包含了若干個子區域 ,用公式表示 所表示的測地線影響域為:
以上公式可以理解為,區域 中的像素點到 域的測地線距離比其他域更小的點的軌跡的集合,也就是以 域中的種子點出發,其測地線距離比其他域的種子點都要小的點集所構成的區域。如下圖所示:
SKIZ表示區域 中的點不屬於任何一個測地線影響域,也就是域 中的點到兩個測地線影響域的中測地線距離相等。區域 中構成 的SKIZ,記作 ,用公式的表述如下:
注意:, 表示區域 以外的 中的所有點的集合集合
如下圖所示的山脈地形圖,包含山谷和山峰,在水平面不斷上升的過程中,會逐漸淹沒掉一些較低的區域,而為了防止水溢出,需要不斷在山脊上修建大壩,這個過程不斷進行,最後會得到一個區域分割的效果。
在一副圖像上實現分水嶺演算法,與上述過程相似,只不過是通過灰度值充當水平面的角色,對圖像進行不斷的填埋,最後得到區域分割的效果圖。
如上圖所示的動畫中,不斷用灰度值代表的水平面淹沒圖像中的最小值,最後得到分割後的圖像。綜上,分水嶺演算法的步驟可以總結如下:
如下圖所示,另外一種分水嶺演算法的原理是,指定初始的種子點,只對種子點所在的鄰域像素進行分類,而不考慮其他區域。
如下圖所示的圖片,以最小點開始,進行分水嶺演算法,會將整幅圖分割成許多小區域,造成過分割的效果。為了解決這一問題,有以下三種解決方案:
最後,通過合並一些小區域再利用分水嶺演算法進行分割的效果如下圖所示:
如下圖所示,展示了通過分水嶺演算法分割血細胞的流程:
❻ 分水嶺演算法相關函數
棚含在OpenCV中,可以使用函數cv2.watershed()實御和枯現分水嶺演算法。在具體的實現過程中鎮洞,還需要藉助於形態學函數、距離變換函數cv2.distanceTransform()、cv2.connectedComponents()來完成圖像分割。
使用分水嶺演算法進行圖像分割時,基本的步驟為:
【例17.6】使用分水嶺演算法對一幅圖像進行分割
❼ 圖像分割——分水嶺演算法
姓名:謝意遠
學號:19021110366T
嵌牛導讀:圖像中的目標物體是連接在一起的,則分割起來很困難,分水嶺分割演算法經常用於處理這類問題,通常會取得比較好的效果。
嵌牛鼻子:圖像分割、分水嶺絕源演算法
嵌牛提問:分水嶺演算法具體有哪些步驟?
嵌牛正文:
一、綜述
分水嶺分割演算法把圖像看成一幅「地形圖」,其中亮度比較強的區域像素值較大,而比較暗的區域像素值較小,通過尋找「匯水盆地」和「分水嶺界限」,對圖像進行分割。而直接應用分水嶺分割演算法的效果往往並不好,如果在圖像中對前景對象和背景對象進行標注區別,再應用分水嶺演算法會取得較好的分割效果。基於標記控制的分水嶺分割方法有以下基本步驟:
1 綜述
分水嶺分割演算法把圖像看成一幅「地形圖」,其中亮度比較強的區域像素值較大,而比較暗的區域像素值較小,通過尋找「匯水盆地」和「分水嶺界限」,對圖像進行分割。直接應用分水嶺分割演算法的效果往往並不好,如果在圖像中對前景對象和背景對象進行標注區別,再應用分水嶺演算法會取得較好的分割效果。基於標記控制的分水嶺分割方法有以下基本步驟:
1.計算分割函數。圖像中較暗的區域是要分割的對象
2.計算前景標志。這些是並運態每個對象內部連接的斑點像素。
3.計算背景標志。這些是不屬於任何對象的要素。
4.修改分割函數,使其僅在前景和後景標記位置有極小值。
5.對修改後的分割函數做分水嶺變換計算。
使用MATLAB圖像處理工具箱
註:期間用到了很多圖像處理工具箱的函數,例如fspecial、imfilter、watershed、label2rgb、imopen、imclose、imreconstruct、imcomplement、imregionalmax、bwareaopen、graythresh和imimposemin函數等。
2 步驟
第一步:讀入彩色圖像,將其轉化成灰度圖像
clc; clear all; close all;
rgb = imread('pears.png');
if ndims(rgb) == 3
I = rgb2gray(rgb);
else
I = rgb;
end
figure('units', 'normalized', 'position', [0 0 1 1]);
第2步:將梯度幅值作為分割函數
使用Sobel邊緣運算元對圖像進行水平和垂直方向的濾波,然後求取模值,sobel運算元濾波後的圖像在邊界處會顯示比較大的值,在沒有邊界處的值會很小。
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(I,[]), title('灰度圖像')
subplot(1, 2, 2); imshow(gradmag,[]), title('梯度幅值圖像')
可否直接對梯度幅值圖像使用分水嶺演算法?
L = watershed(gradmag);
Lrgb = label2rgb(L);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(gradmag,[]), title('梯度幅值圖像')
subplot(1, 2, 2); imshow(Lrgb); title('梯度幅值做分水嶺變換')
直接使用梯度模值圖像進行分水嶺演算法得到的結果往往會存在過度分割的現悄指象。因此通常需要分別對前景對象和背景對象進行標記,以獲得更好的分割效果。
第3步:標記前景對象
有多種方法可以應用在這里來獲得前景標記,這些標記必須是前景對象內部的連接斑點像素。這個例子中,將使用形態學技術「基於開的重建」和「基於閉的重建」來清理圖像。這些操作將會在每個對象內部創建單位極大值,使得可以使用imregionalmax來定位。
開運算和閉運算:先腐蝕後膨脹稱為開;先膨脹後腐蝕稱為閉。開和閉這兩種運算可以除去比結構元素小的特定圖像細節,同時保證不產生全局幾何失真。開運算可以把比結構元素小的突刺濾掉,切斷細長搭接而起到分離作用;閉運算可以把比結構元素小的缺口或孔填充上,搭接短的間隔而起到連接作用。
開操作是腐蝕後膨脹,基於開的重建(基於重建的開操作)是腐蝕後進行形態學重建。下面比較這兩種方式。首先,用imopen做開操作。
se = strel('disk', 20);
Io = imopen(I, se);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(I, []); title('灰度圖像');
subplot(1, 2, 2); imshow(Io), title('圖像開操作')
接下來,通過腐蝕後重建來做基於開的重建計算。
Ie = imerode(I,se)
Iobr = imreconstruct(Ie,I);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(I, []); title('灰度圖像');
subplot(1, 2, 2); imshow(Iobr, []), title('基於開的重建圖像')
開操作後,接著進行閉操作,可以移除較暗的斑點和枝幹標記。對比常規的形態學閉操作和基於閉的重建操作。首先,使用imclose:
Ioc = imclose(Io, se);
Ic = inclose(I,se);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(I, []); title('灰度圖像');
subplot(2, 2, 2); imshow(Io, []); title('開操作圖像');
subplot(2, 2, 3); imshow(Ic, []); title('閉操作圖像');
subplot(2, 2, 4); imshow(Ioc, []), title('開閉操作');
現在使用imdilate,然後使用imreconstruct。注意必須對輸入圖像求補,對imreconstruct輸出圖像求補。IM2 = imcomplement(IM)計算圖像IM的補集。IM可以是二值圖像,或者RGB圖像。IM2與IM有著相同的數據類型和大小。
Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(I, []); title('灰度圖像');
subplot(2, 2, 2); imshow(Ioc, []); title('開閉操作');
subplot(2, 2, 3); imshow(Iobr, []); title('基於開的重建圖像');
subplot(2, 2, 4); imshow(Iobrcbr, []), title('基於閉的重建圖像');
通過比較Iobrcbr和loc可以看到,在移除小污點同時不影響對象全局形狀的應用下,基於重建的開閉操作要比標準的開閉重建更加有效。計算Iobrcbr的局部極大來得到更好的前景標記。
fgm = imregionalmax(Iobrcbr);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 3, 1); imshow(I, []); title('灰度圖像');
subplot(1, 3, 2); imshow(Iobrcbr, []); title('基於重建的開閉操作');
subplot(1, 3, 3); imshow(fgm, []); title('局部極大圖像');
為了幫助理解這個結果,疊加前景標記到原圖上。
It1 = rgb(:, :, 1);
It2 = rgb(:, :, 2);
It3 = rgb(:, :, 3);
It1(fgm) = 255; It2(fgm) = 0; It3(fgm) = 0;
I2 = cat(3, It1, It2, It3);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(rgb, []); title('原圖像');
subplot(2, 2, 2); imshow(Iobrcbr, []); title('基於重建的開閉操作');
subplot(2, 2, 3); imshow(fgm, []); title('局部極大圖像');
subplot(2, 2, 4); imshow(I2); title('局部極大疊加到原圖像');
注意到大多閉塞處和陰影對象沒有被標記,這就意味著這些對象在結果中將不會得到合理的分割。而且,一些對象的前景標記會一直到對象的邊緣。這就意味著應該清理標記斑點的邊緣,然後收縮它們。可以通過閉操作和腐蝕操作來完成。
se2 = strel(ones(5,5));
fgm2 = imclose(fgm, se2);
fgm3 = imerode(fgm2, se2);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(Iobrcbr, []); title('基於重建的開閉操作');
subplot(2, 2, 2); imshow(fgm, []); title('局部極大圖像');
subplot(2, 2, 3); imshow(fgm2, []); title('閉操作');
subplot(2, 2, 4); imshow(fgm3, []); title('腐蝕操作');
這個過程將會留下一些偏離的孤立像素,應該移除它們。可以使用bwareaopen,用來移除少於特定像素個數的斑點。BW2 = bwareaopen(BW,P)從二值圖像中移除所以少於P像素值的連通塊,得到另外的二值圖像BW2。
fgm4 = bwareaopen(fgm3, 20);
It1 = rgb(:, :, 1);
It2 = rgb(:, :, 2);
It3 = rgb(:, :, 3);
It1(fgm4) = 255; It2(fgm4) = 0; It3(fgm4) = 0;
I3 = cat(3, It1, It2, It3);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(I2, []); title('局部極大疊加到原圖像');
subplot(2, 2, 2); imshow(fgm3, []); title('閉腐蝕操作');
subplot(2, 2, 3); imshow(fgm4, []); title('去除小斑點操作');
subplot(2, 2, 4); imshow(I3, []); title('修改局部極大疊加到原圖像');
第4步:計算背景標記
現在,需要標記背景。在清理後的圖像Iobrcbr中,暗像素屬於背景,所以可以從閾值操作開始。
bw =im2bw(Iobrcbr, graythresh(Iobrcbr));
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(Iobrcbr, []); title('基於重建的開閉操作');
subplot(1, 2, 2); imshow(bw, []); title('閾值分割');
背景像素在黑色區域,但是理想情形下,不必要求背景標記太接近於要分割的對象邊緣。通過計算「骨架影響范圍」來「細化」背景,或者SKIZ,bw的前景。這個可以通過計算bw的距離變換的分水嶺變換來實現,然後尋找結果的分水嶺脊線(DL==0)。D = bwdist(BW)計算二值圖像BW的歐幾里得矩陣。對BW的每一個像素,距離變換指定像素和最近的BW非零像素的距離。bwdist默認使用歐幾里得距離公式。BW可以由任意維數,D與BW有同樣的大小。
D = bwdist(bw);
DL = watershed(D);
bgm = DL == 0;
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2, 2, 1); imshow(Iobrcbr, []); title('基於重建的開閉操作');
subplot(2, 2, 2); imshow(bw, []); title('閾值分割');
subplot(2, 2, 3); imshow(label2rgb(DL), []); title('分水嶺變換示意圖');
subplot(2, 2, 4); imshow(bgm, []); title('分水嶺變換脊線圖');
第5步:計算分割函數的分水嶺變換
函數imimposemin可以用來修改圖像,使其只是在特定的要求位置有局部極小。這里可以使用imimposemin來修改梯度幅值圖像,使其只在前景和後景標記像素有局部極小。
gradmag2 = imimposemin(gradmag, bgm | fgm4);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(2,2,1)imshow(bgm,[]);title('分水嶺變換脊線圖');
subplot(2, 2, 2); imshow(fgm4, []); title('前景標記');
subplot(2, 2, 3); imshow(gradmag, []); title('梯度幅值圖像');
subplot(2, 2, 4); imshow(gradmag2, []); title('修改梯度幅值圖像');
最後,可以做基於分水嶺的圖像分割計算。
第6步:查看結果
一個可視化技術是疊加前景標記、背景標記、分割對象邊界到初始圖像。可以使用膨脹來實現某些要求,比如對象邊界,更加清晰可見。對象邊界定位於L==0的位置。
It1 = rgb(:, :, 1);
It2 = rgb(:, :, 2);
It3 = rgb(:, :, 3);
fgm5 = imdilate(L == 0, ones(3, 3)) | bgm | fgm4;
It1(fgm5) = 255; It2(fgm5) = 0; It3(fgm5) = 0;
I4 = cat(3, It1, It2, It3);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(rgb, []); title('原圖像');
subplot(1, 2, 2); imshow(I4, []); title('標記和對象邊緣疊加到原圖像');
可視化說明了前景和後景標記如何影響結果。在幾個位置,部分的較暗對象與它們相鄰的較亮的鄰接對象相融合,這是因為受遮擋的對象沒有前景標記。
另外一個有用的可視化技術是將標記矩陣作為彩色圖像進行顯示。標記矩陣,比如通過watershed和bwlabel得到的,可以使用label2rgb轉換到真彩圖像來顯示。
Lrgb = label2rgb(L,'jet', 'w', 'shuffle');
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(rgb, []); title('原圖像');
subplot(1, 2, 2); imshow(Lrgb); title('彩色分水嶺標記矩陣');
可以使用透明度來疊加這個偽彩色標記矩陣在原亮度圖像上進行顯示。
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(rgb, []); title('原圖像');
subplot(1, 2, 2); imshow(rgb, []); hold on;
himage = imshow(Lrgb);
set(himage, 'AlphaData', 0.3);
title('標記矩陣疊加到原圖像');
❽ 圖像分割與提取
在圖像處理的過程中,經常需要從圖像中將前景對象作為目標圖像分割或者提取出來。
例如,在視頻監控中,觀測到的是固定背景下的視頻內容,而我們對背景本身並無興趣,感興趣的是背景中出現的車輛、行人或者其他對象。我們希望將這些對象從視頻中提取出來,而忽略那些沒有對象進入背景的視頻內容。
在前面的章節中,我們討論了如何使用諸如:
圖像分割是圖像處理過程中一種非常重要的操作。分水嶺演算法將圖像形象地比喻為地理學上的地形表面,實現圖像分割,該演算法非常有效。
岡薩雷斯在《數字圖像處理》一書中,對分水嶺演算法進行了細致的分析與介紹。OpenCV的官網建議學習者閱讀國立巴黎高等礦業學校圖像處理實驗室(TheImage Processing Laboratory of MINES ParisTech)的CMM(Centre forMathematical Morphology)網站上關於分水嶺演算法的介紹和動畫演示。
任何一幅灰度圖像,都可以被看作是地理學上的地形表面,灰度值高的區域可以被看成是山峰,灰度值低的區域可以被看成是山谷。如圖17-1所示,其中左圖是原始圖像,右圖是其對應的「地形表面」。
如果我們向每一個山谷中「灌注」不同顏色的水(這里采並純用了OpenCV官網的表述,岡薩雷斯將灌注表述為在山谷中打洞,然後讓水穿過洞以均勻的速率上升)。那麼,隨著水位不斷地升高,不敏盯同山谷的水就會匯集到一起。在這個過程中,為了防止不同山谷的水交匯,我們需要在水流可能匯合的地方構建堤壩。該過程將圖像分成兩個不同的集合:集水盆地和分水嶺線。我們構建的堤壩就是分水嶺線,也即對原始圖像的分割。這就是分水嶺演算法橋蔽和。
在圖17-2中,左圖是原始圖像,右圖是使用分水嶺演算法得到的圖像分割結果。在CMM的網站上不僅提供了該示例圖像,還提供了動畫演示效果
由於雜訊等因素的影響,採用上述基礎分水嶺演算法經常會得到過度分割的結果。過度分割會將圖像劃分為一個個稠密的獨立小塊,讓分割失去了意義。
為了改善圖像分割效果,人們提出了基於掩模的改進的分水嶺演算法。改進的分水嶺演算法允許用戶將他認為是同一個分割區域的部分標注出來(被標注的部分就稱為掩模)。這樣,分水嶺演算法在處理時,就會將標注的部分處理為同一個分割區域。大家可以嘗試使用微軟PowerPoint中的「刪除背景」功能,加深對此改進演算法的理解。
❾ Python視覺識別--OpenCV開閉操作\分水嶺演算法(九)
閉操作:
1、圖像形態學的重要操作之一,基於膨脹與腐蝕操作組合形成的
2、主要是應用在二值圖像分析中,灰度圖像也可以
3、開操作=膨脹+腐蝕,輸入圖像+結構元素
開操作:
1、圖像形態學的重要操作之一,基於膨脹與腐蝕操作組合形成的
2、主要是應用在二值圖像分析中,灰度圖像也可以
3、開操作=腐蝕+膨脹,輸入圖像+結構元素
開操作與閉操作的區別是:膨脹與腐蝕的順序
開操作作用:消除圖像中小的干擾區域
閉操作作用:填充小的封閉區域
❿ 怎麼使用opencv中watershed函數
opencv的watershed函數,需要事先給定標記圖像,即種子點。 然後按照分水嶺演算法對圖片進行分割。
種子點的提取是圖像處理中的難點,目前缺少較伍唯槐好的算腔友法。一般以圖片中的極山歲小值點或者極小值區域作為種子點。 這個需要相應的演算法實現。