这个算法是交互式图像分割算法的改进,方法原理和上一篇写的很像,也需要用户标记出一些背景和前景的像素点种子,最大的改进之处在于它建图是的顶点不再是基于像素,而是基于一个个小的区域,我们可以采用分水岭算法和k-meas算法等方法先对图像进行预处理,将图像分割成很多的小区域,然后以这些小区域为顶点,相邻区域建立边,构建一个图,再采用s/t算法进行分割。这篇论文提出的方法主要分为两步:1、对象标记;2、边界编辑。

    原理:

同理,也是要最小化以下的能量函数,为给顶点i分配标签xi的代价,为相邻顶点i,j分配标签xi,xj的代价:

计算E1

先用k-meas算法将用户已标记的背景和前景分别聚类成64簇(用表示),对于一个没有标签的顶点,我们计算它在RGB域的值C(i)到的最小距离,对比其C(i)到的最小距离,选择两者之中最小值所对应的标签作为自己的标签。

计算E2

E2 为两个相邻顶点分配不同标签时的代价,两个顶点相似度越大,则E2越大,则其边为目标边界的可能性越小。

         

  步骤:

1、先采用分水岭算法对图像进行预处理,这样处理以后,我们后面进行的步骤就不再是基于像素点,而是基于超像素点来进行了,这也是这篇文章提出的方法一大亮点。

2、计算E1和E2

3、采用交互式图像分割中的方法来建图

4、采用s/t算法分割

5、边界编辑,优化分割边界

 优点:采用超像素,大大减小了处理的顶点的数目,加快了计算速度

缺点:采用超像素后,误差会增大,会丢失一些边界的详细信息;需要人工交互,手动初始化对分割的结果影响很大

转载自:http://blog.csdn.net/u012671431/article/details/17302337

8月8号到8月18号,根据Lazysnapping的论文和一些资料,做了算法实现 但是前期处理和LS不同, 其实不算真正实现LS。

有人用通俗易懂的话这样解释:

首先,当一张图被导入到Lazy snapping中时,软件会自动采用watershed对该图进行处理。接下来,用户通过划线,确定F和B。如果从像素点的角度来看,一旦画了一条线,则这条线经过的像素点被称为“种子点”,这些“种子点”所涉及到的区域被称为“种子区域”。借助这些“种子区域”将图片分为F 和B 。利用Graph Cut优化算法,图片上所有区域会被赋予惟一的属性,不属于“前景区域”就一定会属于“背景区域”。
在经过处理后的图片中,相邻的区域连接在一起。而接下来Graph Cut优化算法要做的,就是尝试将每个非“种子区域”分别与“前景区域”(或“背景区域”)之间的通路“打断”。如果全部通路都可以被打断,则软件猜测该区域不属于F,则可能属于B。也就将我们所需要的前景的大致轮廓勾勒了出来。
Graph Cut 优化的准则,考虑了每一个区域的颜色与种子区域之间的颜色相似性,颜色越像“前景区域”就越可能被分在前景。同时它也考虑了相邻区域的颜色差别,颜色差别越大这两个区域越可能被分开。这个优化问题可以用图论中极大流(极小割)的方法很快解决。

实质上就是图像里面将问题转换成最大流最小割问题。 主要是将前景设置为sink 也就是终点, 背景设置为source 源。中间点 根据它们离前景和背景的每个像素点的颜色差值 来设置流入和流出权重,离前景越近 流入的权重越多 流出的权重越少。每条边的值 是与颜色差成反比,两个点颜色越不相似,值越小,也就是容积越小。 这个是GrabCut的本质 因为LS的关键是将Grabcut和预处理进行了很好的结合,将速度提升了。而这一步,我是没做的。

傻乎乎的写完之后 ,才弄清楚。。。。哎 回头有空用opencv里的资源再实现一次。

基本框架来自于 http://lzhj.me/archives/93 的源码,thx

他的和原文的差别主要在 GraphCut的预处理 是通过降低像素来进行,原文用了watershed来初分割。

其次,原文不是用平均距离来计算 该点到F其他点的距离,而是将F中的点进行64的kmeans聚类,然后寻找其中最小的距离点。

再次,E2的计算方法不同。

然后改进根据gimp的开源代码进行了改进 http://graphics.ethz.ch/teaching/former/imagesynthesis_06/miniprojects/p2/index.html

lzhj的程序 分割 出来会有许多零碎区域,但是如果在计算E1时,加入kmeans聚类,则 这样的 区域会减少很多。

而对E2的修正 能够 很好的提升结果。

采用一些小小的技巧,可以使得算法不一定要背景笔 也能得到目标分割

算法前期处理改进可以有两个方面,meanshift 和watershed。

前期处理测试watershed floodfilled 但不知为啥 效果不佳,估计哪里出了点小错。没继续修改了,最后加入Meanshift结合金字塔算法对图像进行平滑,平滑前用floodfilled算法 很难获取比较大的区域,平滑后,如果目标不是很复杂,是可以获取整个目标区域的。

将用gimp测试图跑的结果放上来:

