prrsw的个人博客分享 http://blog.sciencenet.cn/u/prrsw

博文

Visual Basic与图像处理12

已有 2481 次阅读 2012-10-11 13:40 |系统分类:教学心得|关键词:学者| Visual, Basic与图像处理

Visual Basic与图像处理()

9、直方图均衡化

       直方图均衡化也成为灰度均衡,是点运算较为复杂的一种,其基本原理是对图像中像素个数较多的灰度区域进行范围拓宽,而对像素较少的灰度区域,即在图像画面中不起主要作用的灰度值进行归并。一般在图像比较或者分割之前进行直方图均衡,可以使图像具有较为一致格式。比如由于光照条件使得同一背景图像有较大的亮度反差就可以利用直方图均衡化进行亮度调整。

       f(i, j), g(i, j)分别为原图像和处理后的图像,图像的灰度等级变换范围为[0, 255],直方图均衡化可以按照以下的步骤进行:

(1)    原图像直方图统计结果为Hist[255];

(2)    求原图像直方图的灰度分布概率,记作p[255];

(3)    计算元图像各个灰度等级的累计分布概率,记作PA[255],显然PA[0]=0, PA[255]=1

(4)    进行直方图均衡化新的灰度值计算,将新的灰度值存放于映射Map[255]中,其中:

Map[i]=255×PA[i]

从上述步骤来看,要做直方图均衡化,首先要计算直方图统计结果,然后再得到每个灰度等级对应的新的灰度等级,最后才能完成直方图均衡化操作。程序的实现与前面的类似,这里不在详细讲述,该例的运行界面如下图所示:

直方图均衡化按钮对应的代码如下:

Private Sub cmdGrayEqua_Click()

    Dim i As Integer, j As Integer

    Dim PixelValue As Long

    Dim r As Integer, g As Integer, b As Integer

    Dim GrayValue As Integer

   

    Dim Hist(255) As Long '存放原直方图统计结果

    Dim P(255) As Single '存放原直方图概率

    Dim PA(255) As Single '存放原直方图累计分布概率

    Dim Map(255) As Single '存放灰度等级映射结果

   

   

    Dim NGrayValue As Integer

 

   

    ThresholdValue = Val(txtThreshold)

    '设置目标图像的高度和宽度

    DestImHeight = SourceImHeight

    DestImWidth = SourceImWidth

   

    '设置目标PictureBox的大小

    PicDest.Height = DestImHeight

    PicDest.Width = DestImWidth

   

 

   

    '图像的直方图统计

    For i = 0 To SourceImHeight - 1

        For j = 0 To SourceImWidth - 1

               PixelValue = PicSource.Point(j, i)

               r = PixelValue Mod 256

               g = (PixelValue 256) Mod 256

               b = PixelValue 65536

              '插入图像处理的过程,对r, g, b进行处理

               GrayValue = 0.3 * r + 0.59 * g + 0.11 * b

              

               Hist(GrayValue) = Hist(GrayValue) + 1

              

        Next j

    Next i

   

   

    P(0) = Hist(0) / SourceImHeight / SourceImWidth

    Map(0) = 255 * P(0)

    For i = 1 To 255

        P(i) = P(i - 1) + Hist(i) / SourceImHeight / SourceImWidth

        Map(i) = 255 * P(i)

    Next i

   

    '图像的直方图均衡化

    For i = 0 To SourceImHeight - 1

        For j = 0 To SourceImWidth - 1

               PixelValue = PicSource.Point(j, i)

               r = PixelValue Mod 256

               g = (PixelValue 256) Mod 256

               b = PixelValue 65536

              '插入图像处理的过程,对r, g, b进行处理

               GrayValue = 0.3 * r + 0.59 * g + 0.11 * b

              

               NGrayValue = Map(GrayValue)

               PicDest.PSet (j, i), RGB(NGrayValue, NGrayValue, NGrayValue)

        Next j

    Next i

              

End Sub



https://m.sciencenet.cn/blog-648901-621422.html

上一篇:Visual Basic与图像处理11
下一篇:Visual Basic与图像处理13

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-19 00:56

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部