0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Seam Carving-一种很强的图像缩放算法

jt_rfid5 来源:新机器视觉 作者:Mine268 2022-11-12 10:37 次阅读

Seam Carving

一种很强的图像缩放算法

0简介

我们在排版的时候可能会遇到一些尴尬的情况。一张图片原本是竖着的,而你希望把它当作一张宽屏图片,于是你只好对它进行拉伸。

抚子的形状瞬间变得不可描述起来。有没有什么办法,能不改变前景抚子的形象,只是拉伸背景的天空呢?也许你会想到万能的神经网络。但早在神经网络火遍大江南北之前,就有一种方法流行于世间:Seam Carving。它可以做到这样:

完美符合我们的要求!那么这个仿佛魔法一样的Seam Carving是如何工作的呢?

01什么是图像

我们这里将所谈论到的图像限定为二维的像素图象,而不是矢量图象或者三维的体素组成的“图像”之类的东西。对于一幅图像,它的每个像素拥有一个整数坐标,同时拥有一个颜色,后者以 RGB 的形式表现。

当人看到图像的时候,主要是通过识别图像当中的边缘来分辨图像中的物体的,这提示我们边缘的信息对于寻找图像中的主要物体有着重要的作用。如果我们在图像缩放的时候能够尽量不影响到这些像素,那么就有可能做到在保证图像中主要物体的比例不变的情况下拉伸背景。就像这样

由此我们可以得出结论:通过依次删除图像中若干条自上而下和自左而右的像素通路,就可以达到“缩放”的目的。就自上而下的像素通路来说,这样的通路宽度为 1,从图像的第一行连接到图像的最后一行,在每一行中只占据一个像素,相邻行的像素的水平坐标相差在 -1 到 1 之间。删除这样的自上而下的像素保证了图像的宽度减一的同时不会出现宽度不同的行;自左而右的像素通路也是同理。

图中的红线分别是一条垂直通路和水平通路。如何找到这样的像素通路,穿过尽可能少的重要物体?为此,我们引入了一个概念:“能量”。

02能量,又是能量

能量在这里起到的作用是表征像素的重要程度。先从图像的基本元素的能量——像素的能量说起。对于单个像素,我们可以定义其能量形式为:

971f687a-61b1-11ed-8abf-dac502259ad0.png

其中,字母I表示像素灰度值,第一个偏导项就表示了色彩在这个像素变化的剧烈程度。如果我们将 RGB 颜色的像素的颜色看作一个三维向量,那么其能量形式也会是一个三维向量,这对于算法的后续实现是不利的。在实现中,我们可以用灰度标量代替 RGB 三维向量参与运算,因为人眼对灰度的敏感度远高于色彩。公式看起来不太直观,来看一个例子:

与人物有关的部分,细节比较多,对应的颜色变化也更明显,能量也就越高。相比之下,背景部分比如天空的颜色变化不太明显,能量普遍比较低。对应到上图中,可能找到的垂直能量通路就是左侧的天空,删除之后并不会影响鱼和人物的部分。

对于任意的一条自上而下的像素通路,该通路的能量就是该通路中所有像素的能量的和。

03利用能量进行分割

前文说到,像素的能量表征了像素的重要程度,那么像素通路的能量就表征了像素通路中所有像素的总体重要程度,也就表征了该通路穿过的重要物体的多寡,也就表征了删除这条像素通路对图像中重要物体的影响程度的大小。删除一条能量最小的像素通路对图像中重要物体的影响是最小的。

对于这样一张图像,如果对其进行缩放,我们希望保留不同颜色间的分界线,使其形状和比例尽可能地不改变。即这几条分界线的重要性应该尽可能地高。根据我们关于能量的定义,分界线附近的像素的能量显著地高于色块中的像素。如果要被删去的像素通路主要通过色块区域,那么分界线的形状就可以得到保留了。

那么现在的问题就变成了如何寻找一条能量最小的像素通路,这里以自上而下的像素通路说明寻找这样的像素通路的方式。这就转换为了一个经典的动态规划问题,形式化的转移方程如下:

