数字图像增强软件设计论文.doc

上传人:风**** 文档编号:983397 上传时间:2024-03-19 格式:DOC 页数:43 大小:1.13MB
下载 相关 举报
数字图像增强软件设计论文.doc_第1页
第1页 / 共43页
数字图像增强软件设计论文.doc_第2页
第2页 / 共43页
数字图像增强软件设计论文.doc_第3页
第3页 / 共43页
数字图像增强软件设计论文.doc_第4页
第4页 / 共43页
数字图像增强软件设计论文.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、2017届毕业生毕业论文题 目: 数字图像增强软件设计 院系名称: 电气工程学院 专业班级: 自动化0903 摘要 本文介绍了图像增强处理两种基本的方法。即如何用灰度修正法和图像平滑处理法对一幅BMP图像灰度及平滑度进行调整处理,从而达到使图像增强的目的。本设计是利用VC 6.0执行的,vc6.0具有效率高,可继承、封装、移植等成熟的软件技术,本文是利用对图像进行灰度直方图均衡化算法及平滑处理法中的邻域平均法算法和选择式掩膜平滑算法来实现对图像的增强以及图像的锐化处理。实验表明,该程序可以快速、准确地对图像进行灰度变换及平滑处理,达到了使图像对比度和平滑度增强,改善图像质量的预期目的。关键词:

2、直方图均衡;邻域平均法;掩膜平滑算法;梯度锐化;拉普拉斯锐化 Title Digital image enhancement based on vc software designAbstract This paper introduces image enhancement processing two basic methods. That is how to use gray correction method and the image smooth processing method to a picture of BMP image gray and smoothness to a

3、djust processing, so as to achieve the purpose of that image enhancement. This design is the use of VC 6.0 execution, vc6.0 has high efficiency, can inherit, packaging, transplantation and mature software technology, this paper is to use to do image gray histogram equalization algorithm and the smoo

4、th process of neighborhood average method algorithm and choose type mask smoothing algorithm is proposed to realize the image enhancement. Results show that, the program can quickly and accurately to do image gray level transformation and smooth processing, to make the image contrast and smoothness

5、strengthen, improve image quality purpose.Keyword: Histogram equalization; Neighborhood average method; Mask smoothing algorithm; Gradient sharpening; Laplace sharpening 目 次一 概述5二 图像处理52.1 BMP文件的读入522 BMP文件图像的增强处理8三 直方图类93.1类的定义103.2 构造函数和析构函数103.3直方图统计103.4直方图的均值和方差113.5编程实现直方图绘制123.6 直方图均衡163.6.1理

6、论基础163.6.2算法实现173.6.3函数调用19四 图像的平滑204.1临域平均法20411.基础理论20412.算法实现21413 函数调用23414.实现结果与分析264.2选择式掩模平滑27421.基本理论27422.算法实现28423 函数调用28424.实验结果与分析29五 图像的锐化305.1梯度锐化305.1.1 算法实现325.1.2 函数调用325.1.3 实验结果与分析335.2 拉普拉斯掩模锐化345.2.1 基本理论345.2.2 算法实现355.2.3 函数调用365.2.4 实验结果与分析37结论39致谢40参考文献41附录1:函数头文件42一 概述由于噪声、

7、光照等外界环境或设备本身的原因,通常我们所获取的原始数字图像质量不是很高,因此在对图像进行边缘检测、图像分割等操作之前,一般都需要对原始数字图像进行增强处理。图像增强主要有两方面应用,一方面是改善图像的视觉效果,另一方面也能提高边缘检测或图像分割的质量,突出图像的特征,便于计算机更有效地对图像进行识别和分析。图像增强是图像处理最关键的研究问题之一,图像增强是指为了将图像中感兴趣的特征有选择地突出,而衰减其不需要的特征,要对灰度图进行灰度修正,图像增强按作用域可分为两类,即空域处理和频域处理。空域处理是直接对图像进行处理,而频域处理则是在图像的某个变化域内,对图像的变换系数进行运算,然后通过逆变

