原文:图像滤镜艺术---图像滤镜晕影调节算法研究

本文对滤镜中常见的晕影,晕角效果的实现做了研究,具体如下:

1 晕影调整算法

所谓晕影就是给图像四个角添加暗影效果,这暗影向图像中心逐渐淡化。我们使用如下公式来实现:

假设图像宽度高度分别为w,h:

double d = Math.Sqrt((i - w / 2) * (i - w / 2) + (j - h / 2) * (j - h / 2));

double dmax = 1.0 / Math.Sqrt(w * w / 4 + h * h / 4);

double lum = 0.75 / (1.0 + Math.Exp((d * dmax - cRadius) * cGradient)) + cLight;

//eg:double lum = 0.75 / (1.0 + Math.Exp((d * dmax - 0.85) * 5)) + 0.35;

r = (int)((double)r * lum);

g = (int)((double)g * lum);

b = (int)((double)b * lum);

注释:

cRadius (cRadius=0.73)这个参数控制晕影的半径,值越大,半径越大;

cLight (cLight=0.25)控制中心圆形区域内的像素亮度,值越大,图像越亮;

cGradient (cGradient=20)这个参数控制中心区域与晕影过渡部分的梯度,值越小,过渡越自然,越不明显;

上述算法实现的是圆形晕影。

有了晕影图像之后,我们采用K比例混合算法来实现晕影强度的可调性,假设晕影图像为S(n,m),原图为X(n,m),效果图为Y(n,m),晕影强度因子为K,K属于[0,1],混合公式如下:

Y(n,m)=K*X(n,m)+(1-K)*S(n,m)

这样就实现了晕影效果从无到有的调节过程。

2 晕影调节快速算法

晕影调节的快速算法主要是改进晕影图像的生成过程。我们可以按照自己的需求使用PS制作出一张晕影效果图,来代替算法生成晕影图像的过程,这样就可以节省算法生成的时间了,之后的调节过程不变。

当然,这个算法的缺点就是晕影的半径,过渡程度和亮度无法调整。

目前,这里给出Instagram里使用的晕角模板:

在Instagram中,是使用这个模板与目标图像执行“柔光”混合图层算法,得到晕角效果的,然后使用1中的K比例混合算法,来快速调节。

最后给出android 中C代码,可以直接使用。

附录 Android C Code with RGB565

void THaloEffect(int* srcData, int width, int height) {

int gray = 0, green = 0, blue = 0, red = 0, i = 0, j = 0, alpha = 0xFF << 24;

for(j = 0; j < height; j++)

{

for(i = 0; i < width; i++)

{

gray = srcData[i + j * width];

red = ((gray >> 16) & 0xFF);

green = ((gray >> 8) & 0xFF);

blue = (gray & 0xFF);

double d = sqrt((i - width / 2) * (i - width / 2) + (j - height / 2) * (j - height / 2));

double dmax = 1.0 / sqrt(width * width / 4 + height * height / 4);

//double lum = 0.75 / (1.0 + Math.Exp((d * dmax - 0.73) * 20)) + 0.25;

double lum = 0.75 / (1.0 + exp((d * dmax - 0.73) * 20)) + 0.25;

red = (int)((double)red * lum);

red = CheckRange(red);

green = (int)((double)green * lum);

green = CheckRange(green);

blue = (int)((double)blue * lum);

blue = CheckRange(blue);

srcData[i + j * width] = alpha | (red << 16) | (green << 8) | blue;

}

}

};

void THaloEffect_F(int* srcData, int* mask, int width, int height, int ratio)

{

int gray = 0,green = 0,blue = 0,red = 0,i = 0, mRed = 0, mGreen = 0, mBlue = 0, alpha = 0xFF << 24;

int length = width * height;

for (i = 0; i < length; i++) {

gray = srcData[i];

red = ((gray >> 16) & 0xFF);

green = ((gray >> 8) & 0xFF);

blue = (gray & 0xFF);

gray = mask[i];

mRed = ((gray >> 16) & 0xFF);

mGreen = ((gray >> 8) & 0xFF);

mBlue = (gray & 0xFF);

mRed = ModeSmoothLight(red, mRed);

mGreen = ModeSmoothLight(green, mGreen);

mBlue = ModeSmoothLight(blue, mBlue);

red = (mRed * ratio + (100 - ratio) * red) / 100;

green = (mGreen * ratio + (100 - ratio) * green) / 100;

blue = (mBlue * ratio + (100 - ratio) * blue) / 100;

srcData[i] = alpha | (red << 16) | (green << 8) | blue;

}

};

