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

博文

Visual Basic与图像处理4

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

 Visual Basic与图像处理()

有了上面介绍的PointPSet方法以后就可以进入真正的图像处理阶段了,与平时学习一样,这里同样从最简单的图像处理技术——点运算开始讲起。点运算简而言之就是对图像进行逐点运算,得到所需要的特征参数或者新的图像。点运算之所以简单是因为点运算每次只需要考虑当前一个像素点的颜色值,当然点运算不可能改变图像内的空间关系。

点运算中最简单是获得图像的特征参数包括均值、方差等,另一种就是按照特定的方式对图像的直方图进行改变,这里的特定方式可以看成是从像素到像素的操作,常见的有对比度增强、对比度拉伸或灰度变换。后面将从图像灰度化、特征参数计算、直方图统计、灰度线性变换、灰度拉伸、直方图均衡化等几种常用的实例进行讲解,同时以Visual Basic软件进行算法实现。

1、  图像的灰度化

图像的灰度化是指将原始的彩色图像转换为灰度图像,这也是后续其他点运算操作的先前操作,也就是说点运算是基于灰度图像进行的。彩色图像中RedGreenBlue三个分量值相等时,呈现出的就是一种灰度化的效果,因此要讲彩色图像转换为灰度图像只要将上述三个分量值设置为同样的值即可。这里需要讨论的只是设置灰度值的方法,有一种最简单的方法是取三个分量中的一个或者是平均值,但在实践中发现这种简单的转换方法与人的视觉习惯不太符合,因此有许多公司在研究这种灰度转换模型,在本节中,我们采用加权平均的方法实现图像的灰度化,方法如下:

Gray = 0.3*Red+0.59*Green+0.11*Blue

下面通过一个实例实现彩色图像的灰度化,本例是后续点运算的基础,同样第一次涉及图像处理的完整流程,因此讲述的稍微详细一点。

为了强调原始图像与目标图像的概念,这也是在一般图像处理软件里面都会涉及的,本例中在窗体中放置两个PictureBox控件,分别用于存放原始图像与目标图像。

读取图像的方法与前文介绍的一致,即用LoadPicture函数进行图像读取,在获得原始图像的高度和宽度以后,按照预定方式进行目标图像的高度和宽度设置,然后利用循环语句遍历原始图像,逐个改变原始图像中每个像素点的值,并将其赋值到目标图像中,就可以完成图像的点运算。这里的循环语句是后面其他图像处理中也经常需要使用的一个标准过程,其基本格式如下

For i = 0 To h - 1

        For j = 0 To w - 1

               PixelValue = Picture1.Point(j, i)

                     r = PixelValue Mod 256

               g = (PixelValue 256) Mod 256

               b = PixelValue 65536        

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

                    …….……………………………….

                  Picture2.PSet (j, i), RGB(RValue, GValue, BValue)

        Next j

 Next i

这里需要注意观察的是PointPSet方法中坐标的位置,第一个坐标是横坐标,第二个坐标是纵坐标。

有了这个标准过程就可以理解图像灰度化处理的基本代码了,首先设计该程序的软件界面,效果如下图所示:

这里读入图像按钮的代码与前文类似,这里不在阐述,下面是灰度化按钮对于代码: 

Private Sub cmdGray_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

   

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

    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

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

        Next j

    Next i

End Sub



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

上一篇:Visual Basic与图像处理3
下一篇:Visual Basic与图像处理5

2 吕喆 张学文

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

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

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

GMT+8, 2024-5-19 05:48

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部