Python--level set (水平集)和 chan-vese模型

2018年08月28日 10:51:54 GlassySky0816 阅读数:1604

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38784098/article/details/82144106

level set :https://www.zhihu.com/question/22608763?sort=created

https://blog.csdn.net/xiangyong58/article/details/11876019

chan-vese模型(公式推导):https://blog.csdn.net/zhangchen1003/article/details/48930377

水平集(CV模型)代码:

  1. import cv2
  2. from pylab import*
  3. Image = cv2.imread('02.jpg', 1) # 读入原图
  4. image = cv2.cvtColor(Image, cv2.COLOR_BGR2GRAY)
  5. img = np.array(image, dtype=np.float64) # 读入到np的array中,并转化浮点类型
  6. # 初始水平集函数
  7. IniLSF = np.ones((img.shape[0], img.shape[1]), img.dtype)
  8. IniLSF[300:320, 300:320] = -1
  9. IniLSF = -IniLSF
  10. # 画初始轮廓
  11. Image = cv2.cvtColor(Image, cv2.COLOR_BGR2RGB)
  12. plt.figure(1), plt.imshow(Image), plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
  13. plt.contour(IniLSF, [0], color='b', linewidth=2) # 画LSF=0处的等高线
  14. plt.draw(), plt.show(block=False)
  15. def mat_math(intput, str):
  16. output = intput
  17. for i in range(img.shape[0]):
  18. for j in range(img.shape[1]):
  19. if str == "atan":
  20. output[i, j] = math.atan(intput[i, j])
  21. if str == "sqrt":
  22. output[i, j] = math.sqrt(intput[i, j])
  23. return output
  24. # CV函数
  25. def CV(LSF, img, mu, nu, epison, step):
  26. Drc = (epison / math.pi) / (epison*epison + LSF*LSF)
  27. Hea = 0.5*(1 + (2 / math.pi)*mat_math(LSF/epison, "atan"))
  28. Iy, Ix = np.gradient(LSF)
  29. s = mat_math(Ix*Ix+Iy*Iy, "sqrt")
  30. Nx = Ix / (s+0.000001)
  31. Ny = Iy / (s+0.000001)
  32. Mxx, Nxx = np.gradient(Nx)
  33. Nyy, Myy = np.gradient(Ny)
  34. cur = Nxx + Nyy
  35. Length = nu*Drc*cur
  36. Lap = cv2.Laplacian(LSF, -1)
  37. Penalty = mu*(Lap - cur)
  38. s1 = Hea*img
  39. s2 = (1-Hea)*img
  40. s3 = 1-Hea
  41. C1 = s1.sum() / Hea.sum()
  42. C2 = s2.sum() / s3.sum()
  43. CVterm = Drc*(-1 * (img - C1)*(img - C1) + 1 * (img - C2)*(img - C2))
  44. LSF = LSF + step*(Length + Penalty + CVterm)
  45. # plt.imshow(s, cmap ='gray'),plt.show()
  46. return LSF
  47. # 模型参数
  48. mu = 1
  49. nu = 0.003 * 255 * 255
  50. num = 20
  51. epison = 1
  52. step = 0.1
  53. LSF = IniLSF
  54. for i in range(1, num):
  55. LSF = CV(LSF, img, mu, nu, epison, step) # 迭代
  56. if i % 1 == 0: # 显示分割轮廓
  57. plt.imshow(Image), plt.xticks([]), plt.yticks([])
  58. plt.contour(LSF, [0], colors='r', linewidth=2)
  59. plt.draw(), plt.show(block=False), plt.pause(0.01)

为什么上传图片这么麻烦。

一、文章参考

Chan T F, Vese L. Active contours without edges[J]. Image processing, IEEE transactions on, 2001, 10(2): 266-277.
1
二、公式推导过程

---------------------
作者:jonson_zc
来源:CSDN
原文:https://blog.csdn.net/zhangchen1003/article/details/48930377
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/shuimuqingyang/p/10860719.html

