Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->ViualBasic ->正文

VB图像处理之图像的色彩纠正

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-05 点击: [收藏] [投稿]

  这时我们得到了新的图:

->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图像处理之图像的亮度对比度调整

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号