文档章节

PS色调均化滤镜的快捷实现(C#源代码)。

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:41
字数 658
阅读 4
收藏 0

  photoshop色调均化功能通常是在进行修片处理前期比较常用的功能之一,其对扩展图像的对比度,增强视觉效果有一定的作用。在很多课本或者文章中,也称这种处理为灰度均衡化、直方图均衡化等等。算法原理都是对原始图像统计其直方图,然后通过累计分布函数,重新隐射直方图数据,使每个色阶的的分布概率都往一致的方向调整。我看到的网络上的代码,抑或是一些教材中的代码,对这个过程的描述都是相当的冗余,要么是代码累赘,效率低下,要么是萝莉啰唆,很是难受。

   在给出我的代码之前,还需要说明一些问题。对于灰度图像,由于只有一个通道,这个问题不明显,对于常见的24位图像,由于有RGB三个通道,那就存在是每个通道都单独均衡还是三通道联合计算直方图,然后利用相同的映射表在隐射RGB数据了,经过我的测试,在Photoshop中,是取的后者。

    for (Y = 0; Y < Height; Y++) { Pointer = Scan0 + Y * Stride;               // 定位到每个扫描行的第一个像素,以避免溶于数据的影响
        for (X = 0; X < Width; X++) { HistGram[*Pointer]++;                   // Blue
            HistGram[*(Pointer + 1)]++;             // Green
            HistGram[*(Pointer + 2)]++;             // Red 
            Pointer += 3;                           // 移向下一个像素
 } } Num = 0; for (Y = 0; Y < 256; Y++) { Num = Num + HistGram[Y]; Lut[Y] = (byte)((float)Num / (Width * Height * 3) * 255);       // 计算映射表
 } for (Y = 0; Y < Height; Y++) { Pointer = Scan0 + Y * Stride; for (X = 0; X < Width * 3; X += 3)          // 也可以这样写
 { Pointer[X] = Lut[Pointer[X]]; Pointer[X + 1] = Lut[Pointer[X + 1]]; Pointer[X + 2] = Lut[Pointer[X + 2]]; } }

  算法部分就是这么简单的二十几行代码,代码清晰,执行效率又特别高,数码相机中常见的4000*3000的照片100ms内就可以处理完。

    一副图像如果执行了一次色调均化,那么再次执行色调均化应该不会有任何像素发生变换了。

    从广义上讲,色调均化可以看成是直方图匹配的一个特例,即匹配的直方图分布为一条水平线。

    一些书中的色调均化是对各通道分别进行校正的,似乎这样处理的效果容易导致图像整体颜色不搭配,比如经典的Lena图:

             

                      原图                               PS的色调均化                               郎锐课本上的效果

   C#版色调均化代码:http://files.cnblogs.com/Imageshop/HistGramEqualize.rar

 

本文转载自:http://www.cnblogs.com/Imageshop/p/3139209.html

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
[发布] Photoshop 油画效果滤镜

    【原创性声明】本滤镜是我采用 PS SDK 开发而成,而滤镜的算法具体是由谁提出的可能不详,我是参考了 FilterExplorer 的源码(VC 6),本算法的主要参考来源是该项目中的 Filters.cp...

hoodlum1980
2011/01/15
0
0
MichaelJou/AlloyImage

AlloyImage - 基于HTML5技术的专业图像处理库 功能特性 ####强大功能 基于多图层操作 -- 一个图层的处理不影响其他图层 与PS对应的17种图层混合模式 -- 便于PS处理教程的无缝迁移 多种基本滤...

MichaelJou
2017/09/04
0
0
Android 相机软件--MagicCamera

MagicCamera 是 Android 平台开源相机项目,具有包括实时美颜等40种实时滤镜,功能包括对图片进行磨皮/美白等后期处理。 1.相机预览模式 示例见:com.seu.magiccamera.activity.CameraActivi...

吴昊雨
2016/01/22
2.2K
2
深度学习AI美颜系列---AI滤镜特效算法

滤镜是图像美化中必不可少的步骤, 所谓滤镜,最初是指安装在相机镜头前过滤自然光的附加镜头,用来实现调色和添加效果。我们做的滤镜算法又叫做软件滤镜,是对大部分镜头滤镜进行的模拟,当...

trent1985
05/25
0
0
半小时轻松玩转WebGL滤镜技术系列(一)

腾讯DeepOcean原创文章:dopro.io/webgl-filte… 滤镜技术一直在我们的生活中有着广泛的应用,不管是各式各样的美图软件,还是最近大热的短视频app,其中都将滤镜效果作为产品的重要卖点,有...

腾讯DeepOcean
10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
19分钟前
1
0
HashTable和Vector为什么逐渐被废弃

HashTable,不允许键值为null,还一个就是put方法使用sychronized方法进行线程同步,单线程无需同步,多线程可用concurren包的类型。 如编程思想里面说的作为工具类,封闭性做的不好没有一个...

noob_chr
昨天
0
0
Win10 下安装Win7双系统

很多人买了预装64位Win8/8.1的电脑后想重装(或者再安装一个)Win7系统,但是折腾半天发现以前的方法根本不奏效。这是因为预装Win8/8.1的电脑统一采用了UEFI+GPT引导模式,传统的BIOS(Legacy...

yaly
昨天
2
0

中国龙-扬科
昨天
2
0
假若明天来临——《AI.未来》读后感3900字

假若明天来临——《AI.未来》读后感3900字: 你有没有想过,如果有一天你被确诊为癌症患者,你会做些什么?你有没有想过,在你百年之后,你希望你的墓碑上刻写着什么内容? 在我翻开李开复老...

原创小博客
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部