|||
Visual Basic与图像处理(二)
4、基于灰度直方图的灰度特征值计算
前文介绍过直接基于图像的每个像素点计算图像的均值和方差,在得到图像的灰度直方图统计以后,还可以根据直方图统计结果进行图像均值和方差的计算,这种算法效率更高,程序运行更快,尤其对于尺寸较大的图像,这种优势更为明显。算法的本质是将灰度等级相同的像素点进行归类,一次性计算出其和值,然后来计算均值和方差。本例将这种算法与前文直接根据像素点计算的方法进行比对,软件的界面如下:
从图中可以看出,两者的结果是一致的,其中基于直方图的特征计算按钮对应的代码如下:
Private Sub cmdCalFeatureBaseHist_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(0 To 255) As Long
Dim SumValue As Long
Dim MeanValue As Single
Dim StdValue As Single
'直方图统计
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
'图像均值计算
For i = 1 To 255 '计算和值是,灰度等级为0的直接省略
SumValue = SumValue + Hist(i) * i
Next i
MeanValue = SumValue / SourceImHeight / SourceImWidth
MeanValue = Format(MeanValue, "0.00") '保留两位小数
txtNewMean = Str(MeanValue)
'图像标准差计算
SumValue = 0
For i = 0 To 255
SumValue = SumValue + (i - MeanValue) ^ 2 * Hist(i)
Next i
StdValue = Sqr(SumValue / SourceImHeight / SourceImWidth)
StdValue = Format(StdValue, "0.00") '保留两位小数
txtNewStd = Str(StdValue)
End Sub
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-5-19 00:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社