这时我们得到了新的图:
->100502019814120
204050>>1085141
100250200198255226->
原图中相对出现频率多的部分的宽度变大了。而出现较少的部分则变窄了。
所以,灰度直方图均衡的作用就是把一张图片上出现多的色彩拓展,而把出现少的色彩压缩。
从而得到了更“均衡”的色彩分布。
下面附上我的例程:
->PrivateTypeColorChart
ColorCount(255)AsLong'统计原来图片中的亮度出现次数
PixcelCountAsLong'记录图片的像素个数
ColRatio(255)AsSingle'记录每一个亮度的出现比例
NewVal(255)AsByte'存放新的亮度索引
EndType
DimColChartAsColorChart
PublicSubStatisticsChart()
DimRAsByte
DimGAsByte
DimBAsByte
DimGrayAsInteger
DimXAsLong
DimYAsLong
DimIAsLong
DimLAsLong
DimMAsLong
DimCAsDouble
OnErrorGoToErrLine
Done=False
TimeFilter=timeGetTime
WithColChart
ForX=0To255'先把数组清零
.ColorCount(X)=0
Next
ForX=0ToOutPutWid'这两个循环用来扫描图片数据,记录每个点的灰度和出现次数
ForY=0ToOutPutHei
R=ColVal(2,X,Y)
G=ColVal(1,X,Y)
B=ColVal(0,X,Y)
Gray=R*3 G*6 B
Gray=Gray\10
.ColorCount(Gray)=.ColorCount(Gray) 1
Next
Next
.PixcelCount=X*Y'获得图片的像素总量
C=1/.PixcelCount
.ColRatio(0)=.ColorCount(M,0)*C'计算每个亮度的出现比例
.NewVal(0)=0'色值最小的色彩总是为0,不参与计算
L=0
ForI=1To255
.ColRatio(I)=.ColorCount(I)*C .ColRatio(L)'进行加权
.NewVal(I)=.ColRatio(I)*255'计算新的颜色索引
L=L 1
Next
ForX=0ToOutPutWid
ForY=0ToOutPutHei
R=Colval(2,X,Y)'读取原来点的颜色
G=Colval(1,X,Y)
B=Colval(0,X,Y)
R=.NewVal(R)'查表得到新的颜色
G=.NewVal(G)
B=.NewVal(B)
ColOut(2,X,Y)=R'把新的颜色放到输出数组中
ColOut(1,X,Y)=G
ColOut(0,X,Y)=B
Next
Next
EndWith
Done=True
TimeFilter=timeGetTime-TimeFilter
ExitSub
ErrLine:
Done=True
MsgBoxErr.Description
EndSub->
->
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:
VB设计Win2000下截获IP数据包程序 下一篇:
VB图像处理之图像的亮度对比度调整
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】