数字图像处理-图像分割:Snake主动轮廓模型 Matlab代码及运行结果
来源:互联网 发布:空铁列车 知乎 编辑:程序博客网 时间:2024/05/08 03:05
% =========================================================================% Snakes:Active Contour Models% =========================================================================% By gujinjin 2012/12/10-12 Sunny% 基于KASS等的论文思想% 参考文献:% [1] KASS etc.Snakes:Active Contour Models% [2] CSDN 博客 - Author:乐不思蜀Tone% [3] Ritwik Kumar(Harvard University),D.Kroon(Twente University)的程序% [4] 《数学建模与数学实验》% ------clc;clf;clear all;% =========================================================================% 获取手动取点坐标% =========================================================================% 读取显示图像%I = imread('Coronary_MPR.jpg');I = imread('test1.png');% 转化为双精度型%I = im2double(I); % 若为彩色,转化为灰度%if(size(I,3)==3), I=rgb2gray(I); endfigure(1),imshow(I);%---------------------------% 高斯滤波%---------------------------sigma=1;% 创建特定形式的二维高斯滤波器HH = fspecial('gaussian',ceil(3*sigma), sigma);% 对图像进行高斯滤波,返回和I等大小矩阵Igs = filter2(H,I,'same');%---------------------------% 获取Snake的点坐标%---------------------------figure(2),imshow(Igs);x=[];y=[];c=1;N=100; %定义取点个数c,上限N% 获取User手动取点的坐标% [x,y]=getptswhile c<N [xi,yi,button]=ginput(1); % 获取坐标向量 x=[x xi]; y=[y yi]; hold on % text(xi,yi,'o','FontSize',10,'Color','red'); plot(xi,yi,'ro'); % 若为右击,则停止循环 if(button==3), break; end c=c+1;end% 将第一个点复制到矩阵最后,构成Snake环xy = [x;y];c=c+1;xy(:,c)=xy(:,1);% 样条曲线差值t=1:c;ts = 1:0.1:c;xys = spline(t,xy,ts);xs = xys(1,:);ys = xys(2,:);% 样条差值效果hold ontemp=plot(x(1),y(1),'ro',xs,ys,'b.');legend(temp,'原点','插值点');% =========================================================================% Snakes算法实现部分% =========================================================================NIter =1000; % 迭代次数alpha=0.2; beta=0.2; gamma = 1; kappa = 0.1;wl = 0; we=0.4; wt=0;[row col] = size(Igs);% 图像力-线函数Eline = Igs;% 图像力-边函数[gx,gy]=gradient(Igs);Eedge = -1*sqrt((gx.*gx+gy.*gy));% 图像力-终点函数% 卷积是为了求解偏导数,而离散点的偏导即差分求解m1 = [-1 1]; m2 = [-1;1];m3 = [1 -2 1]; m4 = [1;-2;1];m5 = [1 -1;-1 1];cx = conv2(Igs,m1,'same');cy = conv2(Igs,m2,'same');cxx = conv2(Igs,m3,'same');cyy = conv2(Igs,m4,'same');cxy = conv2(Igs,m5,'same');for i = 1:row for j= 1:col Eterm(i,j) = (cyy(i,j)*cx(i,j)*cx(i,j) -2 *cxy(i,j)*cx(i,j)*cy(i,j) + cxx(i,j)*cy(i,j)*cy(i,j))/((1+cx(i,j)*cx(i,j) + cy(i,j)*cy(i,j))^1.5); endend%figure(3),imshow(Eterm);%figure(4),imshow(abs(Eedge));% 外部力 Eext = Eimage + EconEext = wl*Eline + we*Eedge + wt*Eterm;% 计算梯度[fx,fy]=gradient(Eext);xs=xs';ys=ys';[m n] = size(xs);[mm nn] = size(fx);% 计算五对角状矩阵% 附录: 公式(14) b(i)表示vi系数(i=i-2 到 i+2)b(1)=beta;b(2)=-(alpha + 4*beta);b(3)=(2*alpha + 6 *beta);b(4)=b(2);b(5)=b(1);A=b(1)*circshift(eye(m),2);A=A+b(2)*circshift(eye(m),1);A=A+b(3)*circshift(eye(m),0);A=A+b(4)*circshift(eye(m),-1);A=A+b(5)*circshift(eye(m),-2);% 计算矩阵的逆[L U] = lu(A + gamma.* eye(m));Ainv = inv(U) * inv(L); % =========================================================================% 画图部分% =========================================================================%text(10,10,'+','FontName','Time','FontSize',20,'Color','red');% 迭代计算figure(3)for i=1:NIter; ssx = gamma*xs - kappa*interp2(fx,xs,ys); ssy = gamma*ys - kappa*interp2(fy,xs,ys); % 计算snake的新位置 xs = Ainv * ssx; ys = Ainv * ssy; % 显示snake的新位置 imshow(I); hold on; plot([xs; xs(1)], [ys; ys(1)], 'r-'); hold off; pause(0.001) end
5 1
- 数字图像处理-图像分割:Snake主动轮廓模型 Matlab代码及运行结果
- snake主动轮廓模型
- 图像分割之----活动轮廓模型之Snake模型简介
- 图像分割-活动轮廓模型之Snake模型简介
- 《Matlab图像处理》part1 Snakes:Active Contour Models 主动轮廓模型
- 主动轮廓线模型Snake模型简介&openCV中cvSnakeImage()函数代码分析
- 图像分割之(五)活动轮廓模型之Snake模型简介
- 图像分割之(五)活动轮廓模型之Snake模型简介
- 图像分割之(五)活动轮廓模型之Snake模型简介
- 图像分割之(五)活动轮廓模型之Snake模型简介
- 图像分割之(五)活动轮廓模型之Snake模型简介
- 图像分割之(五)活动轮廓模型之Snake模型简介
- [转]-图像分割之(五)活动轮廓模型之Snake模型简介
- Active Contour Models 主动轮廓模型(snake模型)
- MATLAB数字图像处理 图像分割技术 迭代法
- 数字图像处理:9.图像分割
- 数字图像处理06(图像分割)
- 图像分割指标及Matlab代码实现
- Android开发及测试工具
- 二叉查找树
- 爱美眉aimeimei.pw整站下载、2G图片、上万数据
- vim编辑器格式设置
- Matlab数据归一化
- 数字图像处理-图像分割:Snake主动轮廓模型 Matlab代码及运行结果
- 使用socket简单实现接受服务器信息
- 利用php soap实现web service
- Java的JDBC数据库连接池实现方法
- 为何中国民营企业家热衷海外移民?
- Android网络编程
- Maven java通过jdbc连接Hive 执行HQL语句
- Linux的hadoop部署
- malloc()参数为0的情况