目前,手机上各种图像特效的软件应用App越来越盛行,比较有名如美图秀秀,camare360,美颜相机等,还有一些在某些特定的方向做的比较的优秀的如魔漫相机等。这些软件几乎无一例外的都提供了相当数量的针对人脸进行美化的功能,正是这些最基础的功能吸热了很多热血美女丑女中女的兴趣。以至于几乎我所认识的每个25-35之间的女性朋友都知道美图秀秀,而了解Photoshop的则微乎其微。不过最近听一些朋友谈到,认为手机上的图像软件已经过了开发的鼎盛期,也不晓得到底是不是这样。

作为人脸中最有神的部位眼睛,自然是各软件开发商不会错过的美化对象,拿运行速度极差的可牛影像为例,他至少提供了眼睛放大、去红眼、祛黑眼圈、眼睛变色、加眼影等众多和眼睛有关的美容刀。其实这些,在程序开发者开来不过一些美妙的代码发言后绽放多多鲜花,可确是众多人为之用之美容的神器。

但是,这些简单的功能,送之于百度或这个google搜索相关算法,能找到想匹配的信息量真的不多,最起码我没找到可以直接用之于实践的东西。

本文就共享一些我关于眼睛缩放这个问题的一些研究成果,这些研究是3年前进行的。

正规的来说,眼睛缩放属于图像的一种局部扭曲,关于扭曲,Photoshop中的液化滤镜最能体现这类算法的灵魂。眼睛缩放完全可以用其中的一种方式来实现,如下图所示:

    (为节省篇幅,旋转了下)

使用该膨胀工具,选择合适的参数能得到非常理想的效果,但是如果仅仅为了这个功能区研究庞大的液化滤镜的算法,是极其需要勇气的精力的。虽然目前在开源内的软件中可以从GIMP的Iwarp代码或者paint.net的一个smudgle插件通过反编译的方式得到代码参考学习,但是这个过程是比较痛苦的,因为我因为痛苦过一次了,这里分享一个简单的方式去实现他,就减轻大家的痛苦了吧。

在手动的眼睛缩放过程中,一般有三个参数:中心点、画笔大小、力度,我们分别用(PointX,PointY),Radius,Strength表示。比如美图提供了如下的用户界面:

  中心点是用户通过鼠标单击获得的,画笔的大小决定了算法所影响到的范围。力度影响眼睛放大的程度。

  我的算法是通过如下图所示的简单过程实现的。

  对于画笔半径以内的任一位置像素(X,Y),按照其所在的位置和半径之间的比值,根据强度的设定值按照某个线性的公式,从经过点(PointX,PointY)和(X,Y)的直线中选择一个位置像素作为新的像素值,如果这个新的位置位于两点之间(图中X1,Y1),则出现眼睛缩小的效果,而位于直线的延长线上(图中的X2,Y2),则会有眼睛放大的效果,用一段简单的代码表示就是:

Left = IIf(PointX - Radius < 0, 0, PointX - Radius)                     '  计算边界值Top = IIf(PointY - Radius < 0, 0, PointY - Radius)Right = IIf(PointX + Radius >= m_Width, m_Width - 1, PointX + Radius)Bottom = IIf(PointY + Radius >= m_Height, m_Height - 1, PointY + Radius)PowRadius = Radius * RadiusFor Y = Top To BottomOffSetY = Y - PointYFor X = Left To RightOffsetX = X - PointXXY = OffsetX * OffsetX + OffSetY * OffSetY                      '   距离的平方If XY <= PowRadius Then                                         '   在指定的半径内ScaleFactor = 1 - XY / PowRadiusScaleFactor = 1 - Strength / 100 * ScaleFactor              '   按照这种关系计算取样点的位置PosX = OffsetX * ScaleFactor + PointXPosY = OffSetY * ScaleFactor + PointYIf PosX < 0 Then                                            '   放置越界PosX = 0ElseIf PosX >= m_Width ThenPosX = m_Width - 1End IfIf PosY < 0 ThenPosY = 0ElseIf PosY >= m_Height ThenPosY = m_Height - 1End IfSpeed = Y * m_Stride + X * 3Index = PosY * m_Stride + PosX * 3ImageData(Speed) = ImageDataB(Index)                        '将当前点的值赋值为取样点的值ImageData(Speed + 1) = ImageDataB(Index + 1)ImageData(Speed + 2) = ImageDataB(Index + 2)End IfNextNext

  我没有提供的完整的代码,是因为真正懂的人只要从只言片语就能搞清楚,而那些伸手党在我这里是不收欢迎的。

  上述代码有很多可以改进的地方,第一,上述出现的结果会有些不清晰,只是 由于计算的取样的坐标实际上是浮点数,因此直接取整会带来较大的误差,较为合理的做法是利用双线性插值之类的插值算法进行计算优化。第二:线性映射的计算公式也可以做调整,比如调整成那种离眼珠越进的那些像素的变化越小,而越远的变换越大等。

