简介
前段时间研究单帧超分辨率实现,发现了一个智能缩放算法,虽然和我要做的不是一个东西,但是感觉挺不错,实现记录下来了。 参考论文:Seam Carving for Content-Aware Image Resizing
实现背景
在普通的缩放过程中,不管是普通临近插值缩放、双线性插值或者其他复杂一些的插值算法,在图像进行横向、纵向非等比例插值时候,都会不可不免的出现图像主题形变之类情况,导致观测主体缩放后,效果不理想。 这里换了一种思路,通过图像最小能量曲线,动态规划方式进行图像插值,使得图像在插值后,尽可能保持主体基本一致,结果图像能有更好感官效果。
具体实现
基本原理
1、缩小放大时候,找到图像横向/纵向最小能量曲线(梯度/散度在该曲线上最小)。 2、删除掉该曲线,图像曲线左右两边像素往中间靠,删除曲线位置,图像靠近像素加权融合。
实现流程
1、计算图像横向纵向梯度和图像。 2、新建一张能量图和坐标偏移图。 3、从梯度图像第一行开始,比较每个像素和它左右像素梯度大小,对应能量图坐标叠加三个中最小梯度像素,对应坐标偏移图,根据最小像素位置,分别填入0,1,2。 4、从上到下,遍历完整个梯度图之后,能量线总能量则叠加存入到了能量图最后一行中,坐标偏移图中保存了能量线在当前位置对应往下一个位置的坐标偏移量。 5、遍历能量图最后一行,找到能量值最小的坐标,该点坐标及为最小能量线起始坐标。 6、从最小能量线起始坐标开始,根据坐标偏移图向上查询,进而得到最小能量线。 7、删除原图像最小能量线对应像素,并将剩下图像进行融合。 8、将处理后图像作为原图像,继续下一轮最小能量线操作,得到最后结果图像。
结果显示
首先看下基本效果如下: 原始图像:
普通纵向压缩后图像:
论文算法纵向压缩后图像:
可以看到,本文算法压缩之后的图片,对比普通压缩结果,效果要好不少,不过需要注意下,删除最小能量线之后,这里只是用了简单左右加权的简单方式融合,所以结果图像看起来会有些异常, 有兴趣的小伙伴再继续拓展吧。
具体代码下载:http://download.csdn.net/detail/u011630458/9731175