8、换获得图像增强效果。这里主要讲述了用直方图均衡化实现图像增强,能够使图像具有所需要的灰度分布,从而有选择地突出所需要的图像特征.并且利用VC6.0加以实现。当前图像处理在算法实现中主要应用Matlab 仿真工具,但Matlab运行效率较低,且可移植性和实用性均不太理想。与Java和C#等其他高级语言相比,VC 在程序运行效率、内存使用的可控性和编程的灵活性上均具有较大的优势,因此本文采用VC 6.0 集成开发环境,以达到算法快速有效地执行,同时增强了算法的可移植性。二 图像处理2.1 BMP文件的读入 BMP文件分为4个组成部分,那么BMP文件的读入也要按照4个组成部分依次进行处理,即先处理B

9、ITMAPFILEHEADER结构,然后是BITMAPINFOHEADER结构、颜色表,最后是位图数据。首先,有关BITMAPFILEHEADER、BITMAPINFOHEADER、RGBQUAD等结构的定义包含在头文件“Windows.h”中,应该把其包含进来。#include Windows.h其次,为了后面对图像进行修改及存盘方便,我们定义了几个全局变量用来存放读入图像的位图数据、宽、高、颜色表及每像素位数等信息。所以定义的全局变量如下:unsigned char *pBmpBuffer; /bmp像素指针int BmpWidth; /位图的宽度int BmpHeight; /位图的高度

