复现论文Seam carving for content-aware image resizing

根据论文Avidan, hai, and Ariel Shamir. "Seam carving for content-aware image resizing." ACM SIGGRAPH 200,实现了考虑像素间差异化的缩放算法.该方法是通过计算图像能量来确定图像中重要的内容,再利用动态规划查找能量最小的像素线,通过不断删除或复制这些低能量线,从而实现图像的缩放。我在原论文介绍的方法根据自己对于数字图像处理的一些经验,进行了一些小的改进和变动,现将整体流程介绍如下。

一、计算图像能量

图像能量的计算是为了衡量图像的重要程度,根据论文和平常的经验,图像的边缘的重要程度自然要高一些,而梯度就是找边缘的凭据,于是计算出图像的梯度(包括水平和竖直方向)两个方向,由此定义为“图像能量”:

(1)

这里选择的算子为prewitt,对比下图,可以看出prewitt的结果会相对更优一些。

复现论文Seam carving for content-aware image resizing_第1张图片

1.0 Prewitt算子结果

复现论文Seam carving for content-aware image resizing_第2张图片

1.1 sobel算子结果

二、计算能量最小的路径线

算出每个点的能量图后,需要找到一条总能量最小的路线,将路线删除/沿该路线进行扩展,这里需要借助动态规划的思想,定义从第一行到第i行j列的像素点总能量最小的值为:

(2)

我所设计的算法可以在计算的同时记录每个像素点来自上一行的哪一列像素点,最终计算完全部的图片后,从最后一行找能量最小的点,再倒着遍历得到一条总能量最小的路线,计算量减小,算法效率可以得到提升,如下图所示。

复现论文Seam carving for content-aware image resizing_第3张图片

但是仅是这样计算出的路线并不完全能够实现优秀的放缩效果,对于删除像素而言不仅要考虑当前图像的能量情况还要考虑删除像素带来的影响。如下图所示,以上方公式(2)计算得到的能量线会导致后期处理出现断层的效果。

复现论文Seam carving for content-aware image resizing_第4张图片

为此,需要考虑路线方向不同的影响,即该像素的最短路径是从上一行的哪个像素经过的,如下图所示:

复现论文Seam carving for content-aware image resizing_第5张图片
复现论文Seam carving for content-aware image resizing_第6张图片
复现论文Seam carving for content-aware image resizing_第7张图片

复现论文Seam carving for content-aware image resizing_第8张图片

三、删除缝隙

对于要缩小的图像,则需要删除找到的缝隙,这里我基于原论文和自己处理图像的一些经验,进行了一些改动,并非单纯删除整列像素,而是进行对于缝隙左右的像素进行插值平均,从而使像素过渡更自然,并且不会损失图片的完整度。可以看到下方的上图杯子损失了一部分,而下图则较好的保留了这些特征,并且右图杯子底座的连接也比左图更圆润。

复现论文Seam carving for content-aware image resizing_第9张图片
复现论文Seam carving for content-aware image resizing_第10张图片

四、缝补缝隙

缝补缝隙时若仍进行循环每次循环寻找一条缝隙会导致大多数找的都是同一条或者相近的一条缝隙,出现局部像素复制过多的情况,如下图所示:

复现论文Seam carving for content-aware image resizing_第11张图片

针对此,需要将找到的缝隙删除,再找其他缝隙,将找到的多条缝隙记录下来之后,一次进行缝补,就可以得到比较好的效果,如下图所示。

复现论文Seam carving for content-aware image resizing_第12张图片

在代码的编写上,我为了避免删除缝隙时将原图全部删除(即扩大为原图两倍及以上),设定原尺寸的⅓为一次统计的缝隙数上限。

缝补缝隙时,将缝隙的像素值和缝隙右侧一个像素的像素值都通过线性插值的方式进行修改。

五、总结

综上,即为我的算法的全部流程,具体内容可参见代码,创新之处总结如下:

1、对于能量图的计算比较了Sobel算子和 Prewitt算子的处理情况,最终选择Prewitt算子进行计算。

2、对于最小能量缝隙的计算考虑了删除像素对于周围像素的影响,采用forward前向计算方式,考虑了删除像素的影响,改进了计算公式,并且在计算时通过统一的公式计算而非利用空间滤波算子计算三次整张图,提高了性能。

3、删除缝隙时并非单纯删除整列像素,而是对缝隙左右的像素进行插值平均,从而使像素过渡更自然,并且不会损失图片的完整度。

4、缝补缝隙时先通过循环和删除已选的缝隙得到若干不重叠的缝隙,再对其进行缝补扩充,从而避免局部像素的重复,使像素看起来自然均匀。

在处理一个300KB的361x368大小的图片时,算法的效率如下所示:

复现论文Seam carving for content-aware image resizing_第13张图片

下面为处理的几张示例图片,其中上方为原图,下方为处理后的图片。

复现论文Seam carving for content-aware image resizing_第14张图片

5.1 361x368缩小为300x300

复现论文Seam carving for content-aware image resizing_第15张图片

5.2 361x368扩大为400x400

复现论文Seam carving for content-aware image resizing_第16张图片
复现论文Seam carving for content-aware image resizing_第17张图片

5.3 480x320变形为200x500

复现论文Seam carving for content-aware image resizing_第18张图片
复现论文Seam carving for content-aware image resizing_第19张图片

5.4 788x599变形为400x400

你可能感兴趣的:(图像处理,计算机视觉,人工智能)