设为主页
收藏本站
当前位置: >
首页
->
编程语言
->
ViualBasic
->
VB图像处理之图像的色彩纠正
相关分类:
ASP
ViualBasic
UML / Rational Rose
PHP4/PHP5
Perl
JAVA/JSP教程
Delphi
ColdFusion
CGI
C/C++
ASP.NET
XML
站内搜索:
智能模糊搜索
仅搜索标题
VB编程之路-如何让界面美化
(06-05)
用VB实现实时曲线的绘制和保存
(06-05)
VB调用C程序动态链接库的方法
(06-05)
浅议VB6字节数组和字符串的相互转换
(06-05)
VB入门教程之三
(06-05)
VB图像处理之像素的获取和输出
(06-05)
VB实现图像在数据库的存储与显示
(06-05)
VB图像处理之二次线性插值的应用
(06-05)
VB图像处理之几个常用滤镜的实现
(06-05)
VB图像处理之铅笔画算法和木雕算法
(06-05)
VB图像处理之图像的色彩纠正
作者:
Webmaster
来源:
Linuxdby.com
点击:
日期:
2007-06-05 [
收藏
] [
投稿
]
IE是否经常中毒?推荐您
前几次为大家讲述了如何通过操作像素来实现一些简单的滤镜效果。这次想更大家讲述一下用灰度直方图均衡来调整图像的色彩空间。
先给大家介绍一下一些颜色的小常识。以电脑的颜色来说,颜色的组成是右红、绿、蓝三种颜色组成。以最容易的24位色来说,红色、绿色、蓝色各用1个字节来表示,1个字节有8位,所以加在一起正好是24位。由于电脑无法用连续的模拟值来表示一个自然量,只能将它们分成一段一段来显示,分得越多就越接近自然。1个字节是2^8=256,所以在24位色中每一个单色都有256种不同的强度,三种颜色按照不同的强度混合,可以得到2^24种色彩。大约可以表达1677万种色彩,对于人的眼睛来说已经和自然色彩没有区别了。
如果我们用PHOTOSHOP来打开一张图片,选择LEVEL工具,就可以察看这张图片的色彩分布了。
原图:
->
->
灰度通道:
->
->
红色通道:
->
->
绿色通道:
->
->
蓝色通道:
->
->
由上面的四个通道图,我们可以发现,这张图片的色彩都是以低亮度为主,红绿蓝三色在高亮度区域的分布都很少,而灰度通道也表明整张图片的亮度值很低。
在前面的文章中,我已经和大家讲过,人眼对于灰度(亮度)的敏感程度最高。因此,如果我们能通过一种方法把这章图片的灰度提高,那么它在我们的视觉中就会有更好的表现。
或许有朋友说只要把图片加亮度,不是就可以了吗?不错,通过提高所有色彩的亮度,可以把原来处于第亮区域的色彩转移到中亮度或高亮度区域,但是大家也知道,在算法中,加亮度只是很简单的在R、G、B三个值后面直接加上一个偏移量:NewRed=OldRed Offset,NewGreen=OldGreen Offset,NewBlue Offset,但是这种做法只是“粗暴”地将整个色彩空间搬了一个位置,而没有改变其分布。请看下面,我在这张图片加上了120点亮度:再看看此时的色彩分布你就知道我为什么说它“粗暴”了。
灰度通道:
->
->
红色通道:
->
->
绿色通道:
->
->
蓝色通道:
->
->
可以看到,原图上的高亮度部分的色彩信息全部丢失,而低亮度部分(0-120)则是一片空白,如果说原来的图片是2^8×2^8×2^8一共1677万色的话,那么现在的图片则是:(256-120)^3=251万色,也就是说,通过我们给图片加了120点的亮度,我们丢失了一大半的颜色信息。
(选择加120点亮度是为了使图片的整体亮度和直方图均衡后的亮度相当,易于比较。)
那么,有什么方法可以在不丢失,或丢失很少的颜色信息的前提下做到是图片显示更好呢?
有,这就是今天要说的“灰度直方图均衡”的方法。
先给大家看一下效果:下面是将原来的图片通过灰度直方图的方法处理后的效果和前面的比较。
原图:
->
->
提高亮度120:
->
->
灰度直方图均衡:
->
->
通过直方图均衡后的颜色分布如下:
灰度通道:
->
->
红色通道:
->
->
绿色通道:
->
->
蓝色通道:
->
->
通过对比,我们可以发现,灰度直方图均衡,是对原图中的色彩分布按照出现的频率作了一个分布。
将出现最多的色彩“分”开,将出现很少的色彩“挤”得更紧,这样作的好处就是把我们眼睛所看到的主体表示得更鲜明了。
好了,关于效果,也已经说得很多了,下面我们就来说明一下这个算法是如何实现的。
首先,我们需要获取要处理的图片中所有像素的色彩分布统计,也就是上面的几个通道所作那样。
假设有一张图(我们直接用灰度来表示):
->1005020
204050
100250200->
统计入下:
->20:2
40:1
50:2
100:2
200:1
250:1->
这张图一共有9个像素,我们用比例来表示每种颜色的出现比例:
->20:2/9
40:1/9
50:2/9
100:2/9
200:1/9
250:1/9->
由于所有的色彩出现的次数不可能超过图片的总像素,因此,将所有色彩的比例相加也不会超过1(大家已经可以看出正好是1)
最后我们按照从低到高的顺序,把各个色彩的比例进行加权统计,也就是当前点的“权”等于该点的原有比例加上前一个点的“权”,我们得到一个新的统计表:
->20:2/9
40:3/9
50:5/9
100:7/9
200:8/9
250:9/9->
最后,根据这个新的统计表,我们来把像素的亮度用一个新的亮度来代替,算法为:
新亮度=该点“权”×255
->20:2/9>>20(第一点不动,依然用20)
40:3/9×255=85
50:5/9×255=141
100:7/9×255=198
200:8/9×255=226
250:9/9×255=255->
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>> 论坛入口 <<
上一页
1
2
下一页
上一篇:
VB设计Win2000下截获IP数据包程序
下一篇:
VB图像处理之图像的亮度对比度调整
【
文章评论
】 【
收藏本文
】 【
推荐好友
】 【
打印本文
】 【
我要投稿
】 【
论坛讨论
】
相关文章:
·
VB图像处理之像素的获取和输出
·
VB实现图像在数据库的存储与显示
·
VB图像处理之二次线性插值的应用
·
VB图像处理之几个常用滤镜的实现
·
VB图像处理之铅笔画算法和木雕算法
·
用VB6.0编写磁盘格式化程序
·
VB实现文件数据对SQLServer上传下载
·
用VB实现实时曲线的绘制和保存
·
VB图像处理之图像的亮度对比度调整
·
VB图像处理之图像的色彩纠正
文章评论:
(1条)
请留名:
匿名评论
点击查看所有评论
论坛讨论
声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。