为了速度快,我将图压缩了,所以会有一点锯齿。

如果没有这个需求 可以跑出很精致的图的。

转载自:http://blog.csdn.net/lynnandwei/article/details/8064374

算法学习之lazy Snapping相关推荐

  1. 微软抠图软件Lazy Snapping背后的故事 - 网易学院·教程

    微软抠图软件Lazy Snapping背后的故事 http://tech.163.com/school · 2005-07-14 10:38:06 · "Lazy Snapping是一款'懒 ...

  2. 机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点

    文章目录 KNN(K nearest neighbors) K值的选择和影响 k取值偏小 k取值偏大 样本点距离的计算方式 闵可夫斯基距离 曼哈顿距离 欧几里得距离 切比雪夫距离 余弦距离 决策函数的 ...

  3. 拿下斯坦福和剑桥双offer,00后的算法学习之路

    董文馨,00后,精通英语,西班牙语.斯坦福大学计算机系和剑桥大学双Offer,秋季将进入斯坦福大学学习. 10岁开始在国外上学:12岁学Scratch: 13岁学HTML & CSS: 14岁 ...

  4. 好久没有看到这么有建设性德文章,由衷地赞叹《知其所以然地学习(以算法学习为例)》-By 刘未鹏(pongba)

    知其所以然地学习(以算法学习为例) By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) Updated(2008-7-24):更新见正文部分,有标注 ...

  5. 原创 | 初学者友好!最全算法学习资源汇总(附链接)

    在计算机发展飞速的今天,也许有人会问,"今天计算机这么快,算法还重要吗?"其实永远不会有太快的计算机,因为我们总会想出新的应用.虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快 ...

  6. 基本算法学习(一)之希尔排序(JS)

    参考书: 严蔚敏-数据结构 希尔排序(Shell's Sort) 希尔排序又称"缩小增量排序",归属于插入排序一类,简单来说,和我们的插入排序比,它更快. 奇妙的记忆点: 内排序( ...

  7. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  8. Surf算法学习心得(一)——算法原理

    Surf算法学习心得(一)--算法原理 写在前面的话: Surf算法是对Sift算法的一种改进,主要是在算法的执行效率上,比Sift算法来讲运行更快!由于我也是初学者,刚刚才开始研究这个算法,然而网上 ...

  9. 算法学习:后缀自动机

    [前置知识] AC自动机(没有什么关联,但是看懂了会对后缀自动机有不同的理解) [解决问题] 各种子串的问题 [算法学习] 学习后缀自动机的过程中,看到了许多相关性质和证明,但是奈何才疏学浅(lan) ...

最新文章

  1. Cell子刊:中科院遗传发育所周俭民组发现特异靶向病原菌致病力的植物天然产物并阐明作用机制
  2. Python学习--工具介绍
  3. boost::filesystem::path::stem的用法测试程序
  4. DHTMLX 前端框架 建立你的一个应用程序教程(二)--设置布局
  5. JEECG企业微云快速二次开发平台-新版本首页展示
  6. 腾讯将被“重锤”?腾讯股价应声下跌逾5%!造谣原博主销号跑路
  7. Redis服务器被劫持风波
  8. 写你自己 android 多通道打包工具 可以包libs和.so文件
  9. mysql 不同的记录_Mysql通过一个限制条件,查出多条不同的记录
  10. matcaffe编译与测试
  11. 【交易技术前沿】浅析基金业推进数据治理的阻碍及应对建议
  12. html设置字体为雅黑,html怎么设置字体为宋体 html怎么设置字体为微软雅黑?
  13. 实战分享:如何通过黑帽SEO快速获取庆余年这类电视剧流量
  14. 新浪滚动新闻的json数据获取页面
  15. Marked.js让您的文档编辑更加轻松自如!
  16. 数据结构初步(十二)- 插入排序与希尔排序超详细图解分析
  17. oracle中begin end的作用,如何在SQL * Plus中使用begin/end运行Oracle查询?
  18. oracle新书 罗敏_Oracle Acs资深顾问罗敏 老罗技术核心感悟:分表还是分区?
  19. webservice报错Message part refundRequest was not recognized. (Does it exist in service WSDL?)
  20. TECH数字中国2021技术年会 | 神州控股、神州信息、神州数码集团合力打造 “神州信创云”

热门文章

  1. 为什么delete 可以回滚 truncate不可以_茶叶为什么可以煮,却不可以长泡
  2. 欧姆龙CJ2M 与海利普变频器通讯 协议宏方式可直接拿来实用了,欧姆龙CJ2M PLC与变频器协议宏通讯
  3. 神州数码防火墙IPSec配置
  4. 神州数码交换机RIP基础配置
  5. 基于SSM的共享单车管理系统 JAVA
  6. 【数据挖掘】DBSCAN算法简析
  7. php ssdb配置,SSDB 配置
  8. win10 安装 ros2.0---ROS Bouncy
  9. INA169NA/3K 德州TI 2.7V 至 60V、440kHz 可变增益电流感应放大器
  10. 除了 P 站,程序员在摸鱼时还喜欢上这些网站...