資源簡介
用MATLAB實現GAC模型來分割圖像,里面有注釋 可以看懂可以運行

代碼片段和文件信息
function?newim?=?createimage(?imuFlag?)
%%%?子函數:createimage()實現當前零水平集(演化曲線)在原圖上的顯示
%%%?????????和嵌入函數u的重新初始化
%%%?參數說明:
%%%?im?????-?原始圖像
%%%?u??????-?當前水平集函數
%%%?Flag???-?是否進行重新初始化的標志,0:否;1:是
%%%?newim??-?返回的當前零水平集(紅色曲線)疊加在原圖上的新圖像
[nnynnx]=size(im);
curvIndex=zeros(5*nnx*nny2);
curvImag=zeros([nnynnx]);
num=0;
%%-?標記當前零水平集
for?i?=?2?:?nnx?-?1
????for?j?=?2?:?nny?-?1
????????if?u(ij)<0??&?(u(i+1j)>0?|?u(i-1j)>0?|?u(ij+1)>0?|?u(ij-1)>0)
????????????num=num+1;?curvIndex(num1)=i;curvIndex(num2)=j;
????????????curvImag(ij)=255;
????????end
????end
end
%%-?在原圖上顯示當前零水平集
tempim?=?im;
tempim(curvImag>0)?=?255;
newim(?:?:?1?)?=?tempim;
tempim(curvImag>0)?=?0;
newim(?:?:?2?)?=?tempim;
newim(?:?:?3?)?=?tempim;
newim?=?uint8(?newim?);
%%-?如果Flag=1,則重新初始化u
if?Flag
????new_u?=?zeros(nnxnny);
????dist=zeros(1num);
????for?j=1:nny
????????for?i=1:nnx
????????????for?k=1:num
????????????????dist(k)=sqrt((i-curvIndex(k1)).^2+(j-curvIndex(k2)).^2);
????????????end
????????????new_u(ij)=min(dist);
????????????if?u(ij)<0
????????????????new_u(ij)=-new_u(ij);
????????????end
????????end
????end
????u=new_u;
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-04-09?19:48??GAC-MATLAB\
?????文件??????120054??2014-04-01?16:39??GAC-MATLAB\3.bmp
?????文件????????1259??2014-04-01?16:39??GAC-MATLAB\createimage.m
?????文件????????4076??2014-04-03?18:07??GAC-MATLAB\GAC_upwind.asv
?????文件????????4076??2014-04-04?16:02??GAC-MATLAB\GAC_upwind.m
?????文件????????1300??2014-04-04?13:03??GAC-MATLAB\gauss.asv
?????文件????????1152??2014-04-01?16:39??GAC-MATLAB\gauss.m
評論
共有 條評論