Seam carving 学习笔记
今天首次接触了图像编辑中的seam carving知识,感觉挺神奇的。虽然我自己可能理解的不是很深刻,但是记录下来,总是好的。
seam carving直接翻译过来是“线裁剪”的意思。它的主要用途是对图像进行缩放。不同于传统的按比例缩放图像的方式,seam carving的是内容感知的,它充分考虑了图像中像素的重要性,通过删除或增加seam线来实现图像尺寸的调整。它在缩放不是特别大的情况下,能够很好的保护图像中的显著物体。
具体来说,seam carving定义了穿过整幅图像的像素线(即seam),它是由图像中最低能量的像素组成的。如左下图中画出了一个横向的seam和一个纵向的seam。

接下来需要说明的是,seam的形成。seam是有图像中,最不重要的像素组成的。因此,首先要对图像中的像素点的重要性进行定义。给定一幅n x m的图像I,它的能量函数定义为:

在一幅图像中,某一像素点的能量越大,则它也越重要。换言之,像素的能量越小,它在图像中就越不重要。seam线(或缝合线)就是由图像中那些不重要的像素点组成的。
对于上述n x m 的图像I, 一个竖直的seam线定义如下:

这个公式乍看起来很复杂,其实际的意义很容易理解。式中i表示第 i 行,即像素的纵坐标, x(i)表示第 i 行中的某个像素的横坐标值。也就是说,一个竖直的seam线包含 n 行(图像是 n 行乘 m 列的),每行中取出一个像素点。而后面的约束表示的意思是相邻两行的像素点之间是相邻的(八连通领域),这样限制的作用是,去掉seam线之后,画面看起来不会出现很跳跃的感觉,直观表示如下图所示,(i,j)的前一点只能来自(i-1,j-1),(i-1,j),(i-1,j+1)中的某一点。

对于给定的能量函数 e( I ),可以将缝合线的代价函数定义:

当前要选择的缝合线即为代价函数值最小的缝合线。设当前状态下最优的缝合线为 S*:

应当利用动态规划(Dynamic Programming)来求解寻找最低代价的、竖直的、八连通的缝合线上所有像素点的问题。设将当前图像的累积最小能量存储在 M 矩阵里,而将图像的能量函数值存储在 NRG 矩阵里。然后把能量函数 NRG 的首行作为 M 的首行初始值。把当前行的能量函数值加上 M [i 1][ j 1]、M [i 1][ j]和M [i 1][ j1]中的最小值作为 M 下一行的值。通过存储以前计算的结果,可以对缝合线进行多次计算。下面以计算竖直缝合线为例来说明该算法。可以利用下式来填充 M 来计算最优缝合线:

Seam carving 学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- lintcode 中等题:Min stack 最小栈
题目 带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 解题 可以定义 ...
- lintcode:Coins in a Line 硬币排成线
题目 硬币排成线 有 n 个硬币排成一条线.两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止.拿到最后一枚硬币的人获胜. 请判定 第一个玩家 是输还是赢? 样例 n = 1, 返回 ...
- Matlab程序 转C++/Opencv基于Mat 不可不知的17个函数
1.matlab中的imread相当于OpenCV中的cvLoadImage(imageName, CV_LOAD_IAMGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR): ...
- *[hackerrank]Lexicographic paths
https://www.hackerrank.com/contests/w9/challenges/lexicographic-steps 这题还是折腾很久的.题目意思相当于,比如有两个1两个0,那么 ...
- KDE/QT与GNOME/GTK比较
转自:http://linux.chinaunix.net/bbs/thread-1125240-1-1.html 虽然在商业方面存在竞争,GNOME与KDE两大阵营的开发者关系并没有变得更糟,相反他 ...
- 在浏览器控制台输出内容 console.log(string);
在浏览器控制台中写如数据 1添加 <script type="text/javascript">djConfig = { isDebug: true };< ...
- Filter过滤非法字符
示例:定义一个Filter,用于用户发言中出现的“晕”字,即如果没有这个字则允许发言,如果有这个字则不允许发言并提示错误. CharForm.jsp <%@ page language=&quo ...
- xargs的- n1参数
起因在对一堆*.tar.gz文件解压缩时,发现tar xvfz *.tar.gz不管用,一查,原来是tar xvfz *.tar.gz会被shell给拆成tar xvfz a.tar.gz b.tar ...
- taglist
http://blog.csdn.net/duguteng/article/details/7412652 这两天看到网上有将vim 改造成功能强大的IDE的blog,突然心血来潮,亲身经历了一下. ...
- Linux下jvm、tomcat、mysql、log4j优化配置
小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...