数字图像处理实验说明指导书

上传人:第*** 文档编号:30644476 上传时间:2018-01-31 格式:DOC 页数:33 大小:1.62MB
返回 下载 相关 举报
数字图像处理实验说明指导书_第1页
第1页 / 共33页
数字图像处理实验说明指导书_第2页
第2页 / 共33页
数字图像处理实验说明指导书_第3页
第3页 / 共33页
数字图像处理实验说明指导书_第4页
第4页 / 共33页
数字图像处理实验说明指导书_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《数字图像处理实验说明指导书》由会员分享,可在线阅读,更多相关《数字图像处理实验说明指导书(33页珍藏版)》请在金锄头文库上搜索。

1、数字图像处理实验说明一实验目的:1 实现图像显示的功能,用打点和快速显示的方式实现2 对图像进行求反3 绘制图像的直方图4 对图像进行均衡和规定化操作5 阈值变换6 图像的正交变换(傅立叶正变换,傅立叶反变换,离散余旋正反变换,沃尔什变换)7 滤波器的实现(低、带、高通,分别用理想,巴特沃斯,梯形,以及指数滤波实现)8 图像平滑以及中值滤波9图像锐化(梯度锐化,拉普拉斯锐化)10图像退化及复原(加亮点以及加随机噪声)11图像边缘检测(Robert 检测,拉普拉斯检测,索贝尔检测,kirsch 边缘检测)二实验步骤1 实现图像显示的功能,用打点和快速显示的方式实现实现图像显示首先要读取图象的文件

2、头,文件位图信息头,调色板以及图像数据信息,依次读取图像的每个像素值,然后用打点显示在对应位置显示出该点的像素值,注意的一点是应该用 256 减去读取得坐标才会显示正常的图像,否则图像会是倒置的,具体的 VC语言实现程序为:void CWplView:OnDraw(CDC* pDC) BeginWaitCursor();CWplDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);int i,j;int R,G,B;lpBMP=(LPSTR):GlobalLock(HGLOBAL)pDoc-GetHDIB();if(lpBMP=NULL)/防止内存不足ret

3、urn;lpDIBBits=:FindDIBBits(lpBMP);/ 指向 BITMAPINFO 结构的指针(Win3.0)LPBITMAPINFO lpbmi;/ 获取指向 BITMAPINFO 结构的指针(Win3.0)lpbmi = (LPBITMAPINFO)lpBMP;height=:DIBHeight(lpBMP);width=:DIBWidth(lpBMP);lLineBytes = WIDTHBYTES(width * 8);f(flag=1)/打点显示for (i = 0; i bmiColors*lpSrc.rgbRed;G=lpbmi-bmiColors*lpSrc.r

4、gbGreen;B=lpbmi-bmiColors*lpSrc.rgbBlue;pDC-SetPixel(j,height-i,RGB(R,G,B);else/ 快速HDIB hDIB = pDoc-GetHDIB();if (hDIB != NULL)LPSTR lpDIB = (LPSTR) :GlobalLock(HGLOBAL) hDIB);int cxDIB = (int) :DIBWidth(lpDIB);int cyDIB = (int) :DIBHeight(lpDIB);:GlobalUnlock(HGLOBAL) hDIB);CRect rcDIB;rcDIB.top =

