Seam Carving for Content-Aware Image Resizing

Shai Avidan 找到了一种能在保证图像中重要的内容不受破坏的前提下实现图像resize的一种方法,称为Seam-Carving。这种方法通过定义图像的能量函数,然后找到能量最小的“缝”(seam),再对这“缝”进行操作来实现图像的缩放。它能保证图像的重要部分不受损害,从而保证了改变尺寸后的图像仍具有较好的质量。

下面以I表示图像,e(I)表示图像I的能量函数。一张灰度图的能量函数,可以定义如下:在这里插入图片描述
实际上,它是灰度图的梯度的模,反映了图像灰度变化的速率。对于1张灰度图,如果它的某个位置上的灰度(即该处像素的值)与周围相比变化很小,说明它不会是两个不同场景的边界,那么它对反映整个图像的信息不重要。

能量函数的计算类似于深度学习中的卷积过程。用一种性能较好的梯度模算子——索贝尔算子(Sobel)计算像素的梯度模。它的x方向算子和y方向算子如图1所示。在这里插入图片描述
假设下图为1张灰度图(记为I)的像素值分布。
在这里插入图片描述
像素p (i, j)的梯度沿x轴方向和y轴方向的分量分别记为Gx (i, j)和Gy (i, j),它的梯度模记为e (i, j)。下面以计算像素p (2, 3)的梯度模为例说明应用Sobel算子计算像素梯度模的具体过程:首先,使Sobel算子的x方向算子的中心元素与像素p (2, 3)重合,则x方向算子中有值的6个元素与像素p (2, 3)周围的6个像素相重合,把这6组重合的数相乘再相加,即为Gx (2,3), 具体算式如下:
Gx (2,3) =1X24+2X45+1X46+ (-1) X23+(-2) X42+ (-1) X35=18

把x方向算子换为y方向算子,进行与上面同样的操作,就可得Gy (2, 3),具体算式如下:Gy (2,3) = (-1) X24+ (-2) X25十(-1) X23+1X46+2X46+1X35=76.
则像素p (2, 3)的能量e (2, 3)为: e (2,3) =|Gx(2,3)| +|Gy (2, 3) |=115

当计算出一张灰度图的所有像素的能量后,把这些能量用与灰度图大小相同的矩阵存储起来,使灰度图中像素的位置与它的能量在能量矩阵中的位置相同这样的矩阵称为能量矩阵。

Seam:A seam is a connected path of low energy pixels in an image. 从缝的定义中可以看到,从图像中删除1条缝仅仅对局部产生影响, 即只在被删除的缝处产生明显的变化,图像的其他部分不受损害。一条缝上的所有像素的能量之和定义为它的代价。一张图像的所有垂直缝中代价最小的缝称为垂直最优缝。对图像压缩来说,找到垂直(水平)最优缝把它删除, 是把图像中最不重要的部分删除掉(to remove unnoticeable pixels that blend with their surroundings),这样对图像的质量影响最小。

用动态规划算法寻找最优缝
设M (i, j)表示从图像的第1行到像素p (i, j)的最小代价缝的代价,根据缝的定义,从图像的第一行到像素p (i, j)的所有缝必过像素p (i-1, j-1)、p (i-1, j)和p (i-1, j+1)中之一,而且,这些缝的代价的差别只出现在他们到达像素p (i, j)之前,因此, M (i, j)应等于M (i-1, j-1)、M (i-1, j)和M (i-1, j+1)中的最小值与像素p(i, j)的能量之和。
第1步:计算能量矩阵G,并把矩阵M初始化为G;
第2步:从M的第二行开始,由前一行的值来计算这一行的值,同时在标记矩阵R中作标记;
第3步:找到矩阵M最后一行中最小的元素,从这元素逆向追踪出最优缝的路径。

通过动态规划寻找到的最优缝中的像素右边的像素依次向左移动一个像素位置,就可实现图像宽度减1,在压缩后的图像中继续找最优缝,再把它删除就可实现图像宽度减2,依次进行800次就实现原图像的宽度减800了。按照这样的过程处理图像,得到的结果见下图。

Input Image

Input   Inage

Output Image

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值