图像变形算法:实现Photoshop液化工具箱中向前变形工具

2009-12-11 21:44:56 阅读(444) 发表评论

  很多时候,我们需要对一个图像的局部进行调整,这个调整必须是平滑的和可交互式的。Photoshop液化滤镜中向前变形工具就是这样一个工具,很好用。类似工具有美图秀秀(http://down.ddvip.com/view/123008460425144.html)的瘦脸功能。本文描述这类工具背后的原理与算法。

  先以美图秀秀为例子,简单描述下向前变形功能。

  首先,用鼠标控制一个圆形的选区。

  然后,点击鼠标左键,向某个方向拖动,就可以产生光滑的向前变形图片:

  通过这个工具,可对图片的局部进行调整,自由度比较大,因此比较实用。

  下面讲讲这类算法的原理。

  上图中,阴影圆环代表一个半径为 rmax 的圆形选区。其中,C点是鼠标点下时的点,也就是圆形选区的圆心。鼠标从C拖到M,致使图像中的点U变换到点X。所以,关键问题是找到上面这个变换的逆变换——给出点X时,可以求出它变换前的坐标U(精确的浮点坐标),然后用变化前图像在U点附近的像素进行插值,求出U的像素值。如此对圆形选区内的每一个像素进行求值,便可得出变换后的图像。

  Andreas Gustafsson 的 Interactive Image Warping 一文给出了这一逆变换公式:

  这个变形算法的特点是:

  1 只有圆形选区内的图像才进行变形

  2 越靠近圆心,变形越大,越靠近边缘的变形越小,边界处无变形

  3 变形是平滑的

  具体实现步骤如下:

  1 对于圆形选区里的每一像素,取出其R,G,B各分量,存入3个Buff(rBuff, gBuff, bBuff)中(也即,三个Buff分别存储选区内的原图像的R,G,B三个通道的数值)

  2 对于圆形选区里的每一个像素X,

  2.1 根据上面的公式,算出它变形前的位置坐标精确值U

  2.2 用插值方法,根据U的位置,和rBuff, gBuff, bBuff中的数值,计算U所在位置处的R,G,B等分量

  2.3 将R,G,B等分量合成新的像素,作为X处的像素值

  代码我就不贴了,真正对这功能有需求的,根据上面的文字可以很容易写出来——解决这类问题,重要的不是代码,而是思路和算法。

  下面是我的实现演示:

  查看原图(大图)

  上图中,左上角是原图,右下角是变形后的图。红色圆圈圈起来的是变形区域。可以看见,变形很光滑。我在上面的算法中引入了变形强度s(strength),上图中strength=20。

  引入strength,公式就得修改下,下面是我的修改版公式:

  查看原图(大图)

  看看结果——

  原图:

  变形,strength=20:

  变形,strength=120:

  photoshop 与美图秀秀里这个功能可以连续的进行变形。我猜测,这个连续的变形是由一系列基础变形串联起来的,也就是,鼠标从M0拖到Mn位置,并不是只计算 M0->Mn这个变换,而是在鼠标轨迹上引入一系列中间点,M1,M2…Mn-1,然后,对图像进行 M0->M1,M1->M2,…,Mn-1->Mn等一系列变换。

图像变形算法:实现Photoshop液化工具箱中向前变形工具相关推荐

  1. php实现图片液化,图像变形算法:实现Photoshop液化工具箱中向前变形工具

    很多时候,我们需要对一个图像的局部进行调整,这个调整必须是平滑的和可交互式的.Photoshop液化滤镜中向前变形工具就是这样一个工具,很好用.类似工具有美图秀秀的瘦脸功能.本文描述这类工具背后的原理 ...

  2. 实现Photoshop液化工具箱中向前变形工具

    前段时间转载了http://blog.csdn.net/jia_zhengshen/article/details/11650461小铁的<实现Photoshop液化工具箱中的向前变形工具> ...

  3. HTML5表单:工具箱中的可靠工具

    我们已经对页面的大部分进行了编码,现在您几乎了解了有关新HTML5元素及其语义的所有知识.但是,在我们开始在网站外观上进行工作(我们将在第7章中进行操作)之前,我们将快速绕过HTML5 Herald的 ...

  4. 图像变形算法之meitu瘦脸及放大眼睛(文末含代码)

    导语:很多时候,我们需要对一个图像的局部进行调整,这个调整必须是平滑的和可交互式的.Photoshop液化滤镜中向前变形工具就是这样一个工具,很好用.类似工具有美图秀秀(http://xiuxiu.m ...

  5. 了解如何通过简单的技巧在Photoshop或GIMP中制作HDR图像

    HDR tone mapping is everywhere these days; it's sort of like Auto-Tuning equivalent of photography. ...

  6. 从0到1,反距离加权IDW(Inverse Distance Weighted Interpolation) 插值变形算法

    论文: Image Warping with Scattered Image Warping with Scattered Data Interpolation 局部变形算法:液化,膨胀 全局变形算法 ...

  7. photoshop 字体小_如何在Photoshop和Illustrator中设置默认字体

    photoshop 字体小 Photoshop and Illustrator are powerful, but not exactly intuitive. That goes double fo ...

  8. ai怎么让图片任意变形_为什么AI软件将图形等比例缩小会变形?如何样可以要图形不变形?...

    回答: AI中么把图像等比例扩大或缩小尺寸步骤如下: 1.打开AI的软件,执行菜单栏中文件-新建,或者直接使用快捷键Ctrl+N新建一个画布. 2.选择工具箱中的心形工具,将填充设置为红色,描边设置为 ...

  9. 在ArcEngine中使用Geoprocessing工具-执行工具

    来解析一下Geoprocessor类的Execute方法,他有两种重载,Execute(IGPProcess, ITrackCancel)和Execute(string, IVariantArray, ...

最新文章

  1. Coursera课程Python for everyone:Quiz: Regular Expressions
  2. 对计算机网络设备的认识,计算机入门知识:你有必要认识的网络设备及工具
  3. 看完这篇操作系统,和面试官扯皮就没问题了!
  4. 最小值c语言 循环,C语言循环结构 -C语言求全班同学身高的最大值和最小值
  5. 高并发秒杀——SpringBoot集成redis
  6. eclipse工具栏sdk和avd图标
  7. 在Ubuntu下用桌面图形界面挂载分区
  8. vscode Java 11 or more recent is required to run. Please download and install a recent JDK
  9. .Net Compact Framework 高级篇(2)-- 扩展SOAP应用
  10. C# TextBox输入校验方法
  11. TEM波以及TEM TE TM模的区别
  12. (python爬虫)拉勾网招聘信息爬取
  13. Python自动化运维 - day9 - 进程与线程
  14. win7怎么看计算机显卡内存大小,Win7系统怎么看显存?
  15. 如何在滴滴云 DC2 上搭建 MySQL 服务
  16. python提取Excel某几列数据
  17. 预期与实际运行结果的对比
  18. R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析CPI和PPI时间序列关系...
  19. 微信小程序-06 tab选项卡滑动切换与列表Item(scroll 、 swiper)数据的获取等所用到的都有了
  20. IBM小型机日常维护命令

热门文章

  1. Tomcat设置登录账号密码
  2. 网站性能优化之CSS无图片技术
  3. 1.2 CSS选择器和布局
  4. 生物化学 电阻抗成像OpenEIT,Dbar算法,数据集等(暂记)
  5. 2021年汽车驾驶员(初级)考试APP及汽车驾驶员(初级)考试软件
  6. 吴恩达卷积神经网络 笔记,吴恩达 深度神经网络
  7. 1103. Integer Factorization (30)
  8. 1023day5:class类属性方法、每次执行类属性+1、内建模块、时间装饰器wrapper、面向对象__slots__方法:限制类的属性等基础知识、正则表达式基础知识、多态鸭子类型
  9. 诺基亚java模拟器exe,无需模拟器!骁龙810手机成功运行Win10:可开exe程序
  10. matlab求ra,RA调度算法及Matlab计算程序