效果如下图:

   

按照上述细路写了个测试程序:http://files.cnblogs.com/Imageshop/ZoomEyes.rar

****************************作者: laviewpbt   时间: 2014.7.15    联系QQ:  33184777 转载请保留本行信息**********************

转载于:https://my.oschina.net/abcijkxyz/blog/792246

图像美容之眼睛放大算法。相关推荐

  1. 图像美容之眼睛放大算法

    本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop. 转载自:https://www.cnblogs.com/Imageshop/p/3847357.html   ...

  2. 谈谈自动瘦脸和自动眼睛放大算法

    原地址:http://blog.csdn.net/celerychen2009/article/details/8839099 目前,手机上各种图片特效的软件应用App盛行,典型的如camare360 ...

  3. 【Android】自动瘦脸与眼睛放大美颜算法

    自动瘦脸与眼睛放大美颜算法 自动瘦脸与眼睛放大可以算作图像局部扭曲算法的一个应用,其参考文献可以追溯至1993年的一篇博士论文:Interactive Image Warping.这篇论文详细描述了算 ...

  4. 自动瘦脸与眼睛放大美颜算法[转载]

    自动瘦脸与眼睛放大可以算作图像局部扭曲算法的一个应用,其参考文献可以追溯至1993年的一篇博士论文:Interactive Image Warping. 图像局部扭曲算法有三个:局部缩放(Local ...

  5. 图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc

    图像放大算法总结及MATLAB源程序 1,插值算法(3种): (1)最邻近插值(近邻取样法): 最近插值的的思想很简单就是把这个非整数坐标作一个四舍五入,取最近的整数点坐标处的点的颜色.可见,最邻近插 ...

  6. 自动瘦脸与眼睛放大美颜算法

    http://www.shenyanhao.com/2015/09/眼睛放大美颜算法/ 转载于:https://www.cnblogs.com/guochen/p/8573021.html

  7. OpenGL Shader 自动瘦脸与眼睛放大

    图像局部扭曲算法有三个:局部缩放(Local Scaling)算法.局部平移(Local Transition)算法和局部旋转(Local Rotation)算法.其中应用局部缩放算法可实现眼睛放大, ...

  8. Stable Diffusion系列课程上:安装、提示词入门、常用模型(checkpoint、embedding、LORA)、放大算法、局部重绘、常用插件

    文章目录 一.Stable Diffusion简介与安装 二.文生图(提示词解析) 2.1 提示词入门 2.2 权重 2.3 负面提示词( Negative prompt) 2.4 出图参数设置 2. ...

  9. Anime4K:目前最热的开源实时动漫放大算法,Github上一周收获2600星!

    点击我爱计算机视觉标星,更快获取CVML新技术 今天跟大家介绍一款动漫画面放大算法Anime4K,目前最热的开源.实时.视频动漫放大算法. https://github.com/bloc97/Anim ...

最新文章

  1. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步
  2. 《预训练周刊》第15期:Bengio, Lecun, Hinton | 人工智能深度学习、用于图像分类的全局过滤网络...
  3. 打造新型智慧城市标杆 金华跻身中国城市信息化50强
  4. Linux中检查本地系统上的开放端口列表的方法
  5. kaggle比赛模型融合指南
  6. tsql 正则_T-SQL中的SQL Server正则表达式
  7. html5实现3d翻页效果,利用css3 3d transform制作超逼真翻书效果
  8. 解决Ubuntu系统找不到进程,但是GPU显存占满问题
  9. 关于Linux SHELL 的编程的几个练习(课本182页5-10题)
  10. inno setup安装之前关闭mysql_innosetup安装之前关闭进程
  11. iview admin 使用爬坑
  12. 解决 微信小程序 input错位
  13. 2020幻影围棋 围棋规则模块(二)
  14. ICPC-无限路之城(数学+思维)
  15. 专利发明人是子公司的员工,专利申请人是母公司名称,在职称评审时这个专利对子公司员工算不算成果
  16. 用Chrome浏览器调试钉钉应用--Web页面调试
  17. 20170506 《摔跤吧,爸爸》观影笔记
  18. PKU MOOC作业魔兽世界之一:备战的结构化程序
  19. code1169 传纸条
  20. 泛型接口的概述和使用

热门文章

  1. 科大讯飞用人工智能推进“新基建”
  2. ROG魔霸新锐电脑如何用U盘重装Win10系统教学
  3. 成品app直播源码中Android酷炫礼物动画实现方案(上篇)
  4. macos 下载 macOS 系统安装程序及安装U盘制作方法
  5. suse10.1设置显示器分辨率
  6. 16-Figma-自动布局
  7. 顶级专家谈中国脑科学研究最新成果
  8. 用于HTML5移动开发的几大移动APP开发框架
  9. Linux必备软件之SSH
  10. 保姆级 Git 入门教程,10000 字详解