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

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

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

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

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

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

上图中,阴影圆环代表一个半径为 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液化工具箱中向前变形工具相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

    图像变形算法:实现Photoshop液化工具箱中向前变形工具 2009-12-11 21:44:56 阅读(444) 发表评论 很多时候,我们需要对一个图像的局部进行调整,这个调整必须是平滑的和可交互 ...

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

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

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

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

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

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

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

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

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

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

  7. 图像处理(十三)保刚性图像变形算法-Siggraph 2004

    图像变形可以说是很多图像.动画领域的一个非常常见的功能,就说ps.天天P图.美图秀秀.可牛等这些每个软件,有好多个功能都要用到图像变形,比如图像方向校正.图像全景.视频防抖等,在我的另外一篇博文全景矩 ...

  8. 保刚性图像变形算法-Siggraph 2004

    图像处理(十三)保刚性图像变形算法-Siggraph 2004 查看全文 http://www.taodudu.cc/news/show-6027440.html 相关文章: 介绍一个牛逼的Githu ...

  9. c语言bmp图片拉普拉斯锐化,图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)...

    图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码) (y(m,n)=x(m,n)+lambda*z(m,n)) 其中(x(m,n))是处理前图片, ...

最新文章

  1. Coolite Toolkit学习笔记六:常用控件Accordion、ToolBar、ToolTip
  2. 水晶报表printmode的ActiveX打印
  3. 2021年最后几天,使用SSM实现网上购物商城系统
  4. LeetCode Set Matrix Zeroes
  5. MySQL 命令行下执行.sql脚本
  6. 重磅!神策数据荣获华农保险 2020 年度优秀生态合作伙伴“最佳合作机构”荣誉称号...
  7. 电脑技巧:电脑安装操作系统、重装系统常见的问题解决方法!
  8. 10月26日练习注册用例的编写与ibatis培训
  9. 素数和 mooc 翁恺
  10. python使用codecs模块进行文件操作-读写中英文字符
  11. java 调用kettle job 传参_java调用kettle向job(任务)和transformation(转换)传递参数实例...
  12. Java_Arrays.fill() 初始化二维数组一个指定值
  13. 【网易】网易2018实习生招聘笔试题-测试开发实习生
  14. Java小白必学——冒泡排序
  15. 大学计算机引论作业,计算机引论-1计算引论-认识计算机.pdf
  16. MogaFX外汇储备与经济危机
  17. PHP json_encode float
  18. python利用正则爬取内涵段子内容
  19. 利用python处理Excel表格中的销售数据
  20. luogu 3143

热门文章

  1. snails1.0扫描器测试版
  2. 网站性能优化之CSS无图片技术
  3. dw自动滚动图片_DW里怎么做图片自动播放
  4. C# 访问ftp地址下载jpg、pdf、文件夹
  5. 新手小白搭建服务器环境如何选择呢?lnmp还是lamp?
  6. STL浅析 RB-tree(红黑树)
  7. 郭天祥的10天学会51单片机_第七节
  8. 鸿蒙系统怎么安装 google play
  9. 逻辑门电路 逻辑运算
  10. 什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?