根据论文Avidan, hai, and Ariel Shamir. "Seam carving for content-aware image resizing." ACM SIGGRAPH 200,实现了考虑像素间差异化的缩放算法.该方法是通过计算图像能量来确定图像中重要的内容,再利用动态规划查找能量最小的像素线,通过不断删除或复制这些低能量线,从而实现图像的缩放。我在原论文介绍的方法根据自己对于数字图像处理的一些经验,进行了一些小的改进和变动,现将整体流程介绍如下。
一、计算图像能量
图像能量的计算是为了衡量图像的重要程度,根据论文和平常的经验,图像的边缘的重要程度自然要高一些,而梯度就是找边缘的凭据,于是计算出图像的梯度(包括水平和竖直方向)两个方向,由此定义为“图像能量”:
(1)
这里选择的算子为prewitt,对比下图,可以看出prewitt的结果会相对更优一些。
1.0 Prewitt算子结果
1.1 sobel算子结果
二、计算能量最小的路径线
算出每个点的能量图后,需要找到一条总能量最小的路线,将路线删除/沿该路线进行扩展,这里需要借助动态规划的思想,定义从第一行到第i行j列的像素点总能量最小的值为:
(2)
我所设计的算法可以在计算的同时记录每个像素点来自上一行的哪一列像素点,最终计算完全部的图片后,从最后一行找能量最小的点,再倒着遍历得到一条总能量最小的路线,计算量减小,算法效率可以得到提升,如下图所示。

本文介绍了对Avidan等人的‘SeamCarving’算法的改进,主要涉及图像能量计算、动态规划找寻最小能量路径、缝隙删除与缝补策略。选择了Prewitt算子计算图像梯度,优化了能量最小路径的计算方式,考虑像素删除的影响,并采用插值平均处理缝隙,避免了局部像素复制过多的问题,提高了图像缩放的自然度和质量。
最低0.47元/天 解锁文章
14万+

被折叠的 条评论
为什么被折叠?