10、RGBQUAD *ColorTable; /颜色表的指针int BmpBit; /每个像素占用位数 根据BMP文件结构,BMP文件读入操作的基本流程图如下图1所示: 图1 BMP文件读入操作流程图readBMP()函数实现了BMP文件的读取操作,下面的代码是对readBMP()函数的说明和实现。BOOL ImgCenterDib:Read(LPCTSTR lpszPathName)CFile file; /读模式打开图像文件if (!file.Open(lpszPathName, CFile:modeRead | CFile:shareDenyWrite)return FALSE;BITMAP

11、FILEHEADER bmfh;try Empty();/清理空间int nCount=file.Read(LPVOID) &bmfh, sizeof(BITMAPFILEHEADER);/异常判断if(nCount != sizeof(BITMAPFILEHEADER) throw new CException;if(bmfh.bfType != 0x4d42) throw new CException;if(m_lpDib!=NULL) /为m_lpDib分配空间,读取DIB进内存delete m_lpDib;m_lpDib=new BYTEfile.GetLength() -sizeof

12、(BITMAPFILEHEADER);file.Read(m_lpDib, file.GetLength() -sizeof(BITMAPFILEHEADER);/m_lpBmpInfoHead位置为m_lpDib起始位置m_lpBmpInfoHead = (LPBITMAPINFOHEADER)m_lpDib;m_imgWidth=m_lpBmpInfoHead-biWidth;m_imgHeight=m_lpBmpInfoHead-biHeight;m_nBitCount=m_lpBmpInfoHead-biBitCount; /计算颜色表长度m_nColorTableLength=Com

13、puteColorTabalLength(m_lpBmpInfoHead-biBitCount);/如果有颜色表,则创建逻辑调色板m_hPalette = NULL;if(m_nColorTableLength!=0)m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER); MakePalette();/m_pImgData指向DIB的位图数据起始位置m_pImgData = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER) +sizeof(RGBQUAD) * m_nColorTableLengt

14、h;catch(CException* pe) AfxMessageBox(Read error);pe-Delete();return FALSE;/函数返回return TRUE;BMP文件读入的结果如图2所示图2 BMP文件读入22 BMP文件图像的增强处理图像增强处理的方法有很多,这里主要应用两种方法:一、图像灰度修正;二、直方图修正。灰度修正是图像在空间域中增强的简单而有效的方法,通常根据图像不同的降质现象而采用不同的修正方法。常用的方法主要有三种:一是灰度级校正;二是灰度变换;三是直方图修正。可以根据不同的图像质量采用适当的灰度校正方法。本文主要采用直方图修正。直方图修正是图像增强

15、的最常用、最重要的方法之一。所谓直方图校正,是指通过构造灰度级变换,改造原图像的直方图,而是变换后的图像的直方图达到一定的要求,有时甚至直接给出直方图的形状,希望找到某个灰度级的变换,是原图像的直方图变成某个给定的形式。采用直方图修正可使原图像灰度级集中的区域拉开,从而增大反差,使图像的细节清晰,达到增强的目的。图像的直方图反映图像灰度的统计特性,表达了图像中去不同灰度值的面积或像素数在整幅图像中所占比例,是图像中最基本的信息。直方图的横坐标是灰度级,一般用r表示,纵坐标是具有该灰度级的像素个数或出现这个灰度级的概率P()。P()=/N式中,N为一幅图像中像素的总数,为第k级灰度的像素数,表示

16、第k个灰度级,P()表示该灰度级出现的概率。因为P()给出了对出现概率的一个估计,所以直方图提供了源图的灰度值分布情况。图像直方图灰度级的分布形态可以提供图像信息的许多特征,为图像分析提供一个有力的工具。例如,若直方图密集的分布在狭窄的区域之内,说明图像的对比度很低;若直方图有两个峰值,则说明图像中有可能存在两种不同亮度的区域。三 直方图类虽然直方图均衡属于灰度变换的范畴,由于直方图相关属性和操作与灰度线性变换相差很远。因此以ImgCenterDib为直方图单独创造一个类Histogram类,实现了直方图相关的属性和操作的封装。3.1类的定义Histogram类的定义和实现在文件“histog

17、ram.h”和“histogram.cpp”中“histogram.h”的程序源代码见附录1。3.2 构造函数和析构函数类的构造函数用来完成数据成员的初始化工作,系统在创造类的对象的自动调用构造函数。类的析构函数用来放被分配的内存空间,当类的对象消失时系统自动调用该函数。以下是Histogram类的构造函数和析构函数的说明及代码实现。Histogram:Histogram()for(int i=0;i256;i+)/直方图数组清0 m_histArrayi=0;m_average=0;/均值为0m_deviation=0;/方差为0 m_pImgDataOut=NULL;/输出图像位图数据指针

18、为空m_lpColorTableOut=NULL;/输出图像颜色表指针为空m_nColorTableLengthOut=0;/输出图像颜色表长度为0 m_nBitCountOut=0;/输出图像每像素位数为0m_imgWidthOut=0;/输出图像的宽为0m_imgHeightOut=0;/输出图像的高为03.3直方图统计Histogram类提供了一组函数,用来实现灰度图像直方图、彩色图像亮度以及各个通道直方图的统计。以下是这部分的函数说明及实现代码。Histogram:Histogram(CSize size, int nBitCount, LPRGBQUAD lpColorTable,

19、unsigned char *pImgData):ImgCenterDib(size, nBitCount, lpColorTable, pImgData)/直方图数组清0for(int i=0;iMoveWindow(&rect);rect=CRect(14,15,293,200);GetDlgItem(IDC_STATIC_ZHK)-MoveWindow(&rect);rect=CRect(70,15,200,115);GetDlgItem(IDC_COMBO_colorSelect)-MoveWindow(&rect);rect=CRect(25,155,279,168);GetDlgI

20、tem(IDC_STATIC_BmpBar)-MoveWindow(&rect);rect=CRect(29,176,130,193);GetDlgItem(IDC_STATIC_Average)-MoveWindow(&rect);rect=CRect(180,176,279,193);GetDlgItem(IDC_STATIC_Deviation)-MoveWindow(&rect);rect=CRect(221,210,277,234);GetDlgItem(IDOK)-MoveWindow(&rect);if(m_histogramDib.m_nBitCount=8) m_histog

21、ramDputeHistGray();m_histogramDputeHistBrightness();m_histogramDputeAverage();m_histogramDputeDeviation();char szStr10; sprintf(szStr, 均值:%.2f,m_histogramDib.m_average ); SetDlgItemText(IDC_STATIC_Average, szStr); /将方差信息显示在方差静态框中 sprintf(szStr, 方差:%.2f, m_histogramDib.m_deviation); SetDlgItemText(ID

22、C_STATIC_Deviation, szStr);return TRUE; 直方图绘制。为WM_PAINT映射函数OnPaint(),该函数用来绘制图像的直方图。以下是该函数的代码实现。void HistogramDrawDlg:OnPaint() /设备环境对象CPaintDC dc(this); / device context for paintingif(m_histogramDib.m_nBitCount != 8 & m_histogramDib.m_nBitCount != 24) return ;/获取直方图绘制静态框的矩形区域 CRect clientRect; GetD

23、lgItem(IDC_STATIC_HistRect)-GetWindowRect(&clientRect);ScreenToClient(&clientRect);BeginWaitCursor(); dc.SelectStockObject(NULL_BRUSH);dc.Rectangle(clientRect.left-1, clientRect.top, clientRect.right+3, clientRect.bottom+1);unsigned int max=0;for(int i=0;imax)max=m_histogramDib.m_histArrayi;DWORD bu

24、fTemp256;double x=clientRect.Height();for(i=0;i256;i+)bufTempi=(unsigned long)(float)m_histogramDib.m_histArrayi*x/max);for(i=clientRect.left;iGetPDib();/异常判断 if(pDib-m_nBitCount!=8&pDib-m_nBitCount!=24) :MessageBox(0,只处理灰度和彩色图像,MB_OK,0); return ; /直方图绘制对话框 HistogramDrawDlg dlgHist;dlgHist.m_histogr

25、amDib.ReplaceDib(pDib-GetDimensions(),pDib-m_nBitCount, pDib-m_lpColorTable, pDib-m_pImgData); /显示直方图 dlgHist.DoModal();当运行程序时,点击“直方图绘制”即显示当前图像的直方图了。直方图如图3所示:图3 直方图3.6 直方图均衡3.6.1理论基础直方图均衡的基本思想是对原始图像中的像素灰度做某种映射变换,使变换后的图像灰度的概率密度是均匀分布,即变换后图像是一幅灰度级均匀分布的图像,这意味着图像灰度的动态范围得到增加,从而可提高图像的对比度。为了研究方便,用r和s分别表示归一化

26、了的原始图像灰度和变换后的图像灰度。即0r1,0s1(0代表黑,1代表白)在0,1区间内的任何一个r值,都可以产生一个s值,且s=T(r),T(r)为变换函数。为使这种灰度变换具有实际意义,T(r)应满足下列条件:(1) 在0r1区间,T(r)为单调递增函数;(2) 在0r1区间,有0T(r)1。这里,条件(1)保证灰度级从黑到白的次序,条件(2)保证变换后的像素灰度仍在原来的动态范围内。 由s到r的反变换为:r=(s) (0s1)这里(s)对s也满足条件(1)和条件(2)。由概率论知,若原图像灰度级的概率密度函数(r)和变换函数T(r)已知,且(s)是单调递增函数,则变换后的图像灰度级的概率

27、密度函数(s)如下式所示:(s)=(r)|r=(s)对于连续图像,当直方图均衡化后有(s)=1,即:ds=(r)dr=dT(r)两边取积分得:s=T(r)=(r)dr上式就是所求的变换函数,它表明变换函数是原图像的累计分布函数,是一个非负的递增函数。 对于离散图像,假定数字图像中的总像素为N,灰度级总数为L个,第k个灰度级的值为rk,图像中具有灰度级rk的像素数目为nk,则该图像中灰度级rk的像素出现的概率为:(rk)=(0rk1;k=0,1.,L-1)对其进行均匀化处理的变换函数为:Sk=T(rk)=()=利用上式对图像进行灰度变换即可得到直方图均衡化后的图像。3.6.2算法实现直方图均衡算

28、法由直方图类Histogram的histAve()函数来实现,以下是该函数说明及代码实现。void Histogram:histAve()if(m_nBitCount!=8)return;if(m_pImgDataOut!=NULL)delete m_pImgDataOut;m_pImgDataOut=NULL;if(m_lpColorTableOut!=NULL)delete m_lpColorTableOut;m_lpColorTableOut=NULL;/输出图像每像素位数与输入图像相同m_nBitCountOut=m_nBitCount;/计算颜色表长度m_nColorTableLen

29、gthOut=ComputeColorTabalLength(m_nBitCountOut);/若有颜色表,输入图像的颜色表与输出图像颜色表相同if(m_nColorTableLengthOut!=0) m_lpColorTableOut=new RGBQUADm_nColorTableLengthOut;memcpy(m_lpColorTableOut,m_lpColorTable,sizeof(RGBQUAD)*m_nColorTableLengthOut);m_imgWidthOut=m_imgWidth;m_imgHeightOut=m_imgHeight;/输出图像每行像素所占的字节

30、数int lineByteOut=(m_imgWidth*m_nBitCountOut/8+3)/4*4;m_pImgDataOut=new unsigned charlineByteOut*m_imgHeight;/循环变量int i,j;double map256;int sum,tmp;/统计灰度直方图computeHistGray();/计算映射表sum=0;for(i=0;i256;i+)sum+=m_histArrayi;mapi=(double)sum*255/(m_imgWidth*m_imgHeight)+0.5;/输出数据赋值for(i=0;im_imgHeight;i+)

31、for(j=0;jGetPDib();/只处理灰度图像if(pDib-m_nBitCount!=8):MessageBox(0,只处理灰度图像,MB_OK,0);return ;/将pDib中的图像数据作为输入数据,调用带参数的构造函数,/定义Histogram类的对象histHistogram hist(pDib-GetDimensions(),pDib-m_nBitCount,pDib-m_lpColorTable, pDib-m_pImgData);/直方图均衡hist.histAve();下图是原图与直方图均衡的对比图,如图4所示: 图4 直方图均衡四 图像的平滑 图像的平滑方法是一种

32、实用的图像处理技术,能减弱或消除图像中的高频率分量,但不影响低频率分量。因为高频率分量主要对应图像中的区域边缘等灰度值具有较大较快变化的部分,平滑滤波将这些分量滤去可减少局部灰度起伏,使图像变得比较平滑。实际应用中平滑滤波还可用于消除噪声,或者在提取较大目标前去除过小的细节或将目标内的小间断连接起来。它的主要目标是消除图像采集过程中的图像噪声,在空间域中主要利用临域平均法、中值滤波法和选择掩模平滑法等来减少噪声;在频域内,由于噪声主要存在于频谱高频段,因此可以利用各种形式的低通滤波器来减少噪声。4.1临域平均法411.基础理论最简单的平均滤波是将原图中一个像素的灰度值和他周围邻近8个像素的灰度

33、值相加,然后将所求的的平均值作新图像中该像素的灰度值。它采用模版计算的思路,模版操作实现了一种临域运算,即某个像素点的结果不仅与本像素灰度有关,而且与临域点的向素质有关模版运算在数学中的描述就是卷积运算。临域平均法也可用数学公式表达:设f(i,j)为给定的含有噪声的图像,经过临域平均处理后的图像为g(i,j),则g(i,j)=(i,j) /N ,(i,j) M,M是所取临域中各临近像素的坐标,N是临域中包含的临近像素的个数。临域平均法的模版为:(1/9),中间的黑点表示以该像素为中心元素,即该像素是要进行处理的像素。在实际应用中,也可以根据不同的需要选择使用不同的模版尺寸,如三乘以三,五乘以五

34、,七乘以七,九乘以九等。临域平均处理法是以图像模糊为代价来减少噪声的,且模版尺寸越大,噪声减小得效果越显著。因此,临域平均法具有良好的噪声平滑效果,是最简单的一种平滑方法。412.算法实现CimgEnghance类中的成员函数AvgTemplate()实现图像的临域平均操作,程序中采用的是3乘以3的模版,即把当前函数图像f(i,j)和他周围8个图像的灰度值相加,然后将求得的平均值作为该点像素值。在对灰度图像进行临域平均时,直接调用AvgTemplate()函数即可。void CImgEnhance:AvgTemplate(int TempH, int TempW, int TempCX, int TempCY, float *fpTem

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 建筑施工 > 施工组织方案

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922