日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

图像分割(Image Segmentation)

發(fā)布時(shí)間:2025/7/25 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像分割(Image Segmentation) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

圖像分割(Image Segmentation)

作者:王先榮
前言
??? 圖像分割指的是將數(shù)字圖像細(xì)分為多個(gè)圖像子區(qū)域的過程,在OpenCv中實(shí)現(xiàn)了三種跟圖像分割相關(guān)的算法,它們分別是:分水嶺分割算法、金字塔分割算法以及均值漂移分割算法。它們的使用過程都很簡單,下面的文章權(quán)且用于記錄,并使該系列保持完整吧。
分水嶺分割算法
??? 分水嶺分割算法需要您或者先前算法提供標(biāo)記,該標(biāo)記用于指定哪些大致區(qū)域是目標(biāo),哪些大致區(qū)域是背景等等;分水嶺分割算法的分割效果嚴(yán)重依賴于提供的標(biāo)記。OpenCv中的函數(shù)cvWatershed實(shí)現(xiàn)了該算法,函數(shù)定義如下:

void cvWatershed(const CvArr * image, CvArr * markers)

其中:image為8為三通道的彩色圖像;
????? markers是單通道整型圖像,它用不同的正整數(shù)來標(biāo)記不同的區(qū)域,下面的代碼演示了如果響應(yīng)鼠標(biāo)事件,并生成標(biāo)記圖像。

//當(dāng)鼠標(biāo)按下并在源圖像上移動(dòng)時(shí),在源圖像上繪制分割線條
private void pbSource_MouseMove(object sender, MouseEventArgs e)
{
//如果按下了左鍵
if (e.Button == MouseButtons.Left)
{
if (previousMouseLocation.X >= 0 && previousMouseLocation.Y >= 0)
{
Point p1
= new Point((int)(previousMouseLocation.X * xScale), (int)(previousMouseLocation.Y * yScale));
Point p2
= new Point((int)(e.Location.X * xScale), (int)(e.Location.Y * yScale));
LineSegment2D ls
= new LineSegment2D(p1, p2);
int thickness = (int)(LineWidth * xScale);
imageSourceClone.Draw(ls,
new Bgr(255d, 255d, 255d), thickness);
pbSource.Image
= imageSourceClone.Bitmap;
imageMarkers.Draw(ls,
new Gray(drawCount), thickness);
}
previousMouseLocation
= e.Location;
}
}

//當(dāng)松開鼠標(biāo)左鍵時(shí),將繪圖的前一位置設(shè)置為(-1,-1)
private void pbSource_MouseUp(object sender, MouseEventArgs e)
{
previousMouseLocation
= new Point(-1, -1);
drawCount
++;
}

?

?

??????? 您可以用類似下面的方式來使用分水嶺算法:

使用分水嶺分割算法

?

?

金字塔分割算法
??? 金字塔分割算法由cvPrySegmentation所實(shí)現(xiàn),該函數(shù)的使用很簡單;需要注意的是圖像的尺寸以及金字塔的層數(shù),圖像的寬度和高度必須能被2整除,能夠被2整除的次數(shù)決定了金字塔的最大層數(shù)。下面的代碼演示了如果校驗(yàn)金字塔層數(shù):

校驗(yàn)金字塔分割的金字塔層數(shù)

?

?

使用金字塔分割的示例代碼如下:

使用金字塔分割算法

?

?

均值漂移分割算法
??? 均值漂移分割算法由cvPryMeanShiftFiltering所實(shí)現(xiàn),均值漂移分割的金字塔層數(shù)只能介于[1,7]之間,您可以用類似下面的代碼來使用它:

使用均值漂移分割算法

?

?

??? 函數(shù)cvPryMeanShiftFiltering在EmguCv中沒有實(shí)現(xiàn),我們可以用下面的方式來使用:

調(diào)用均值漂移分割

?

?

分割效果及性能對(duì)比
??? 上述三種分割算法的效果如何呢?下面我們以它們的默認(rèn)參數(shù),對(duì)一幅2272x1704大小的圖像進(jìn)行分割。得到的結(jié)果如下所示:

圖1 分水嶺分割算法(左圖白色的線條用于標(biāo)記區(qū)域)

圖2 金字塔分割算法

圖3 均值漂移分割算法
??? 從上面我們可以看出:
??? (1)分水嶺分割算法的分割效果效果最好,均值漂移分割算法次之,而金字塔分割算法的效果最差;
??? (2)均值漂移分割算法效率最高,分水嶺分割算法接近于均值漂移算法,金字塔分割算法需要很長的時(shí)間。
??? 值得注意的是分水嶺算法對(duì)標(biāo)記很敏感,需要仔細(xì)而認(rèn)真的繪制。

?

??? 本文的完整代碼如下:

本文完整代碼

?

?

感謝您耐心看完本文,希望對(duì)您有所幫助。

總結(jié)

以上是生活随笔為你收集整理的图像分割(Image Segmentation)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。