首先,我见了一个图像处理讨论群,感兴趣的同学们可以加一下,图像处理讨论社:397489395

基于水平集的图像分割算法算是一种进化的snake算法,是一种隐式函数的方法,目前代码以及原理还处于深究阶段,有些问题没有搞懂,代码摘自 https://blog.csdn.net/hjimce/article/details/45586727;欢迎大家一同探讨图像处理问题

function seg = local_AC_MS(Img, mask_init, rad, alpha, num_it, epsilon )%Img为灰度图像;mask_init为初始曲线的一个mask,曲线上的点坐标在mask中的值为1;%rad为卷积半径;alpha和epsilon为公式中参数, num_it为迭代次数phi0 = -double(bwdist(mask_init)-bwdist(1-mask_init)+im2double(mask_init));  %计算有限距离场,将显示曲线转化为水平集函数phi = phi0;B0 = ones(2*rad+1, 2*rad+1); % 卷积核mask
KI = conv2(Img, B0, 'same');  %对Img图像进行卷积
KONE = conv2(ones(size(Img), B0, 'same'));%计算使曲线进行演化的公式
for ii = 1:num_itmask = 0.5*(1+2/pi*atan(phi./epsilon));% 计算封闭曲线的内外部I = Img.*mask;%区分曲线的内外部分temp1 = conv2(mask,B0,'same');temp2 = conv2(I, B0, 'same');c1 = temp2./(temp1);c2 = (KI-temp2)./(KONE-temp1);A1 = temp1;A2 = conv2(1-mask,B0,'same');D = (A1.*A2+eps);  %eps为浮点相对精度term1 = (A2-A1)./D;term2 = (A2.*c1.^2-A1.*c2.^2)./D;term3 = (A2.*c1-A1.*c2)./D;dataForce = conv2(term1.*Dirac2(phi,epsilon),B0,'same').*Img.*Img + conv2(term2.*Dirac2(phi,epsilon),B0,'same')-2.*Img.*conv2(term3.*Dirac2(phi,epsilon),B0,'same');dataForce = dataForce/max(abs(dataForce(:)))curvature = curvature_central(phi);%计算水平集的散度dphi = Dirac2(phi, epsilon).*(-dataForce + alpha*curvature);dt = 1/(max(abs(dphi(:))) + eps);%时间步长,该参数可认为设置为恒定参数phi = phi + dt.*dphi;%曲线演化公式,即完成曲线的迭代%绘制曲线,(x,y)的值为0的点即为曲线上的点if(mod(ii,10) == 0)showCurveAndPhi(Img,phi,ii);end
endseg = (phi>=0);%为了保证水平集的光滑性,需要对水平集进行重新计算,保证水平集的梯度模为1
function D = sussman(D, dt)
%前后差分
a = D - shiftR(D);
b = shiftL(D)-D;
c = D - shiftD(D);
d = shiftU(D) - D;a_p = a; a_n = a;
b_p = b; b_n = b;
c_p = c; c_n = c;
d_p = d; d_n = d;a_p(a<0) = 0;
a_n(a>0) = 0;
b_p(b<0) = 0;
b_n(b>0) = 0;
c_p(c<0) = 0;
c_n(c>0) = 0;
d_p(d<0) = 0;
d_n(d>0) = 0;dD = zreos(size(D));
D_neg_ind = find(D<0);
D_pos_ind = find(D>0);
dD(D_pos_ind) = sqrt(max(a_p(D_pos_ind).^2, b_n(D_pos_ind).^2) + max(c_p(D_pos_ind).^2, d_n(D_pos_ind).^2))-1;
dD(D_neg_ind) = sqrt(max(a_n(D_neg_ind).^2, b_p(D_neg_ind).^2) + max(c_n(D_neg_ind).^2, d_p(D_neg_ind).^2))-1;
dt .* sussman_sign(D) .* dD;function shift = shiftD(M)
shiftR(M')';function shift = shiftL(M)
[M(:,2:size(M,2)) M(:,size(M,2))];function shift = shiftR(M)
[M(:,1) M(:,1:size(M,2)-1)];function shift = shiftU(M)
shiftL(M');function S = sussman_sign(D)
S = D ./ sqrt(D.^2 + 1);%水平集提取函数,也就是把隐式函数转换为显示函数,所得简单一点,就是提取值为0的等高线
function showCurveAndPhi(I, phi, i)
imshow(I, 'initialmagnification',200,'displayrange',[]);
hold on; contour(phi, [0,0], 'y', 'LineWidth', 2);
hold off; title([num2str(i) 'Iterations']); drawnow;%散度计算
function k = curvature_central(u)
[ux,uy] = gradient(u);
normDu = sqrt(ux.^2 + uy.^2 + 1e-10);
Nx = ux./normDu;
Ny = uy./normDu;
[nxx, junk] = gradient(Nx);
[junk, nyy] = gradient(Ny);
k = nxx+nyy;

LevalSet水平集分割算法 matlab程序源码相关推荐

  1. matlab ocr识别算法,OCR算法之matlab程序 - 源码下载|图形图象|图形/文字识别|源代码 - 源码中国...

    压缩包 : 51622441ocr算法之matlab程序.rar 列表 OCR算法之matlab程序\CS585 Fall 1998 Project One by Stanislav Rost.htm ...

  2. C#:实现快速划分/快速分割算法(附完整源码)

    C#:实现快速划分/快速分割算法 int QuickPartition(int[] array, int left, int right, bool isAscend = true) {

  3. 人工势场算法 Matlab版源码

    人工势场算法,用于路径规划 main.m程序 %初始化车的参数 Xo=[0 0];%起点位置 k=15;%计算引力需要的增益系数 K=0;%初始化 m=5;%计算斥力的增益系数,都是自己设定的. Po ...

  4. 【老生谈算法】基于matlab的运动目标识别与跟踪系统设计与算法原理及程序源码——目标识别算法

    基于matlab的运动目标识别与跟踪系统设计与算法原理 大家好,今天给大家介绍基于matlab的运动目标的监测与跟踪系统设计与原理. 视频图像分析主要是对运动图像序列进行分析处理,它通常涉及到运动检测 ...

  5. 【老生谈算法】matlab实现自动画玫瑰程序源码——画玫瑰

    matlab自动画玫瑰程序源码 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab自动画玫瑰程序源码.docx 2. ...

  6. 【老生谈算法】matlab绘制心形曲线的程序源码——心形曲线

    matlab绘制心形曲线的程序源码 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab绘制心形曲线的程序源码.doc ...

  7. 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求:亮度保持的夜景图像直方图均衡算法 matlab程序 我是大四学生,最近在做一个论文,头疼死了,不知道这个论文的程序怎么写.这里是matlab论坛 我想 ...

  8. java毕业设计——基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码)——蚁群算法路由选择可视化动态模拟

    基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现,文章末尾附有本毕业设计的 ...

  9. 龙格库塔法解微分方程组的matlab程序,MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc...

    MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc MATLAB实例源码教程龙格库塔法求解微分方程组源代码实例题目用经典 Runge-Kutta方法求下列一阶微分方程组的近似解y1 ...

最新文章

  1. 【LeetCode】142 - Linked List Cycle II
  2. ab plc编程软件_三菱PLC原装和高仿怎么区分?PLC仿真软件和编程软件一样吗?
  3. 女朋友让我给她讲讲什么是比特币,她想买两个。
  4. 软考经过 之 天助自助者
  5. 内核驱动模块Makfle
  6. 线性时间复杂度求数组中第K大数
  7. eclipse如何部署到tomcat上的
  8. quill变html转化,将Quill Delta转换为HTML
  9. java 读取project_java project 和 java web project 获取路径问题
  10. Seesion工作原理
  11. 应用机器学习(一):聚类分析
  12. 【bzoj3298】[USACO 2011Open]cow checkers(博弈论)
  13. linux系统调整中文字符,Linux字符模式下中文显示
  14. IDEA整合SSM框架 applicationcontext in module file is included in 5 contexts
  15. 使用jemalloc优化java_C++性能优化(十) —— JeMalloc
  16. 现在才知道,菊花茶可不能随便喝!
  17. 软考 - 系统架构设计师(软件架构设计)
  18. html2d动画,HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
  19. python樱花树代码_Python画樱花树
  20. 瑞企体育系统源码,赛事直播系统,足球直播程序,体育赛事足球系统功能介绍

热门文章

  1. cnc加工中心保养表_CNC保养检查记录表
  2. 获取windows系统时间
  3. pwm频率输出不对解决思路
  4. FTTB+NAT+DHCP+pppoe+CBAC+*** client+Authentication AAA
  5. 微信小程序 数据在缓存中的存储和获取
  6. 前端生成海报的 N 种方案和优劣对比
  7. 计算机组成与系统结构指导,计算机组成与系统结构实验指导书
  8. OpenFlow学习笔记(一)——OpenFlow概要和OpenFlow1.0
  9. 【erlang】【rebar依赖】添加eredis依赖
  10. Java飞书三方网站对接