|||
Visual Basic与图像处理(二)
5、灰度线性变换
灰度线性变换也是一种典型的点运算,原理也比较简单,就是将图像中所有像素点的灰度按照线性函数进行变换,以Dimage表示目标图像,Simage表示源图像,灰度线性变换可以理解为:
Dimage=k*Simage+b
其中k为线性函数的斜率,b为线性函数在y轴上的截距。当k>1时,整个图像灰度的分布区域将变大,目标图像的整体对比度增大;反之,当k<1时,整个图像灰度的分布区域将变小,目标图像的整体对比度减小;而k=1时,目标图像所有像素点的灰度增大或者减小,使得图像整体变亮或者变暗,而图像的整体对比度并不发生改变。
有两种特殊情况,当k=1,b=0时,目标图像与原图像;而当k=-1,b=255时,目标图像的灰度正好与原图像反转,就是平时所说的反相。
对于给定的k值和b值,对图像进行灰度线性变换比较简单,软件界面与灰度化处理的程序类似,直接更改其中的几句代码即可,软件的运行界面如下:
灰度线性变换按钮对应的代码如下:
Private Sub cmdLinearTrans_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 NGrayValue As Integer
Dim k As Integer, t As Integer '改用字母t,避免与颜色值变量重复
'设置目标图像的高度和宽度
DestImHeight = SourceImHeight
DestImWidth = SourceImWidth
'设置目标PictureBox的大小
PicDest.Height = DestImHeight
PicDest.Width = DestImWidth
k = Val(txtK)
t = Val(txtB)
'彩色图像的灰度线性变换
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 = k * GrayValue + t
If NGrayValue > 255 Then NGrayValue = 255 '如果超过255,统一设定为255
If NGrayValue < 0 Then NGrayValue = 0 '如果小于0,统一设定为0
PicDest.PSet (j, i), RGB(NGrayValue, NGrayValue, NGrayValue)
Next j
Next i
End Sub
特殊情况下,当k=-1,b=255时,实现的是图像的反相,效果如下图所示:
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-5-5 18:32
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社