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

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

3天内不再提示

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

新机器视觉 来源:NetPioneer 作者:NetPioneer 2022-11-11 15:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

0

简介

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

547e9e7a-6105-11ed-8abf-dac502259ad0.png

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

549f8d9c-6105-11ed-8abf-dac502259ad0.png

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

01

什么是图像

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

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

| 原图像

5679c27c-6105-11ed-8abf-dac502259ad0.png

| 缩放后

56a78248-6105-11ed-8abf-dac502259ad0.png

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

56bee424-6105-11ed-8abf-dac502259ad0.png

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

02

能量,又是能量

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

56d7f414-6105-11ed-8abf-dac502259ad0.png

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

56eb75b6-6105-11ed-8abf-dac502259ad0.png

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

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

03

利用能量进行分割

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

5738a980-6105-11ed-8abf-dac502259ad0.png

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

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

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

574b1da4-6105-11ed-8abf-dac502259ad0.png

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

576507be-6105-11ed-8abf-dac502259ad0.png

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

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

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

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

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

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

577986bc-6105-11ed-8abf-dac502259ad0.png

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

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

| 原图像

578911ea-6105-11ed-8abf-dac502259ad0.png

| 缩减后

58153648-6105-11ed-8abf-dac502259ad0.png

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

04

结语

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

审核编辑 :李倩

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

    关注

    42

    文章

    4841

    浏览量

    108150
  • 算法
    +关注

    关注

    23

    文章

    4801

    浏览量

    98519
  • 图像
    +关注

    关注

    2

    文章

    1096

    浏览量

    42437

原文标题:Seam Carving - 一种很强的图像缩放算法

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    机器学习特征工程:缩放、编码、聚合、嵌入与自动化

    本文转自:DeepHubIMBA好模型的秘诀不在于更花哨的算法,而在于更好的特征。第1部分:数值特征1.1缩放多数机器学习算法对尺度敏感。个取值范围在0到1,000,000的列,会在
    的头像 发表于 04-08 14:41 713次阅读
    机器学习特征工程:<b class='flag-5'>缩放</b>、编码、聚合、嵌入与自动化

    8常用的CRC算法分享

    CRC 计算单元可按所选择的算法和参数配置来生成数据流的 CRC 码。有些应用中,可利用 CRC 技术来验证数据的传输和存储的完整性。 8 常用的 CRC 算法,包括: CRC16_IBM
    发表于 11-13 07:25

    SM4算法实现分享(算法原理

    SM4分组加密算法采用的是非线性迭代结构,以字为单位进行加密、解密运算,每次迭代称为轮变换,每轮变换包括S盒变换、非线性变换、线性变换、合成变换。加解密算法与密钥扩展都是采用32轮非线性迭代结构
    发表于 10-30 08:10

    复杂的软件算法硬件IP核的实现

    源代码编译为 HDL 的过程共分为两步: (1)C to HASM (2)HASM to HDL 第步 C to HASM 是将 C 语言描述的算法编译为一种中间的、与实际硬
    发表于 10-30 07:02

    SM4算法原理及分享1

    SM4算法一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(
    发表于 10-30 06:54

    使用Otsu阈值算法将灰度图像二值化

    Otsu 算法是由日本学者OTSU于1979年提出的一种图像进行二值化的高效算法,又称“最大类间方差法”。当我们对个图象进行二值化操作的
    发表于 10-28 06:49

    加密算法的应用

    加密是一种保护信息安全的重要手段,近年来随着信息技术的发展,加密技术的应用越来越广泛。本文将介绍加密算法的发展、含义、分类及应用场景。 1. 加密算法的发展 加密算法的历史可以追
    发表于 10-24 08:03

    基于FPGA的CLAHE图像增强算法设计

    CLAHE图像增强算法又称为对比度有限的自适应直方图均衡算法,其算法原理是通过有限的调整图像局部对比度来增强有效信号和抑制噪声信号。
    的头像 发表于 10-15 10:14 790次阅读
    基于FPGA的CLAHE<b class='flag-5'>图像</b>增强<b class='flag-5'>算法</b>设计

    25年11月上海FPGA算法实现与应用技术高级研修分享

    )是一种通过组合多个简单滤波器实现复杂频率响应的数字滤波技术,能利用较少的资源实现较窄过渡带的滤波需求。是应用较多低通滤波技术。   第八章: 削峰技术:CFR即波峰因子衰减,是一种削峰技术。是对峰均
    发表于 10-11 11:55

    PPEC电源DIY套件:图形化算法编程,解锁电力电子底层算法实践

    PPEC 开关电源 DIY 套件是森木磊石推出的一种电力电子教学与实践工具,专为高校教学、学生实践及电子爱好者设计,旨在解决电力电子教学中“理论脱离实际”的痛点,深化电力电子教学改革,培养出更多
    发表于 08-14 11:30

    一种抗辐射加固检错纠错电路的设计

    电子发烧友网站提供《一种抗辐射加固检错纠错电路的设计.pdf》资料免费下载
    发表于 08-11 15:38 0次下载

    一种新的无刷直流电机反电动势检测方法

    无位置传感器无刷直流电机的控制算法是近年来研究的热点之,有霍尔位置信号直流电机根据霍尔状态来确定通断功率器件。利用无刷直流电机的数学模型,根据反电动势检测原理,提出了一种新的线反电动势检测方法来
    发表于 08-04 14:59

    介绍一种直流过压保护电路

    本篇博文将详细分析一种典型的过压保护电路,探讨其工作原理、元件选择及实际应用,帮助大家深入理解如何保护电子设备。
    的头像 发表于 07-05 11:06 1679次阅读
    介绍<b class='flag-5'>一种</b>直流过压保护电路

    一种新型宽带鞭状套筒天线

    电子发烧友网站提供《一种新型宽带鞭状套筒天线.pdf》资料免费下载
    发表于 05-28 14:05 0次下载

    在 KiCad 中添加个 AI 助手是一种什么体验?

    一种什么体验? 文章出处:【微信公众号:KiCad】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 05-15 14:28 1133次阅读