图像柔光效果在很多商业软件中都有实现,比如美图秀秀,光影魔术手等。其能针对原始图像产生一副新的比较平滑感觉光线比较柔和的效果,给人一种朦胧美,如下面几幅图所示:

                          

目前,关于该算法的可控参数,美图秀秀只提供了一个程度(0-100%)控制量,其算法调节的效果和幅度都较小,光影魔术手有柔化程度和高光柔化两个参数,其中柔化程度控制柔化的朦胧效果,高光柔化调节图像的亮度。 还有一些开源的软件如Imagestone、paint.net、gimp也有softglow算法,他们都提供了3个控制量:半径、亮度、对比度(锐度),其中Imagestone其实是翻译的gimp的算法,而GIMP和paint.net的算法在基本原理上是一样的,细节上有所区别而已。

我们以paint.net的实现过程为例进行说明,在paint.net的源代码中,GlowEffect.cs为实现该效果的文件,我抽取其部分源代码简要说明下这个算法的过程。

        public GlowEffect()  : base(StaticName, StaticImage, null, EffectDirectives.None, true){this.blurEffect = new BlurEffect();this.bcAdjustment = new BrightnessAndContrastAdjustment();this.screenBlendOp = new UserBlendOps.ScreenBlendOp();}

以及代码片段:

   public override unsafe void Render(EffectConfigToken parameters, RenderArgs dstArgs, RenderArgs srcArgs, System.Drawing.Rectangle[] rois, int startIndex, int length){// First we blur the source, and write the result to the destination surface// Then we apply Brightness/Contrast with the input as the dst, and the output as the dst// Third, we apply the Screen blend operation so that dst = dst OVER srcThreeAmountsConfigToken token = (ThreeAmountsConfigToken)parameters;AmountEffectConfigToken blurToken = new AmountEffectConfigToken(token.Amount1);this.blurEffect.Render(blurToken, dstArgs, srcArgs, rois, startIndex, length);BrightnessAndContrastAdjustmentConfigToken bcToken = new BrightnessAndContrastAdjustmentConfigToken(token.Amount2, token.Amount3);this.bcAdjustment.Render(bcToken, dstArgs, dstArgs, rois, startIndex, length);for (int i = startIndex; i < startIndex + length; ++i){Rectangle roi = rois[i];for (int y = roi.Top; y < roi.Bottom; ++y){ColorBgra* dstPtr = dstArgs.Surface.GetPointAddressUnchecked(roi.Left, y);ColorBgra* srcPtr = srcArgs.Surface.GetPointAddressUnchecked(roi.Left, y);screenBlendOp.Apply(dstPtr, srcPtr, dstPtr, roi.Width);}}}

   由以上代码初步得出结论:他们是以高斯模糊以及亮度对比度调节两个滤镜为基础,稍作混合即可。

第一步:备份原始图像;

第二步:对原始图像按指定的半径进行高斯模糊;

第三步:对模糊后的图像继续进行亮度和对比度的调整;

第四步:用原始图像的备份数据通原始图像(经过上述二及三处理后的图像)按照Photoshop的滤色(Screen)方式进行混合。

关于滤色方式的混合算法这里简单的提一下:  Blend = X + Y - X * Y / 255 ;  其中X和Y分别表示基色和混合色,Blend表示结果色。

算法的源码可以参考我在上面说的几个开源的软件,当然这可能需要你有一定的编程基础,毕竟那些软件的框架都比较复杂。

关于算法的执行速度可以说只取决于第二步,因为亮度对比度的调节实际上是个查表的过程(PS的亮度对比度指令其实要比大家想象的复杂点的,这个有机会再谈,也可以参考阿发伯的博文http://blog.csdn.net/maozefa/article/details/4778934),而第四步其实也是可以用查表的方式来加速的(不过一定要用一位的方式)。高斯模糊这个老生长谈的问题,在我所搜索过的网页中是没有谁给出过一个完整的、完美的、执行速度和指定半径无关的、可运行的VB或VC或JAVA程序源代码(一般都是给出参考文章介绍)。我自己有这个方面的代码,不过我也不愿意共享。真正有兴趣的我推荐你去找GIMP的算法代码,在GIMP的整个源码系统,至少给出了三种高斯模糊优化的代码,分别位于blur-gauss.c(给出了2种:RLE及IIR优化代码)以及contrast-retinex.c中(代码特别简洁),当然,那些代码如果提取出来还应该进行代码层面的整理和优化。Paint.net也提供了高斯模糊函数,不过期实质并不是高斯模糊,而是一种用线性分布的权重函数代替恒值权重,不过那个算法里面没有浮点运算,并且还存在比Paint.net里的代码快很多即执行时间于半径无关的优化算法,而且该优化算法比任何真正的高斯模糊优化算法要快1倍多,而效果上区别不大,可作为实时性特别强的场合的备用算法。

同样,提供个编译好的文件给有兴趣研究该算法的朋友看看效果:

http://files.cnblogs.com/Imageshop/SoftGlow.rar

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

转载于:https://www.cnblogs.com/Imageshop/p/3145216.html

图像柔光效果(SoftGlow)的原理及其实现。相关推荐

  1. 图像柔光效果(SoftGlow)的原理及其实现

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

  2. 图像去雾算法的原理、实现、效果

    图像的去雾算法原理及实现: 本文主要是实现的是基于暗通道处理的去雾.有部分是看论文直接翻译而来,如有错误,欢迎评论区指出,当然您也可以直接阅读原文. 一.原理 暗通道先验解释: 说明:何凯明博士的论文 ...

  3. 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果及其他。...

    在图像去雾这个领域,几乎没有人不知道<Single Image Haze Removal Using Dark Channel Prior>这篇文章,该文是2009年CVPR最佳论文.作者 ...

  4. 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)...

    最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html 可处理视频的示例:视频去雾效果 在图像去雾这个领域,几乎没有人不知道< ...

  5. 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果及其他。 ...

    在图像去雾这个领域,几乎没有人不知道<Single Image Haze Removal Using Dark Channel Prior>这篇文章,该文是2009年CVPR最佳论文.作者 ...

  6. 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  7. 微信团队分享:视频图像的超分辨率技术原理和应用场景

    为什么80%的码农都做不了架构师?>>>    本文来自微信多媒体团队高欣玮的技术分享. 1.前言 图像和视频通常包含着大量的视觉信息,且视觉信息本身具有直观高效的描述能力,所以随着 ...

  8. 四种比较简单的图像显著性区域特征提取方法原理及实现

    四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT. laviewpbt  2014.8.4 编辑 Email:laviewpbt@sina.com   QQ ...

  9. [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)...

    此文转载自:https://blog.csdn.net/Eastmount/article/details/111568397#commentBox 该系列文章是讲解Python OpenCV图像处理 ...

最新文章

  1. [bzoj2839]集合计数 题解 (组合数+容斥)
  2. java中的解码和编码_关于java中编码和解码(一)
  3. 回溯法(其实是递归)
  4. 3d17304计算机开机号,福彩3D17304期福彩3D开机号147对应码653牛彩网关注数037金码0...
  5. 【一起去大厂系列】针对left join以及limit的两条优化小技巧
  6. 深度学习导论(5)手写数字识别问题步骤
  7. docker 笔记(2) -- 镜像
  8. Win-MASM64汇编语言-MOV/MOVSB/MOVSW/MOVSD/REP/REPZ/REPE/REPNZ/REPNE
  9. 达摩院自研数学规划求解器发布,最新技术将通过阿里云对外输出
  10. linux 怎么添加文件类型,如何在Linux/Unix上添加基于文件类型的文件扩展名?
  11. 用c语言编写一个简易计算器
  12. 【侯捷】C++内存管理机制
  13. delphi打印机编程
  14. 电脑文件夹都有什么奇葩的名称?程序员:从古至今没有出过车祸!
  15. 删掉启动分区进不了系统,复活办法(win10)
  16. js开发飞机大战需求文档
  17. Linux系统工具sar查看主机性能指标(内存、CPU、IO)
  18. 热加工作业考研题目答案分享——metal casting 1
  19. JWT、OOS、Oauth三种登录验证机制
  20. Unity 之 UGUI Dropdown下拉选单组件详解

热门文章

  1. 阿里达摩院员工业余打造“论文知识图谱”工具:极速搜索,完全可视化
  2. 46亿一辆的戴森电动车,「卖」给英国首富了
  3. 谷歌大脑提出“洗发水”二阶优化算法,Transformer训练时间减少40%,Jeff Dean点赞...
  4. 你随便动幕布,投影跟不上算我输,动态投影黑科技,AE特效秒变成真
  5. GitHub年度报告:Python首次击败Java,中国成第二大开源贡献国
  6. 前戴尔EMC中国研究院院长创业:推出AI加速虚拟化平台,开发者可免费使用
  7. 【移动开发】Android中不用图片资源也能做出好看的界面
  8. Python 如何计算当前时间减少或增加一个月
  9. MMD的unity导入插件
  10. html5实现ios长按图标后进入图标排序及删除功能的效果