利用API增强VB的图像处理功能_第1页
利用API增强VB的图像处理功能_第2页
利用API增强VB的图像处理功能_第3页
利用API增强VB的图像处理功能_第4页
利用API增强VB的图像处理功能_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、利用 API 增强 VB 的图像处理功能The Method of Enhancing Ability of VB's Image Processing Using API马 靖 陈江林 摘要:本文介绍了应用 API 函数增强 Visual Basic 的图像处理功能的方法。用 API 直接 对显示缓存操作的函数进行图像处理,扩展了 VB 的图像处理功能,提高了程序的执行效率。 利用 API 函数, 对曝光不足和过度的胸部 X 影像进行灰度拉伸增强处理, 获得了满意的效果。关键词:API 函数 图像处理 函数声明 对比度扩展中图分类号 :TP311 文献标识码 :AAbstract:

2、This paper introduces a method of the enhancing ability of VB's image processing using API. It expanded the competency of image processing and raised the efficiency of executive program by operating the functions display buffer oriented during image processing. The satisfactory purpose is gained

3、 through contrast stretching referring to underexposured and upperexposured X-ray image about bosom .Keywords : API functions Image processing Function declaration Contrast stretch 1 引言Windows 应用程序接口 API (Application Programming Interface是可视化编程工具的扩 展和延伸,特别对于 Visual Basic尤为重要, Visual Basic具有易学易用、功能强、

4、见效快等 突出特点,但 VB 程序执行效率低,特别对于数据庞大的图像处理显得尤为突出。 Win32 API提供了大量的应用程序接口可供 VB 直接调用,用 API 直接对显示缓存操作的函数进行图像 处理,扩展了 VB 的图像处理功能,提高了程序的执行效率。本文利用 API 函数,对曝光不 足和过度的胸部 X 影像进行灰度拉伸增强处理,获得了满意的效果。2 基本原理曝光不足和过度的 X 线影像,其直方图集中于狭小的范围内,像素之间的对比度差,因 此不易判读,要改善视觉效果,就必须提高对比度。由于影像亮度不足或非线性会使影像的对比度不甚理想,灰度修改技术是一种简便而有 效的提高图像对比度的方法,设

5、输入图像为 f(x,y,输出图像为 g(x,y,则灰度修改技术的数 学表达式可表示为:g(x,y=Tf(x,y式中 T 为灰度修改的具体映射关系,选用线性变换(如图 1 ,即:g(x,y= Tf(x,y=ab a b11f(x,y-a+a1 b 1a 1f(x,ya b图 1 灰度范围的线性关系对灰度作线性变换以后, 把原始图 f(x,y的灰度范围 a,b强行扩展为装置允许的最大范围 a1,b 1,从而提高了整幅图像的对比度, X 线图像质量明显改观,原来观察不到的图像细节更 突出了。3 实现方法和相关 API 函数首先要找到原始图像的动态范围 a,b, 再确定装置允许的最大范围 a1,b 1

6、, 针对灰度图像, 显示器一般为 8bits 即 256级灰度,所以拉伸后的新图像的动态范围确定为 0,255。 API 直接 对显存操作以及相关的图像处理函数主要有以下几个:3.1 CreateCompatibleBitmap函数 功能是建立与指定设备环境相关的设备兼容位图。其 函数原形:HBITMAP CreatecompatibleBitmap (HDC hdc,int nWidth,int nHeight;其中参数 hdc 为设备环境句柄;nWidth 为指定位图的宽度,单位为像素;nHeight 为指定位图的高度,单位为像素。3.2 CreateCompatibleDC函数 功能是在

7、内存中建立一个设备环境。其函数原形:BOOL CreateCompatibleDC(HDC hdc;其中参数 hdc为要建立的设备环境语柄。3.3 SelectObject函数 功能是将选择的一个对象放到指定的设备环境中,新对象替换先 前的相同类型的对象。其函数原形:HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj;其中参数 hdc为设备环境语柄 ;hgdiobj 为被选择对象的语柄,该对象可以是位图等,且必须由指定的函数 建立。3.4 SetPi xelV函数 功能是在指定的设备环境中设置一个像素的 RGB 颜色值。 其函数原形:BOOL SetPi

8、xelV(HDC hdc,int X,int Y,COLORREF crColor;其中参数 hdc 为设备环境语柄;X 为要设置点的 X 坐标;Y 为要设置点的 Y 坐标;CrColor 为指定设置点像素的 RGB 颜色。3.5 BitBlt函数 功能是对指定的设备环境区域中的像素进行位块转换,并传送到另一个 设备环境。 进行位块转换的设备环境称为源设备环境, 要传送的设备环境称为目标设备环境; 源和目标设备环境必须相互兼容。其函数原形:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSr

9、c,int nXSrc,int nYSrc,DWORD dwRop;其中参数 hdcDest 为目标设备环境语柄;nXDest 为目标设备环境矩形区域左上角的 X 逻辑坐标;nYDest 为目标设备环境矩形区域左上角的 Y 逻辑坐标;nWidth 为源和目标矩形区域的逻辑宽度;nHeight 为源和目标矩形区域的逻辑高度;hdcSrc 为源设备环境语柄;nXSrc 为源设备环境矩形区域左上角的 X 逻辑坐标;nYSrc 为源设备环境矩形区域左上角的 Y 逻辑坐标;dwRop 为指定光栅运算代码。3.6 DeleteDC函数 功能是删除指定的设备环境,并释放相关的窗口资源。其函数原形: BOOL

10、 DeleteDC(HDC hdc;其中 hdc为要删除的设备环境语柄。3.7 DeleteObject函数 功能是删除对象,释放所有与该对象有关的系统资源,对象被删 除之后指定的语柄随之失效。其函数原形:BOOL DeleteObject(HGDIOBJ hobject;其中参数 hobject为对象的语柄。4 程序设计API 函数调用之前必须先进行声明, VB 可以在标准模块、类模块或窗体模块中声明;以 下程序的标准模块中除了对以上 7个函数进行了声明外, 还对位图 BMP 格式用到的结构作了 定义即头文件(bitmapfileheader 、头信息(bitmapinfoheader 和调

11、色板(rgbquad 。本程序 窗体模块分为两个图片框(picture1、 picture2分别画原始图像和对比度增强后的图像、四个 命令按钮分别为打开文件、读入位图图像数据、对比度增强处理和关闭。限于篇幅这里仅列 出了标准模块和对比度增强处理模块。该程序在 VB6.0、 Windows98/2000下运行通过。 Module 模块Option ExplicitPublic Type bitmapfileheaderbftype As Integerbfsize As Longbfreserved1 As Integerbfreserved2 As Integerbfoffbits As Lo

12、ngEnd TypePublic Type bitmapinfoheaderbisize As Longbiwidth As Longbiheight As Longbiplanes As Integerbibitcount As Integerbicompression As Longbisizeimage As Longbixpelspermeter As Longbiypelspermeter As Longbiclrused As Longbiclrimportant As LongEnd TypePublic Type rgbquadrgbblue As Bytergbgreen A

13、s Bytergbred As Bytergbreserved As ByteEnd TypePublic bf As bitmapfileheaderPublic bl As bitmapinfoheaderPublic Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long As LongPublic Declare Function CreateCompatibleDC Lib "gd

14、i32" (ByVal hdc As Long As LongPublic Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long As Long Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long,

15、 ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long As LongPublic Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long As LongPublic Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Lo

16、ng As LongPublic Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long As LongDim piccol(6256, 6256, 2 As ByteDim xpos As IntegerDim ypos As IntegerDim i, j As IntegerDim picturename As String 图像对比度增强处理Private Sub Command3_Click(Dim Vpic(2 As Integer Dim i, j As Integer Dim a0,

17、a1, a2, b0, b1, b2 As Integer Dim hbmp, hDestDC As Long hbmp = CreateCompatibleBitmap(picture2.hdc, picture2.ScaleWidth, picture2.ScaleHeight hDestDC = CreateCompatibleDC(picture2.hdc SelectObject hDestDC, hbmp picture2.Cls Screen.MousePointer = 11 a0 = piccol(0, 0, 0 a1 = piccol(0, 0, 1 a2 = piccol

18、(0, 0, 2 b0 = piccol(0, 0, 0 b1 = piccol(0, 0, 1 b2 = piccol(0, 0, 2 For i = 0 To ypos - 1 For j = 0 To xpos - 1 If a0 > piccol(j, i, 0 Then a0 = piccol(j, i, 0 End If If b0 < piccol(j, i, 0 Then b0 = piccol(j, i, 0 End If If a1 > piccol(j, i, 1 Then a1 = piccol(j, i, 1 End If If b1 < pi

19、ccol(j, i, 1 Then b1 = piccol(j, i, 1 End If If a2 > piccol(j, i, 2 Then a2 = piccol(j, i, 2 End If If b2 < piccol(j, i, 2 Then b2 = piccol(j, i, 2 End If Next j Next i For i = 0 To ypos - 1 For j = 0 To xpos - 1 Vpic(0 = CInt(piccol(j, ypos - i - 1, 0 - a0 / (b0 - a0 * 255 Vpic(1 = CInt(picco

20、l(j, ypos - i - 1, 1 - a1 / (b1 - a1 * 255 Vpic(2 = CInt(piccol(j, ypos - i - 1, 2 - a2 / (b2 - a2 * 255 SetPixelV hDestDC, j, i, RGB(Vpic(2, Vpic(1, Vpic(0 Next j picture2.Refresh Next i BitBlt picture2.hdc, 1, 1, picture2.ScaleWidth - 2, picture2.ScaleHeight - 2, hDestDC, 1, 1, vbSrcCopy Screen.MousePointer = 0 Call DeleteDC(hDestDC Call DeleteObject(hbmp End Sub 参考文献 1、 李 罡,丁 莉 编著。Visual Basic 6.0 编程实例详解。北京:电子工业出版社,19

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论