图像滤镜艺术---图像滤镜晕影调节算法研究相关推荐

  1. 图像滤镜艺术---漫画滤镜

    图像滤镜艺术---漫画滤镜 原文: 图像滤镜艺术---漫画滤镜 漫画滤镜 所谓漫画滤镜就是通过复杂的算法来模拟漫画的特点,从而使真实照片呈现出漫画的风格.要实现漫画的效果,首先要了解漫画的特点,漫画具 ...

  2. 图像滤镜艺术---Wave滤镜

    图像滤镜艺术---Wave滤镜 原文:图像滤镜艺术---Wave滤镜 Wave Filter水波滤镜 水波滤镜是通过坐标变换来模拟水波效果,使图像呈现出水波的特效.这个滤镜有一个可调参数:水波的扭曲程 ...

  3. 图像和视频的快速去雾算法研究

    王昕, 孙莹莹, 李影昉. 图像和视频的快速去雾算法研究[J]. 影像科学与光化学, 2016, 34(1): 82-87.   WANG Xin, SUN Yingying, LI Yingfang ...

  4. 图像滤镜艺术---水彩画滤镜

    水彩画滤镜 水彩画滤镜算法如下: 1,假设原始图像为F(x,y),灰度化得到G(x,y): 2,构建一个半径为Radius的正方形模板M,边长为2*Radius+1: 3,将M在F上依次遍历每个像素, ...

  5. 图像滤镜艺术---图像光照效果滤镜

    图像光照滤镜 图像光照提滤镜主要是模拟阳光照射下的图像效果,通常使用在暗光环境下拍摄的照片中,或者是没有太阳的日景照片中.可调参数主要包括光源位置,光照半径和光照强度,通过调整这些参数,来达到我们想要 ...

  6. 用php照片艺术化,图像滤镜艺术--大雪滤镜

    今天给大家介绍一款大雪滤镜,可以使你夏天的照片瞬间幻化为大雪纷飞的场景哦!先看下效果图: 上面三张图像分别是(a)原始图像,(b)PS效果图,(c)C#代码效果图 这个大雪滤镜也比较简单,按照之前的步 ...

  7. 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦

    程序员面试.算法研究.编程艺术.红黑树.数据挖掘5大经典原创系列集锦与总结 (编程艺术github:https://github.com/julycoding/The-Art-Of-Programmi ...

  8. 图像滤镜艺术---(Lightleaks Filter)漏光滤镜

    原文:图像滤镜艺术---(Lightleaks Filter)漏光滤镜 (Lightleaks Filter)漏光滤镜 漏光拍摄其实就是一种摄影手法,最初是因为强烈光照导致相片交卷的过分曝光,最终在成 ...

  9. 图像滤镜艺术---(Nostalgla Filter)老照片滤镜

    原文:图像滤镜艺术---(Nostalgla Filter)老照片滤镜 (Nostalgla Filter)老照片滤镜 Nostalgla Filter主要是通过算法来模拟一种复古,陈旧的照片风格,以 ...

最新文章

  1. Head First设计模式之目录
  2. 一起学习阿里巴巴数据中台实践!首次公开!
  3. 函数计算自动化运维实战2 -- 事件触发 eip 自动转移
  4. html div p 区别,html中div br p三者有什么区别?
  5. linux怎么把磁盘的东西拷贝,[Linux]如何拷贝已有数据磁盘,并将新的磁盘挂接到其他虚机上...
  6. redis desktop manager_面试官:Redis分布式锁如何解决锁超时问题?
  7. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85
  8. 【CentOS 7笔记11】,目录权限,所有者与所有组,隐藏权限#171022
  9. 苹果电脑mac_清理Mac苹果电脑DNS缓存
  10. 增改删(python 版)
  11. 单例设计模式 序列化破坏单例模式原理解析及解决方案?
  12. [Java 基础]控制语句
  13. python免费程序-Python——免费观看全网视频小程序
  14. 计算机excel在三维饼图改字,Excel如何一键生成饼图 Excel如何修改饼图
  15. 6. 利用word的替换功能可以完成很多工作——word高级替换技巧
  16. 景深决定照相机什么特性_2018年自考《摄影基础》复习试题及答案
  17. 域名会到期吗?到期的域名会怎么处理呢?
  18. 表白php制作教程视频,制作表白视频的软件 怎么制作出好看的表白小视频
  19. 项目管理从需求管理开始--不懂需求管理还敢带项目?
  20. 两台笔记本如何通过网线实现拓展屏

热门文章

  1. jquery mysql jsp搜索功能_实现搜索框自动提示功能(jquery+php)
  2. 处理表格数据时,去除表头两种写法,jquery 删除表头之外的数据
  3. 判断某值是否属于枚举类中的值_编写高质量可维护的代码之优化逻辑判断
  4. android lcd工具,Android东西lcd配置
  5. 利用OpenCV读取和写入视频
  6. Paddle 环境中 使用LeNet在MNIST数据集实现图像分类
  7. 霍尔开关YS1382检测速度 以及对 智能车竞赛节能组的影响
  8. 第十六届全国大学智能汽车竞赛全向组沁恒芯片申请统计情况
  9. 2021年春季学期-信号与系统-第十次作业参考答案-第二小题
  10. 2021年春季学期-信号与系统-第一次作业参考答案-第五题