日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割

發(fā)布時間:2023/12/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

實例1:使用主動輪廓(snake)將圖像分割成前景和背景

實例2:基于邊緣‘edge’方法的主動輪廓圖像分割

實例3:基于區(qū)域‘Chan-Vese’方法的主動輪廓圖像分割(可交互式創(chuàng)建多邊形遮罩)

本例程的配套完整源碼和圖片素材下載

主動輪廓方法,也稱為?snake,是一種迭代式區(qū)域增長圖像分割算法。使用主動輪廓算法,您可以在圖像上指定初始曲線然后使用?activecontour?函數使曲線向對象邊界演化。

activecontour函數

BW?= activecontour(A,mask,n)?

使用主動輪廓將圖像?A?分割成前景(對象)和背景區(qū)域mask?參數是一個指定主動輪廓初始狀態(tài)的二值圖像。mask?中對象區(qū)域(白色)的邊界定義輪廓演化的初始輪廓位置,以用于分割圖像輸出圖像?BW?是一個二值圖像,前景為白色(邏輯 true),背景為黑色(邏輯 false)。要獲得更快、更準確的分割結果,請指定靠近所需對象邊界的初始輪廓位置。通過最多迭代?n?次的輪廓演化來分割圖像。

實例1:使用主動輪廓(snake)將圖像分割成前景和背景

%%使用主動輪廓分割圖像%% close all; %關閉當前所有圖形窗口,清除工作空間所有變量 clear all; clc; %%讀取并顯示灰度圖像 I = imread('coins.png');%讀取圖像 figure,imshow(I)%顯示圖像 title('Original Image')%添加標簽 %%指定關注對象周圍的初始輪廓。顯示該輪廓 mask = zeros(size(I));%初始化一個與I圖像一樣大小的值都為0的圖像mask %mask(Y1:Y2,X1:X2),(X1,Y1)為矩形左上角,(X1,Y2)為矩形右下角 mask(25:end-25,25:end-25) = 1;%調整mask區(qū)域,x軸為(25~X_max_size-25),y軸為(25~Y_max_size-25)的區(qū)域賦值為1(純白) figure,imshow(mask)%顯示mask圖像 title('Initial Contour Location')%添加標簽 %%使用默認方法的300次迭代對圖像進行分割 bw = activecontour(I,mask,300);%調用activecontour函數 figure, imshow(bw);%顯示分割圖像 title('Segmented Image');%添加標簽

? ? ??? ? ? ?? ? ??? ? ? ? ??

? ? ? ? ? ? ? ?輸入初始圖像I? ? ? ? ? ? ? ? ? ? 設定初始輪廓圖像mask? ? ? ? ?默認100次迭代分割結果圖像bw? ? 300次迭代分割結果圖像bw

實例2:基于邊緣‘edge’方法的主動輪廓圖像分割

%%使用主動輪廓和交互式掩膜分割圖像%% close all;%關閉當前所有圖形窗口,清除工作空間所有變量 clear all; clc; I = imread('toyobjects.png');%讀取圖像 imshow(I)%顯示圖像 hold on title('Original Image');%添加標簽 %%指定靠近要分割對象的初始輪廓位置 mask = false(size(I));%初始化一個與I圖像一樣大小的值都為0的圖像mask %mask(Y1:Y2,X1:X2),(X1,Y1)為矩形左上角,(X1,Y2)為矩形右下角 mask(50:150,40:170) = true;%調整mask區(qū)域,x軸為(40~170),y軸為(50~150)的區(qū)域賦值為1(純白) %figure,imshow(mask)%顯示mask圖像 visboundaries(mask,'Color','b');%在原始圖像上以藍色顯示初始輪廓 %%使用'edge'方法分割圖像并設置200次迭代 bw = activecontour(I, mask, 200, 'edge'); %%在原始圖像上以紅色顯示最終輪廓 visboundaries(bw,'Color','r'); title('Initial contour (blue) and final contour (red)');%添加標簽 %%顯示分割圖像 figure, imshow(bw) title('Segmented Image');%添加標簽

??????

? ? ? ? ? ? ?輸入初始圖像I? ? ? ? ? ? ? ? ? ? ? ? ? 初始輪廓圖像mask? ? ? ? ? ??‘edge’方法分割結果輪廓圖像? ? ? ? ? ? ? ? 分割二值圖像bw

實例3:基于區(qū)域‘Chan-Vese’方法的主動輪廓圖像分割(可交互式創(chuàng)建多邊形遮罩)

%平滑因子 'SmoothFactor' -分割區(qū)域的邊界的平滑或規(guī)律性的程度 1.5 %收縮偏置'ContractionBias'-輪廓向外增長或向內收縮的趨勢 %正值使輪廓向內收縮(收縮)。負值使輪廓線向外擴展(擴展)。 0.4 I = imread('toyobjects.png');%讀取圖像 imshow(I)%顯示 title('Original Image')%添加標簽 str = 'Click to select initial contour location. Double-click to confirm and proceed.'; title(str,'Color','b','FontSize',12); disp(sprintf('\nNote: Click close to object boundaries for more accurate result.')) %%交互式地指定初始輪廓 %鼠標左鍵每單擊一處確定選取輪廓多邊形一個頂點,雙擊完成選取 mask = roipoly;%用鼠標畫多邊形的函數 figure, imshow(mask)%顯示輪廓 title('Initial MASK');%添加標簽 %%分割圖像,設置最大迭代200次 maxIterations = 200; bw = activecontour(I, mask, maxIterations, 'Chan-Vese');%調用activecontour函數 figure, imshow(bw)%顯示分割圖像 title('Segmented Image');%添加標簽

? ????? ??

? ? ? ? ? ? ? ?輸入初始圖像I? ? ? ? ? ? ? ? ? 交互式地指定初始輪廓圖像mask? ? ? ? ? ?初始輪廓mask? ? ???‘Chan-Vese’方法分割結果圖像bw

注:

1、分割的輸入圖像I需要指定為灰度圖像

2、分割開始演化的初始輪廓mask,需指定為與I相同大小的二值圖像

3、在分割演化過程中執(zhí)行的最大迭代次數n,指定為數值標量。如果當前迭代中的輪廓位置與最近5次迭代的輪廓位置之一相同,或者達到最大迭代次數,則activecontour停止活動輪廓的演化。如果初始輪廓位置(由掩模中的區(qū)域邊界指定)遠離目標邊界,則可能需要指定較高的n值來實現(xiàn)預期的分割結果。

4、主動輪廓的方法主要有‘Chan-Vese'?(default默認) (基于區(qū)域的能量模型)和?'edge'(基于邊緣的模型)兩種

5輸出分割圖像bw,作為與輸入圖像I相同大小的二值圖像返回。前景為白色(邏輯為真),背景為黑色(邏輯為假)。

?

參考文獻:

[1] T. F. Chan, L. A. Vese,?Active contours without edges. IEEE Transactions on Image Processing, Volume 10, Issue 2, pp. 266-277, 2001

[2] V. Caselles, R. Kimmel, G. Sapiro,?Geodesic active contours. International Journal of Computer Vision, Volume 22, Issue 1, pp. 61-79, 1997.

[3] R. T. Whitaker,?A level-set approach to 3d reconstruction from range data. International Journal of Computer Vision, Volume 29, Issue 3, pp.203-231, 1998.

總結

以上是生活随笔為你收集整理的Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。