5、rcDIB.left = 0;rcDIB.right = cxDIB;rcDIB.bottom = cyDIB;CRect rcDest;:PaintDIB(pDC-m_hDC, &rcDest, pDoc-GetHDIB(),2 对图像进行求反图像求反是灰度的一种线性变换,可以用灰度变换方程来实现,实现代码为:unsigned char* lpSrc;/ 循环变量LONG i;LONG j;LONG lLineBytes;FLOAT fTemp;lLineBytes = WIDTHBYTES(lWidth * 8);for(i = 0; i 255)*lpSrc = 255;else if

6、(fTemp GetClientRect(m_MouseRect);pWnd-ClientToScreen(CRect rect;GetClientRect(rect);ClientToScreen(m_MouseRect.top -= rect.top;m_MouseRect.left -= rect.left;m_MouseRect.top += 25;m_MouseRect.left += 10;m_MouseRect.bottom = m_MouseRect.top + 255;m_MouseRect.right = m_MouseRect.left + 256;for (i = 0;

7、 i GetDC();pWnd-Invalidate();pWnd-UpdateWindow();pDC-Rectangle(0,0,330,300);CPen* pPenRed = new CPen;pPenRed-CreatePen(PS_SOLID,1,RGB(255,0,0);CPen* pPenBlue = new CPen;pPenBlue-CreatePen(PS_SOLID,1,RGB(0,0, 255);CPen* pPenGreen = new CPen;pPenGreen-CreatePen(PS_DOT,1,RGB(0,255,0);CGdiObject* pOldPe

8、n = pDC-SelectObject(pPenRed);pDC-MoveTo(10,10);pDC-LineTo(10,280);pDC-LineTo(320,280);/ 写 X 轴刻度值str.Format(0);pDC-TextOut(10, 283, str);str.Format(50);pDC-TextOut(60, 283, str);str.Format(100);pDC-TextOut(110, 283, str);str.Format(150);pDC-TextOut(160, 283, str);str.Format(200);pDC-TextOut(210, 283

9、, str);str.Format(255);pDC-TextOut(265, 283, str);/ 绘制 X 轴刻度for (i = 0; i MoveTo(i + 10, 280);pDC-LineTo(i + 10, 284);else/ 10 的倍数pDC-MoveTo(i + 10, 280);pDC-LineTo(i + 10, 282);/ 绘制 X 轴箭头pDC-MoveTo(315,275);pDC-LineTo(320,280);pDC-LineTo(315,285);/ 绘制 Y 轴箭头pDC-MoveTo(10,10);pDC-LineTo(5,15);pDC-Mov

10、eTo(10,10);pDC-LineTo(15,15);/ 计算最大计数值for (i = m_lowgray; i lMaxCount)lMaxCount = m_lCounti;for (i = m_lowgray; i MoveTo(10, 25);pDC-LineTo(14, 25);str.Format(%f, lMaxCount/s);pDC-TextOut(11, 26, str);pDC-SelectObject(pPenGreen);pDC-MoveTo(m_lowgray + 10, 25);pDC-LineTo(m_lowgray + 10, 280);pDC-Move

11、To(m_upgray + 10, 25);pDC-LineTo(m_upgray + 10, 280);pDC-SelectObject(pPenBlue);if (lMaxCount 0)/ 绘制直方图for (i = m_lowgray; i MoveTo(i + 10, 280);pDC-LineTo(i + 10, 281 - (int) (m_lCounti * 256 / lMaxCount);pDC-SelectObject(pOldPen);delete pPenRed;delete pPenBlue;delete pPenGreen;CDialog:OnPaint()实验结

12、果图如图 31:图 314 对图像进行均衡和规定化操作1) 均衡对直方图均衡,可以通过点运算使输入图像转换为在每一灰度级上都有相同的象素点的输出图象,均衡化后直方图理论上是平的,但是实际中有一些差距。实现方法是: unsigned char* lpSrc;LONG lTemp;LONG i;LONG j;/ 灰度映射表BYTE bMap256;LONG lCount256;LONG lLineBytes;lLineBytes = WIDTHBYTES(lWidth * 8);/ 重置计数为 0for (i = 0; i 0)/ 线性变换bMapi = (BYTE) bY1 * i / bX1;

13、elsebMapi = 0;for (; i bThre&(*lpSrc) *TD = new complexw * h;complex *FD = new complexw * h;extern complex *DataTemp;DataTemp= new complexw * h;for(i = 0; i (*(lpSrc), 0);for(i = 0; i 255)dTemp = 255;/ 指向 DIB 第 (i型数组的内存,数组中有 w*h 个元素complex *TD = new complexw * h;extern complex *DataTemp;lpSrc = (uns

14、igned char*)lpDIBBits;for(i = 0; i 255)dTemp = 255;/ 更新源图像* (lpSrc+) = (BYTE)(dTemp);/ 删除临时变量delete TD;return TRUE;实验结果为图 62。图 61 图 623).余旋正反变换unsigned char* lpSrc;LONG i;LONG j;/ 进行付立叶变换的宽度和高度(2 的整数次方)LONG w;LONG h;double dTemp;int wp;int hp;LONG lLineBytes;lLineBytes = WIDTHBYTES(lWidth * 8);/ 赋初值

15、w = 1;h = 1;wp = 0;hp = 0;/ 计算进行离散余弦变换的宽度和高度(2 的整数次方)while(w * 2 255)/ 对于超过的,直接设置为 255dTemp = 255;lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 更新源图像* (lpSrc) = (BYTE)(dTemp);delete f;delete F;return TRUE;实验结果为图 63。4). 沃尔什变换BOOL WINAPI DIBWalsh(LPSTR lpDIBBits, LONG lWidth, LONG lHeight) unsigned char* lpSrc;LONG i;LONG j;/ 进行付立叶变换的宽度和高度(2 的整数次方)LONG w;LONG h;double dTemp;int wp;int hp;LONG lLineBytes;lLineBytes = WIDTHBYTES(lWidth * 8);/ 赋初值w = 1;h = 1;wp = 0;hp = 0;/ 计算进行离散余弦变换的宽度和高度(2 的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号