博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win8 Metro(C#)数字图像处理--2.42图像光照效果算法
阅读量:7126 次
发布时间:2019-06-28

本文共 2696 字,大约阅读时间需要 8 分钟。

原文:



[函数名称]

图像光照效果  SunlightProcess(WriteableBitmap src,int X,int Y,float thresould)

[算法说明]

  图像光照效果就是在图像中添加上一个太阳光源,以此模仿光照条件。主要算法包括:

1光源选择;2光照像素值求取。

  1,光源选择。我们假设光源位置坐标为S(X,Y),其中光源坐标一定要保证在图像大小

范围内。有了光源位置,我们就可以来构建一个圆形区域模拟光照了。我们设定光源半

径为R,那么,光照范围就是以S(X,Y)为圆心,以R为半径的圆了。

  根据光源特性,在图像中表现为中间靠近圆心最亮,亮度延半径方向向四周逐渐减弱。

因此,我们根据光源圆形的范围内像素距离圆心的欧几里得距离来构建线性变换的公式,

假设欧几里得距离为D,变换后的像素值为f,则公式如下:

///         /// Sun light process.        ///         /// The source image.        /// X location of light source.        /// Y location of light source.        /// Light intensity value.        /// 
public static WriteableBitmap SunlightProcess(WriteableBitmap src,int X,int Y,float thresould)41图像光照函数 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap srcImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] tempMask = (byte[])temp.Clone(); double b = 0, g = 0, r = 0; if (X >= w || Y >= h || X < 0 || Y < 0) { X = w / 2; Y = h / 2; } Point Cen = new Point(X, Y); int R = Math.Min(X, Y); float curR = 0; float pixelValue = 0; for (int j = 0; j < h; j++) { for (int i = 0; i < w; i ++) { b = tempMask[i * 4 + j * w * 4]; g = tempMask[i * 4 + 1 + j * w * 4]; r = tempMask[i * 4 + 2 + j * w * 4]; curR=(float)Math .Sqrt(Math .Pow((i-Cen .X ),2)+Math .Pow ((j-Cen.Y ),2)); if (curR < R) { pixelValue = thresould * (1.0f - curR / R); b = b + pixelValue; g = g + pixelValue; r = r + pixelValue; temp[i*4 + j * w * 4] = (byte)(b > 0 ? (b < 255 ? b : 255) : 0); temp[i * 4 + 1 + j * w * 4] = (byte)(g > 0 ? (g < 255 ? g : 255) : 0); temp[i * 4 + 2 + j * w * 4] = (byte)(r > 0 ? (r < 255 ? r : 255) : 0); b = 0; g = 0; r = 0; } } } Stream sTemp = srcImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(temp, 0, w * 4 * h); return srcImage; } else { return null; } }
你可能感兴趣的文章
我的友情链接
查看>>
Thinkphp5开发OA办公系统-人事管理模块
查看>>
attr的format类型
查看>>
Maven多环境打包
查看>>
我的友情链接
查看>>
PhpStorm 头部注释、类注释和函数注释的设置
查看>>
我的友情链接
查看>>
Selenium2(webdirver)入门之环境搭建(Java版)
查看>>
MySQL入门-10:子查询与联结表
查看>>
VMware三个版本workstation、server、esxi的区别
查看>>
Nginx 安装及调优
查看>>
hbase shell基本操作命令详解
查看>>
网络编程学习——数据链路访问
查看>>
CentOS6.2下搭建LVS(NAT)+Keepalived实现高性能高可用负载均衡服务
查看>>
Centos7下安装及配置PPTP ***
查看>>
oracle 配置监听器
查看>>
Red Hat 配置本地 yum源
查看>>
[翻译]CloudBees 设计原则
查看>>
MFS分布式文件系统的管理和使用维护(二)
查看>>
Spring实现AOP的几种方式详解
查看>>