chan-vese模型相关推荐

  1. 【今日CV 计算机视觉论文速览 第133期】Wed, 19 Jun 2019

    今日CS.CV 计算机视觉论文速览 Wed, 19 Jun 2019 Totally 39 papers ?上期速览✈更多精彩请移步主页 ?????? ?小尝试:?留言 邮箱地址及时获悉论文速览 In ...

  2. Vuforia开发完全指南

    作者:Mac玩家 原文:Vuforia开发完全指南(二)--- 不懂编程也能做AR程序 链接:https://www.jianshu.com/p/5871935aba02 來源:简书 简书著作权归作者 ...

  3. 荔枝hsv空间图像分割程序matlab,基于稀疏场水平集的荔枝图像分割算法_毛亮

    第4期毛亮等:基于稀疏场水平集的荔枝图像分割算法349 从表中可知,本文算法在计算速度上接近标准模糊C 均值聚类算法,优于水平集方法.因此,与水平集方法相比,本文算法有着更好的分割性能和实时性. 4结 ...

  4. unity怎么制作云飘动_Unity3D 实用技巧 - 分享实时飘动动画插件

    其实在游戏制作里面,实现角色头发衣服飘带等实时飘动,有很多的物理模拟插件,无论是通过骨骼驱动模拟,还是布料的的物理模拟,都有很多现成的插件能快速实现.小编针对实现实时飘动动画插件进行了简单的资源收集调 ...

  5. ITK:多相Chan和Vese稀疏场水平集分割

    ITK:多相Chan和Vese稀疏场水平集分割 内容提要 C++实现代码 内容提要 多相Chan和Vese稀疏场水平集分割 C++实现代码 #include "itkScalarChanAn ...

  6. ITK:单相Chan和Vese稀疏场水平集分割

    ITK:单相Chan和Vese稀疏场水平集分割 内容提要 C++实现代码 内容提要 单相Chan和Vese稀疏场水平集分割 C++实现代码 #include "itkScalarChanAn ...

  7. ITK:单相Chan和Vese密集域水平集分割

    ITK:单相Chan和Vese密集域水平集分割 内容提要 C++实现代码 内容提要 单相Chan和Vese密集域水平集分割 C++实现代码 #include "itkScalarChanAn ...

  8. Unity官方代言角色Unity Chan(Unity娘/优妮蒂/ユニティちゃん)模型免费下载

    Unity Chan Unity Chan就是下面这个角色啦 游戏引擎研发商Unity Technologies日本分公司Unity Technologie Japan日前宣布,自2014年4月7日起 ...

  9. Go SCP 通信顺序进程模型chan通道

    目录 channer定义 写入 chan 读取 chan 关闭 chan 示例 Go语言实现了两种并发模型,一种是我们熟悉的线程与锁并发模型,他是基于共享内存实现的.另一种是Go语言中倡导使用的SCP ...

  10. [家里蹲大学数学杂志]第054期图像分割中的无边缘活动轮廓模型

    $\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 4.4 节的详细论述. $\bf 关键词$: 图像分割; 活动轮廓模型; matlab 编程 1 模型的建立 在 ...

最新文章

  1. MySQL面试题 | 附答案解析(十五)
  2. Hi,欢迎加入量子位AI社群
  3. 这个医疗AI准确率突破天际,招来了铺天盖地的质疑
  4. 修改 IIS 队列长度
  5. java 程序的初始化顺序是怎样的?
  6. 140_Power BIPower Pivot之降维展示同类型比较
  7. 【架构设计】Android:配置式金字塔架构
  8. c语言switch的作用域,你真的懂switch吗?聊聊switch语句中的块级作用域
  9. MySQL-----pymysql模块
  10. 让LYNC 2010 登录OCS 2007 R2
  11. python 正则表达式匹配数字或者小数点_Python 正则表达式 匹配小数
  12. 常用sql server 语句
  13. Ubuntu 14.04 安装xvid编码器
  14. 微信小程序 js部分语法
  15. Android自定义九宫格图案解锁
  16. python两个表格相同数据筛选_如何将多个表格中数据筛选汇总在一个表格里?
  17. Python基础教程目录
  18. opus 源码下载 以及 相关资料
  19. 【重要】黑苹果安装之 BIOS 设置篇
  20. 【精】iOS知识树,知识点(包括对象、Block、消息转发、GCD、运行时、runloop、动画、Push、KVO、tableview,UIViewController、提交AppStore)

热门文章

  1. web页面导航栏自适应问题
  2. 罗技G500 拆机更换微动
  3. 「镁客·请讲」exands卢国鸣:商业WIFI,看似很简单实际非常难
  4. 《奥多比 PS CS4 官方中文版》(Adobe Photoshop CS4 Extended)繁体中文/简体中文/韩文
  5. 图解TCP/IP 学习笔记一
  6. Java实验2 猜数字游戏
  7. kpca故障诊断matlab,PCA_kpca 利用pca和 对CSTR过程进行故障诊断,包括7个噪声及开环和串 制 matlab 263万源代码下载- www.pudn.com...
  8. 现实迷途 第十五章 损兵折将
  9. 2021重庆江北中学高考成绩查询,重庆江北中学
  10. RTT之硬件定时器使用