版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数字图像处理实验报告昆明理工大学理学院电子信息科学与技术班 级: 电信112 姓 名: 张鉴 学 号: 201111102210 指导教师: 桂进斌 完成日期: 2014.06.05 昆明理工大学理学院电子信息科学与技术112班目录 TOC o 1-1 h z u HYPERLINK l _Toc390111483 实验一 VC 6.0下bmp位图的读取与显示 PAGEREF _Toc390111483 h 3 HYPERLINK l _Toc390111484 实验二 图像基本运算点运算 PAGEREF _Toc390111484 h 13 HYPERLINK l _Toc390111485
2、 实验三 图像基本运算代数、逻辑运算 PAGEREF _Toc390111485 h 21 HYPERLINK l _Toc390111486 实验四 图像基本运算几何运算 PAGEREF _Toc390111486 h 29 HYPERLINK l _Toc390111487 实验五 直方图的绘制及其均衡 PAGEREF _Toc390111487 h 36 HYPERLINK l _Toc390111488 实验六 图像的平滑与锐化 PAGEREF _Toc390111488 h 42 HYPERLINK l _Toc390111489 实验七 伪彩色及彩色图像处理 PAGEREF _To
3、c390111489 h 50 HYPERLINK l _Toc390111490 实验八 图像傅里叶变换及低通滤波和高通滤波 PAGEREF _Toc390111490 h 55实验一 VC 6.0下bmp位图的读取与显示实验目的1. 掌握windows BMP格式位图文件的基本格式;2. 会使用VC+读取图像数据并显示。实验原理设备无关位图(DIB)设备无关位图(DIB)是一种与设备无关的位图,自带颜色信息,因此有利于在各种设备间传输。BMP中DIB的结构文件头:BITMAPFILEHEADERtypedef struct tagBITMAPFILEHEADER / bmfh WORD b
4、fType ; / signature word BM or 0 x4D42 DWORD bfSize ; / entire size of file WORD bfReserved1 ; / must be zero WORD bfReserved2 ; / must be zero DWORD bfOffsetBits ; / offset in file of DIB pixel bits BITMAPFILEHEADER, * PBITMAPFILEHEADER ;位图信息头:BITMAPINFOHEADERtypedef struct tagBITMAPINFOHEADER / bm
5、ih DWORD biSize ; / size of the structure = 40 LONG biWidth ; / width of the image in pixels LONG biHeight ; / height of the image in pixels WORD biPlanes ; / = 1 WORD biBitCount ; / bits per pixel (1, 4, 8, 16, 24, or 32) DWORD biCompression ; / compression code DWORD biSizeImage ; / number of byte
6、s in image LONG biXPelsPerMeter ; / horizontal resolution LONG biYPelsPerMeter ; / vertical resolution DWORD biClrUsed ; / number of colors used DWORD biClrImportant ; / number of important colors BITMAPINFOHEADER, * PBITMAPINFOHEADER ;调色板(可能没有):typedef struct tagRGBQUAD / rgb BYTE rgbBlue ; / blue
7、level BYTE rgbGreen ; / green level BYTE rgbRed ; / red level BYTE rgbReserved ; / = 0 RGBQUAD ;实际位图数据:typedef struct tagBITMAPINFO / bmi BITMAPINFOHEADER bmiHeader ; / info-header structure RGBQUAD bmiColors1 ; / color table array BITMAPINFO, * PBITMAPINFO ; DIB访问函数:SetDIBitsToDevice:SetDIBitsToDev
8、ice函数显示没有延伸和缩小的DIB。DIB的每个图素对应到输出设备的一个图素上,而且DIB中的图像一定会被正确显示出来也就是说,图像的顶列在上方。任何会影响设备内容的座标转换都影响了显示DIB的开始位置,但不影响显示出来的图片大小和方向。该函数如下:iLines = SetDIBitsToDevice ( hdc, / device context handlexDst, / x destination coordinate yDst, / y destination coordinate cxSrc, / source rectangle widthcySrc, / source rect
9、angle height xSrc, / x source coordinate ySrc, / y source coordinate yScan, / first scan line to draw cyScans, / number of scan lines to draw pBits, / pointer to DIB pixel bitspInfo, / pointer to DIB information fClrUse) ; / color use flagSetDIBitsToDevice函数传回所显示的扫描行的数目。因此,要调用SetDIBitsToDevice来显示整个D
10、IB图像,您需要下列信息:hdc目的表面的设备句柄代号xDst和yDst图像左上角的目的坐标cxDib和cyDibDIB的图素宽度和高度,在这里,cyDib是BITMAPINFOHEADER结构内biHeight栏位的绝对值。pInfo和pBits指向点阵图信息部分和图素位元的指标StretchDIBits:int StrechDIBits(HDC hdc,int Xdest,int Ydest,int DEstWidth,int nDestHeight,int XSrc, int Ysrc,int nSrcWidth,int SrcHeight,CONST VOID *lpBits,CONS
11、T BITMAPINFO *lpBitsInfo,UINT iUsage,DORD dwRo);要通过缩小或放大DIB,在输出设备上以特定的大小显示它,可以使用StretchDIBits:iLines = StretchDIBits ( hdc, / device context handle xDst, / x destination coordinate yDst, / y destination coordinatecxDst, / destination rectangle width cyDst, / destination rectangle height xSrc, / x so
12、urce coordinate ySrc, / y source coordinatecxSrc, / source rectangle width cySrc, / source rectangle height pBits, / pointer to DIB pixel bits pInfo, / pointer to DIB information fClrUse, / color use flagdwRop) ; / raster operation函数参数除了下列三个方面,均与SetDIBitsToDevice相同。实验内容使用VC+读取图像数据并显示。实验步骤启动VC+6.0,新建
13、一个基于MFC的应用程序项目,命名:zhangjian;进根据提示,定制应用程序的特征。得到如下图所示内容;修改视图类的基类心支持滚动条;单击完成按钮生成应用程序框架;如下图通过类向导或手动在视图类中添加成员变量m_x,类型int;按同样的方法添加以下成员变量;HBITMAP m_Bmp;LPVOID m_ColorList;LPBYTE m_Image;LPBITMAPINFOHEADER m_DibHead; enum allocate None, crtallocate, heapallocate;allocate m_nBmpallocate;allocate m_nImageallo
14、cate;DWORD m_ImageSize; int m_nPalette;HANDLE m_hFile;HANDLE m_hMap;LPVOID m_lpvFile;HPALETTE m_hPalette;HGLOBAL m_hGlob; 如下图通过类向导的功能增加成员函数SetPaletteSize(int nBitCount),类型void; 按同样的方法添加以下成员函数;void Clear();清除BOOL ReadFile(CFile *pFile);读取数据到内存BOOL SetPalette();当前位图颜色数大于设置调色板BOOL GetPalette();创建颜色数不大于
15、的调色板BOOL DibToDC(CDC* pDC,CSize size);显示位图BOOL MemToDib(LPVOID lmem);得到内存中位图象素位置CSize GetDibSize();返回位图尺寸完善成员函数代码功能,从老师给的代码中拷贝内容,结果如下;void CZhangjianView:SetPaletteSize(int nBitCount) /设置调色板大小if(m_DibHead-biSize != sizeof(BITMAPINFOHEADER) throw new CException;/抛出异常m_ImageSize = m_DibHead-biSizeImag
16、e;if(m_ImageSize = 0) DWORD dwBytes = (DWORD) m_DibHead-biWidth * m_DibHead-biBitCount) / 32;if(DWORD) m_DibHead-biWidth * m_DibHead-biBitCount) % 32)dwBytes+;dwBytes *= 4;m_ImageSize = dwBytes * m_DibHead-biHeight; m_ColorList = (LPBYTE) m_DibHead + sizeof(BITMAPINFOHEADER);if(m_DibHead = NULL) | (
17、m_DibHead-biClrUsed = 0) switch(nBitCount) case 1:m_nPalette = 2;break;case 4:m_nPalette = 16;break;case 8:m_nPalette = 256;break;case 16:case 24:case 32:m_nPalette = 0;break;default:ASSERT(FALSE);else m_nPalette = m_DibHead-biClrUsed;ASSERT(m_nPalette = 0) & (m_nPalette Read(LPVOID) &bmfh, sizeof(B
18、ITMAPFILEHEADER);if(nCount != sizeof(BITMAPFILEHEADER) throw new CException;if(bmfh.bfType != 0 x4d42) throw new CException;nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);m_DibHead = (LPBITMAPINFOHEADER) new charnSize;m_nBmpallocate = m_nImageallocate = crtallocate;nCount = pFile-Read(m_DibHead,
19、nSize); SetPaletteSize(m_DibHead-biBitCount);GetPalette();m_Image = (LPBYTE) new charm_ImageSize;nCount = pFile-Read(m_Image, m_ImageSize); catch(CException* tmpc) AfxMessageBox(文件读取错误);tmpc-Delete();return FALSE;return TRUE;BOOL CZhangjianView:SetPalette() /当前位图颜色书大于256设置调色板if(m_nPalette!=0)return
20、FALSE;CClientDC dc(this);CDC *pDC=&dc;m_hPalette=:CreateHalftonePalette(pDC-GetSafeHdc();return TRUE;BOOL CZhangjianView:GetPalette() /创建颜色数不大于256的调色板if(m_nPalette=0)return FALSE;if(m_hPalette!=NULL):DeleteObject(m_hPalette);LPLOGPALETTE pTempPalette=(LPLOGPALETTE) new char2*sizeof(WORD)+ m_nPalette
21、*sizeof(PALETTEENTRY); pTempPalette-palVersion=0 x30;pTempPalette-palNumEntries=m_nPalette;LPRGBQUAD pRGBQuad=(LPRGBQUAD)m_ColorList;for(int i=0;ipalPalEntryi.peRed=pRGBQuad-rgbRed;pTempPalette-palPalEntryi.peGreen=pRGBQuad-rgbGreen;pTempPalette-palPalEntryi.peBlue=pRGBQuad-rgbBlue;pTempPalette-palP
22、alEntryi.peFlags=0;pRGBQuad+;m_hPalette=:CreatePalette(pTempPalette);delete pTempPalette;return TRUE;BOOL CZhangjianView:DibToDC(CDC *pDC, CSize size) /显示位图if(m_DibHead=NULL) return FALSE;if(m_hPalette!=NULL)HDC hdc=pDC-GetSafeHdc();:SelectPalette(hdc,m_hPalette,TRUE);pDC-SetStretchBltMode(COLORONCO
23、LOR);:StretchDIBits(pDC-GetSafeHdc(),0,0,size.cx,size.cy, 0,0,m_DibHead-biWidth,m_DibHead-biHeight, m_Image,(LPBITMAPINFO)m_DibHead,DIB_RGB_COLORS, SRCCOPY); return TRUE;BOOL CZhangjianView:MemToDib(LPVOID lmem) /得到内存中位图像素信息Clear();m_DibHead=(LPBITMAPINFOHEADER)lmem;SetPaletteSize(m_DibHead-biBitCou
24、nt);m_Image=(LPBYTE)m_ColorList+sizeof(RGBQUAD)*m_nPalette;GetPalette();return TRUE;CSize CZhangjianView:GetDibSize() /返回位图尺寸if(m_DibHead=NULL) return CSize(0,0);return CSize(int)m_DibHead-biWidth,(int)m_DibHead-biHeight);编译测试,无误后进入下一步;加入图像文件读取与显示的代码;设置初始化函数,加入如下代码;m_x=25;CSize MaxSize(24000,32000);
25、CSize MinSize(MaxSize.cx/100,MaxSize.cy/100);SetScrollSizes(MM_HIMETRIC,MaxSize,MaxSize,MinSize);LPVOID lFirstBMP=(LPVOID):LoadResource(NULL,:FindResource(NULL,MAKEINTRESOURCE(IDB_BITMAP1),RT_BITMAP);MemToDib(lFirstBMP);(2)在位图编辑器中,编写一初始位图,命名为:张鉴,并保存;(3)建立文件打开的消息映射函数OnFileOpen(),并加入如下代码;CFileDialog f
26、iledlg(TRUE,bmp,*.bmp);if(filedlg.DoModal()!=IDOK)return;CFile myfile;myfile.Open(filedlg.GetPathName(),CFile:modeRead);if(ReadFile(&myfile)=TRUE)Invalidate();SetPalette();(4)修改OnDraw函数,并加入如下代码;BeginWaitCursor(); CSize DibSize = GetDibSize(); DibSize.cx *= m_x; DibSize.cy *= -m_x; DibToDC(pDC, DibSi
27、ze); EndWaitCursor();(5)至此,上述代码已经完成读取并显示位图的功能。数据存放在视图类中m_Image指向的内存区域。12. 位图显示如下图:实验总结通过本实验进一步熟悉了VC+6.0集成开发环境;初步学习了VC6.0下bmp位图的读取与显示;实验二 图像基本运算点运算实验目的学习位图的基本运算的基本原理;学习掌握实现位图各类点运算的基本算法。实验原理点运算的定义设输入图像的灰度为f(x,y),输出图像的灰度为g(x,y),则点运算可以表示为:g(x,y)=Tf(x,y),即灰度变换函数。其中T 是对f在(x,y)点值的一种数学运算,即点运算是一种像素的逐点运算,是灰度到
28、灰度的映射过程,故称T 为灰度变换函数。点运算可以改变图像数据所占据的灰度值范围,从而改善图像显示效果。点运算的分类点运算可分为线性点运算,分段线性点运算,非线性点运算线性点运算线性点运算的灰度变换函数形式可以采用线性方程描述,即s=ar+b。0a0,输出灰度压缩;a=1,b=0,输出灰度不变;a1,b=0输出灰度扩展整体变亮;0abiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float a=80;float b=50;float s(0);for(i=0;ih;i+)fo
29、r(j=0;jw;j+)s=a*m_Imagei*w+j+b;if(s255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnFenduanxianxing() /分段线性/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;w=m_DibHead-biWidth;h=m_Dib
30、Head-biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float a(48),b(180);float b1(20);float c(25),d(190);float s(0);for(i=0;ih;i+)for(j=0;jw;j+)if(0m_Imagei*w+j&m_Imagei*w+ja)s=(c/a)*m_Imagei*w+j+b1;if(am_Imagei*w+j&m_Imagei*w+jb)s=(d-c)/(b-a)*(m_Imagei*w+j-a)+c;if(bm_Imagei*w+j&m_Ima
31、gei*w+j255)s=(255-d)/(255-b)*(m_Imagei*w+j-b)+d;if(s255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnDuishu() /对数运算/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;w=m_DibHead-biWidth
32、;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);float c=100;double s(0);for(i=0;ih;i+)for(j=0;jw;j+)s=c*log10(m_Imagei*w+j+1);if(s255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnZhishu() /指数运算/ TODO: Add your command h
33、andler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;w=m_DibHead-biWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float c=80;float r=1.5;float b=50;double s(0);for(i=0;ih;i+)for(j=0;jw;j+)s=c*pow(m_Imagei*w+j,r);if(s255)s=255;fi*w+
34、j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnFanse() /反色/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;w=m_DibHead-biWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0
35、,w*h);for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);float a=127;for(i=0;ih;i+)for(j=0;jw;j+)if(0m_Imagei*w+j&m_Imagei*w+ja)m_Imagei*w+j=0;if(am_Imagei*w+j&m_Imagei*w+jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;m
36、emcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFi
37、leOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0
38、;jbiWidth;h=m_DibHead-biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);for(i=0;ih;i+)for(j=0;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigne
39、d charw*h;memset(f,0,w*h);int a=h/4,b=w/4;for(i=0;ih;i+)for(j=b;jbiWidth;h=m_DibHead-biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);int a=h/4,b=w/4;for(i=0;ih;i+)for(j=0;jbiWidth;h = m_DibHead-biHeight;unsigned char *f = new unsigned charw*h;memset(f, 0, w*h);float temp(0);float PI =
40、 3.1415;float beta = 30;float a = 1.5;for (i = 0; i h; i+)for (j = 0; j = w*h | y1*w + x1 = w*h | (y1 + 1)*w + x1 = 0 | y1*w + (x1+1) = w*h)continue;fy1*w + x1 = temp;f(y1 + 1)*w + x1 = fy1*w + x1;fy1*w + (x1+1) = fy1*w + x1;memcpy(m_Image, f, w*h);Invalidate();deletef;void CZhangjianView:OnButtonfa
41、ngda() /图像放大/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;m_x=int(1.2*m_x);Invalidate();void CZhangjianView:OnButtonsuoxiao() /图像缩小/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;m_x=int(0.8*m_x);Invalida
42、te();缩小和放大图像是很常用的,每次都用菜单项调节很繁琐,此时可以设置放大和缩小工具更方便的调节。在Resources面板中,找到Toolbar,双击IDR_MAINFRAME,打开工具编辑器,绘出一个“+”和一个“-”,并设分别置其ID为“放大”和“缩小”的ID,移动位置;本过程,打开一幅图像,各种几何运算结果如下:原图像:图像平移:图像旋转:图像镜像(水平):图像缩放(缩小):实验总结通过本实验更深入的学习了位图的基本运算;本实验学会了位图几何运算的基本实现方法。实验五 直方图的绘制及其均衡实验目的学习位图直方图及其均衡的基本原理;学习位图直方图绘制的基本原理;学习位图直方图均衡的算法
43、原理。实验原理直方图反映图像中灰度级与灰度级出现频率的关系的图形。直方图的离散表示:nk是图像中灰度级为rk的像素个数;rk 是第k个灰度级,k = 0,1,2,L-1;N是图像总的像素数。直方图绘制(1)统计直方图数据;(2)求直方图的概率;(3)绘图面板上绘制直方图。直方图均衡希望一幅图像的像素占有全部可能的灰度级且分布均匀,能够具有高对比度使用的方法是灰度级变换:s = T(r)基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。算法思想通过函数变换,对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减。从而
44、达到清晰图像的目的。设f、g分别为原图象和处理后的图像。(1)求出原图f的灰度直方图,设为h。h为一个256维的向量(2)计算每个灰度级的像素个数在整个图像中所占的百分比。hs(i)=h(i)/Nf (i=0,1,255)(3)计算图像各灰度级的累计分布hp。 (4)求出新图像g的灰度值。 实验内容在实验四的基础上编程实现位图直方图及其均衡的实现。实验步骤在Resources面板中,找到Menu,双击其下IDR_MAINFRAME,打开菜单编辑器,在主菜单中添加一菜单项“直方图”,再添加“直方图”,“直方图均衡”子菜单,并设置相应不同的ID号。打开类向导,分别对代数运算和逻辑运算每一个子菜单建
45、立消息响应函数。对每一个消息响应函数添加对应代码,实现相应的功能,具体如下:void CZhangjianView:OnZhifangtu() /直方图/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;int w,h;w=m_DibHead-biWidth;h=m_DibHead-biHeight;int i,j;float h0256,h1256;float fmax=0.0;for(i=0;i256;i+)h0i=0;for(i=0;ih;i+)for
46、(j=0;jw;j+)h0*(m_Image+i*w+j)+;for(i=0;i256;i+)h1i=h0i*1.0/w/h;if(fmaxh1i)fmax=h1i;/CClientDC dc(this);/for(i=0;ibiBitCount!=8)MessageBox(当前版本仅支持256色位图的操作!,系统提示!,MB_ICONINFORMATION|MB_OK);return;long w,h;long i,j;w=m_DibHead-biWidth;h=m_DibHead-biHeight;long h0256;for(i=0;i256;i+)h0i=0;for(i=0;ih;i+
47、)for(j=0;jw;j+)h0*(m_Image+i*w+j)+;/各灰度级像素数目统计double hs256;for(i=0;i256;i+)hsi=0;for(i=0;i256;i+)hsi=h0i*1.0/w/h;/个灰度级像素数目在整个图像中所占百分比double hp256;for(i=0;i256;i+)hpi=0;for(i=0;i256;i+)for(j=0;ji;j+)hpi=hpi+hsj;/各灰度级在整幅图像的累计分布for(i=0;ih;i+)for(j=0;jw;j+)*(m_Image+i*w+j)=hp*(m_Image+i*w+j)*255;/新图像的灰度
48、值Invalidate();在Resources面板中,找到Dialog,插入一个对话框“绘直方图”建立一个相应的对话框类“ZFT”,并添加成员变量:float * data,int count,float m_fmax;在上述实验代码前面包含#include ZFT.h。完成基本过程,得实验结果如下:原图像:直方图:直方图均衡图像:均衡后直方图:实验总结通过本实验初步学习了直方图及其均衡;学习了绘制直方图的基本算法原理;学习力直方图均衡的基本算法原理。实验六 图像的平滑与锐化实验目的掌握图像平滑(空间滤波)的算法以及实现;掌握握图像锐化的算法以及实现。实验原理空间滤波线性滤波器:邻域平均(均
49、值滤波器)所谓的均值滤波是指在图像上对待处理的像素给一个模板,该模板包括了其周围的邻近像素。将模板中的全体像素的均值来替代原来的像素值的方法中值滤波(统计排序滤波)虽然均值滤波器对噪声有抑制作用,但同时会使图像变得模糊。为了改善这一状况,必须寻找新的滤波器。中值滤波就是一种有效的方法。因为噪声的出现,使该点像素比周围的像素亮(暗)许多, 给出滤波用的模板,对模板中的像素值由小到大排列,最终待处理像素的灰度取这个模板中的灰度的中值。前面的处理结果可知,经过平滑滤波处理之后,图像会变得模糊。分析原因,在图像上的景物之所以可以辨认清楚是因为目标物之间存在边界。目前已经提出了许多保留边沿细节的局部平滑
50、算法,主要有K个邻点平均法,最大均匀性平滑等.空间域低通滤波多幅图像平均图像锐化处理目的:增强图像边缘及灰度跳变部分微分法锐化处理梯度法:两个特点:(1)方向为最大增加率的方向(2)幅度为:交叉微分算法(Roberts梯度算法)Sobel算子由于引入平均,对图像中随机噪声有一定的平滑作用边缘两侧元素得到加强,故边缘显得粗而亮拉普拉斯运算如果图像的模糊是由扩散现象引起的,则锐化后为:实验内容在前实验的基础上编程实现图像的平滑与锐化。实验步骤打开前一个实验工程,在Resources面板中,找到Menu,双击其下IDR_MAINFRAME,打开菜单编辑器,在“图像增强”菜单下添加“领域平均“、“中值
51、滤波”、 “拉普拉斯”、“Sobel算子”子菜单,并设置相应ID。打开类向导,分别对每一个子菜单建立消息响应函数。对每一个消息响应函数添加对应代码,实现相应的功能,具体如下:void CZhangjianView:OnLingyupingjun() /领域平均/ TODO: Add your command handler code hereunsigned char *lpsrc,*lpdst;long iWidth,iHeight;long i,j;int iTempWidth,iTempHeight;int iCenterx,iCentery;/float foef;unsigned c
52、har bArr55;for(i=0;i5;i+)for(j=0;jbiWidth;iHeight=m_DibHead-biHeight; if(m_DibHead-biBitCount!=8) MessageBox(当前版本仅支持256色位图的操作!,系统提示!,MB_ICONINFORMATION|MB_OK); return; unsigned char *lpNewBits;/lpNewBits=(unsigned char*)new unsigned char(iWidth*iHeight);/if(lpNewBits=NULL)/return; HLOCAL hNewBits;hN
53、ewBits=LocalAlloc(LHND,iWidth*iHeight);if(hNewBits=NULL)MessageBox(分配内存失败!,提示!,MB_ICONINFORMATION|MB_OK);return;lpNewBits=(unsigned char*)LocalLock(hNewBits);for(i=iCentery;iiHeight-iTempHeight+iCentery+1;i+)for(j=iCentery;jiWidth-iTempWidth+iCenterx+1;j+)lpdst=lpNewBits+i*iWidth+j; int temp;int k,l
54、;for(k=0;kiTempHeight;k+)for(l=0;l255) temp=255; *lpdst=(unsigned char)temp;:memcpy(m_Image,lpNewBits,iWidth*iHeight);Invalidate();LocalUnlock(hNewBits);LocalFree(hNewBits);void CZhangjianView:OnZhongzhilvbo() /中值滤波/ TODO: Add your command handler code herelong w,h; long i,j; w=m_DibHead-biWidth; h=
55、m_DibHead-biHeight; unsigned char hap30=0; int k,l; unsigned char *lpsrc=new unsigned charw*h; memcpy(lpsrc,m_Image,w*h); for(i=2;ih-2;i+) for(j=2;jw-2;j+) for(k=-2;k=2;k+) for(l=-2;lbiWidth;h=m_DibHead-biHeight;int temp;unsigned char *fxy=new unsigned charw*h;memcpy(fxy,m_Image,w*h);for(i=1;ih-1;i+
56、)for(j=1;j255)temp=255;m_Imagei*w+j=temp;Invalidate();delete fxy;void CZhangjianView:OnLapulasi() /拉普拉斯运算/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox(当前无图像,请打开图像!,提示);return;long i,j;long w,h;w=m_DibHead-biWidth;h=m_DibHead-biHeight;int *f=new intw*h;memset(f,0,w*h*sizeof(i
57、nt);unsigned char*g=NULL;int *f1=new intw*h;memset(f1,0,w*h*sizeof(int);int imin=10000;int imax=-10000;for(i=1;ih-1;i+)for(j=1;jw-1;j+)g=m_Image+i*w+j;fi*w+j=*(g+w)+*(g-w)+*(g+1)+*(g-1)-5*(*g);if(fi*w+jimax)imax=fi*w+j;for(i=0;ih;i+)for(j=0;jHSI:其中:HSI - RGB若设H,S,I的值在0,1之间,R,G,B的值也在0,1之间,则从HSI到RGB的转
58、换公式为:当H在0,2/3之间当H在2/3,4/3之间当H在4/3,2之间三、实验内容在前实验的基础上编程实现一幅灰度图像的伪彩色处理;在前实验的基础上编程实现彩色图像的显示及RGB和HIS的转换。四、实验步骤1.打开前一个实验工程,在Resources面板中,找到Menu,双击其下IDR_MAINFRAME,打开菜单编辑器,在“图像增强”菜单下添加“伪彩色“子菜单,并设置相应ID。2.打开类向导,分别对每一个子菜单建立消息响应函数。对消息响应函数添加对应代码,实现相应的功能,具体如下:void CZhangjianView:OnWeicaise() /伪彩色处理/ TODO: Add your command handler code here long w,h;long i,j;w=m_DibHead-biWidth;h=m_DibHead-biHeight;unsigned char temp;unsigned char *r=new unsigned charw*h;unsigned char *g=new unsigned charw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高铁信号系统电路施工合同
- 风力发电场改造爆破合同
- 市场开发协议书
- 2024年房地产交易信息保密合作合同模板版B版
- 2024年个人房产抵押借款合同(专业版)3篇
- 2024年平板车租赁与冷链物流服务合同3篇
- 2024商标授权及衍生品开发合作协议3篇
- 2024年度商铺租赁合同补充协议书(商业地产租赁协议范本)8篇
- 2024年度小店面租赁合同:租赁协议详解2篇
- 2024GRC施工分包合同-玻璃纤维增强塑料工程合同样本2篇
- 【MOOC】中药药理学-学做自己的调理师-暨南大学 中国大学慕课MOOC答案
- 2023年国家公务员录用考试《行测》真题(行政执法)及答案解析
- 精益-大学生创新与创业学习通超星期末考试答案章节答案2024年
- 运维保障年终总结
- 纪检监察业务知识试题库及答案
- GB/T 44735-2024野生动物保护繁育朱鹮
- 部编版语文八年级上学期《期末检测试卷》及答案解析
- 2024年度人教版七年级数学上册第三章一元一次方程专题测评试卷(详解版)
- 幼儿园物品采购合同模板
- 药店换证自查报告
- 数学论文往哪投稿
评论
0/150
提交评论