我们记 dpi 为从图像的第一行到第 i 行的第 j 个像素的通路中能量最小的通路的能量 e 以及该像素在该通路上的前驱 p。第 i 行的第 j 个像素的能量为 e(i,j)。那么

97acb4a0-61b1-11ed-8abf-dac502259ad0.png

这个公式可能还是有点太过抽象了。由于通路一定是连通的,也就是某一个像素只可能与三个像素位于同一条通路内,分别是它的左上、正上和右上。

97bcc00c-61b1-11ed-8abf-dac502259ad0.png

如果我们分别知道它左上、正上和右上的三个像素所在的通路的最低能量,只需要选出能量最低的一条并加上自己的能量,就构成了当前像素的最短能量通路。换言之,这其实是一种归纳法:

·第一行每个像素的累积能量是自己的能量值

·除此之外每一行每个像素的累计能量是上一行的三个相邻像素中最低的累积能量加上自己的能量值

·最后一行的累计能量最低的就代表了一条能量最短的通路

当然,这里还有一个小小的扩展:现在有一个希望缩减的图像,其宽高分别需要缩减 dw 和 dh 个像素。这就意味着这张图象需要删去 dw 和 dh 条能量最小的自上而下的通路和自左而右的通路。我们可以选择先删除自左而右的通路,再删除自上而下的通路,反之亦可。但是为了追求删除通路的总能量和最小——这样全部删除掉的像素对重要物体的影响最小,我们还可以优化这个删除顺序。

这个问题也可以用动态规划的方法解决。不妨记 dq[i] [j] 为原图像在水平缩减 i 个像素长度、垂直缩减 j 个像素长度的过程中所有删去的像素通路的能量值和的最小值,由于宽高分别为 x 和 y 的图像在这种缩放方式下只有可能通过 宽高为 (x+1,y) 或 (x,y+1) 的图像缩减而来,所以有

97d5280e-61b1-11ed-8abf-dac502259ad0.png

有了上面的经验,读者能否自己理解这个转移方程的含义呢?

最后再来看一个利用Seam Carving方法处理的例子:

很多细节得到了保留,比起直接拉伸来说要好太多了。

04结语

本文介绍的这种Seam Carving方法由Avidan等人发明,并发表在2007年的Siggraph中,目前已经有非常广泛的应用,在Photoshop等软件中都可以找到它的身影。比起目前主流的神经网络方法来说,它要简单的多,并且有很大的改良余地,最终效果也不遑多让。有兴趣的同学也可以进一步的研究或者和我讨论。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4562

    浏览量

    92166
  • Seam
    +关注

    关注

    0

    文章

    4

    浏览量

    5684
  • 图像缩放
    +关注

    关注

    0

    文章

    8

    浏览量

    3321

原文标题:【光电智造】Seam Carving - 一种很强的图像缩放算法

文章出处:【微信号:今日光电,微信公众号:今日光电】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    图像识别算法都有哪些方法

    图像识别算法是计算机视觉领域的核心任务之,它涉及到从图像中提取特征并进行分类、识别和分析的过程。随着深度学习技术的不断发展,图像识别
    的头像 发表于 07-16 11:14 4193次阅读

    图像识别算法的提升有哪些

    方法。 数据增强 数据增强是提高图像识别算法性能的一种有效方法。通过对训练数据进行变换和扩展,可以增加数据的多样性,提高模型的泛化能力。常见的数据增强方法包括: 2.1 旋转、缩放、平
    的头像 发表于 07-16 11:12 444次阅读

    图像识别算法的优缺点有哪些

    图像识别算法一种利用计算机视觉技术对图像进行分析和理解的方法,它在许多领域都有广泛的应用,如自动驾驶、医疗诊断、安全监控等。然而,图像识别
    的头像 发表于 07-16 11:09 687次阅读

    图像识别算法的核心技术是什么

    图像识别算法是计算机视觉领域的个重要研究方向,其目标是使计算机能够像人类样理解和识别图像中的内容。
    的头像 发表于 07-16 11:02 394次阅读

    opencv图像识别有什么算法

    OpenCV(Open Source Computer Vision Library)是个开源的计算机视觉和机器学习软件库,提供了大量的图像处理和计算机视觉相关的算法。以下是些常见
    的头像 发表于 07-16 10:40 455次阅读

    DSP C6000教学实验箱操作教程_数字图像处理:5-3 图像缩放

    、实验目的 学习图像缩放的原理,掌握图像的读取方法,并实现图像缩放。 二、实验原理
    发表于 06-20 11:28

    基于FPGA的常见的图像算法模块总结

    意在给大家补充下基于FPGA的图像算法基础,于是讲解了下常见的图像算法模块,经过个人的总结,
    的头像 发表于 04-28 11:45 443次阅读
    基于FPGA的常见的<b class='flag-5'>图像</b><b class='flag-5'>算法</b>模块总结

    FPGA图像处理之CLAHE算法

    在FPGA图像处理--CLAHE算法()中介绍了为啥要用CLAHE算法来做图像增强。
    的头像 发表于 01-04 12:23 2147次阅读
    FPGA<b class='flag-5'>图像</b>处理之CLAHE<b class='flag-5'>算法</b>

    FPGA图像处理-CLAHE算法介绍()

    在介绍CLAHE算法之前必须要先提下直方图均衡化,直方图均衡化算法一种常见的图像增强算法,可
    的头像 发表于 01-02 13:32 1531次阅读
    FPGA<b class='flag-5'>图像</b>处理-CLAHE<b class='flag-5'>算法</b>介绍(<b class='flag-5'>一</b>)

    Vivado HLS的图像传感器FPN噪声去除算法设计

    ,表现为明暗不均匀的条带噪声。同时,为了满足图像传感器的实时摄像要求,算法的处理延时要低[3]。基于以上原因,本设计提出一种适用于图像传感器的 FPN 噪声去除
    的头像 发表于 01-02 11:10 1253次阅读
    Vivado HLS的<b class='flag-5'>图像</b>传感器FPN噪声去除<b class='flag-5'>算法</b>设计

    一种可靠的峰值和起始点检测算法

    电子发烧友网站提供《一种可靠的峰值和起始点检测算法.pdf》资料免费下载
    发表于 11-22 10:27 0次下载
    <b class='flag-5'>一种</b>可靠的峰值和起始点检测<b class='flag-5'>算法</b>

    一种基于线阵CCD扫描的车辆图像系统的方案设计

    电子发烧友网站提供《一种基于线阵CCD扫描的车辆图像系统的方案设计.pdf》资料免费下载
    发表于 11-06 09:44 0次下载
    <b class='flag-5'>一种</b>基于线阵CCD扫描的车辆<b class='flag-5'>图像</b>系统的方案设计

    图像放大为什么还能保持清晰度 图像缩放的原理是什么

    图像缩放算法可以分为两类:插值算法和基于变换的算法。下面是些常见的
    发表于 10-17 09:52 1357次阅读
    <b class='flag-5'>图像</b>放大为什么还能保持清晰度 <b class='flag-5'>图像</b><b class='flag-5'>缩放</b>的原理是什么

    一种基于图像识别的第五版人民币成色检测方法

    电子发烧友网站提供《一种基于图像识别的第五版人民币成色检测方法.pdf》资料免费下载
    发表于 10-13 11:19 0次下载
    <b class='flag-5'>一种</b>基于<b class='flag-5'>图像</b>识别的第五版人民币成色检测方法

    一种新的基于小波变换的虹膜识别算法

    电子发烧友网站提供《一种新的基于小波变换的虹膜识别算法.pdf》资料免费下载
    发表于 10-09 16:19 2次下载
    <b class='flag-5'>一种</b>新的基于小波变换的虹膜识别<b class='flag-5'>算法</b>