1 / 39

数字图像处理实验

数字图像处理实验. 李 露 C404 82316502(O) E-mail: lilu@buaa.edu.cn 助教:卢亚楠 (15810539617) C307. 实验目的:. 熟练掌握数字图像处理的基本算法 会用 VC++ 实现基本的图像处理算法 会自己设计算法进行图像处理 提高动手能力和理论联系实际的能力 提高分析问题和解决问题的能力. 实验内容:. 实验要求:. 1 、课前做好预习,课堂编程实现。 2 、实验课集体上机三次(签到)。

santos
Download Presentation

数字图像处理实验

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数字图像处理实验 李 露 C404 82316502(O) E-mail: lilu@buaa.edu.cn 助教:卢亚楠(15810539617) C307

  2. 实验目的: • 熟练掌握数字图像处理的基本算法 • 会用VC++实现基本的图像处理算法 • 会自己设计算法进行图像处理 • 提高动手能力和理论联系实际的能力 • 提高分析问题和解决问题的能力

  3. 实验内容:

  4. 实验要求: • 1、课前做好预习,课堂编程实现。 • 2、实验课集体上机三次(签到)。 • 3、实验检查时间待定。采用实验操作与实验报告综合评分。实验成绩占最终成绩的30%。 • 相关资料下载地址: http://imageprocessing.buaa.edu.cn下载专区

  5. 实验安排: • 实验一: 11月11日 19:00-21:00 • 11月15日 19:00-21:00 • 任选一个时间段即可 • 实验地点:新主楼D408 图像处理与识别实验室

  6. 数字图像处理——基础实验 图像处理的基本算法

  7. 一、实验目的: • 1.学习位图文件的基本结构; • 2.学习图像可视化编程; • 3.理解图像傅立叶变换的原理,掌握图像处理的基本操作,及其在频域的处理过程和技巧。 • 自行完成基础部分的课后作业。

  8. 二、实验环境 • 计算机 • VC++ 6.0 • 部分应用程序框架和代码。

  9. 三、实验要求 • 1.实现laplace算子、Roberts算子、Sobel算子、Kirch算子等边界检测算子中的任何两个; • 2.在已有快速傅立叶变换代码基础上,对图像进行傅里叶变换和逆傅里叶变换,了解图像傅立叶变换的旋转、平移等特性; • 3.对给定图像实现频域的平滑去噪,以及通过频域对某一幅图像添加噪声。

  10. 四、实验步骤 • 1. 在已有函数中加入边缘检测算子,观察图像处理前后的变化; • 2.自己尝试加入新的菜单并映射函数,实现新的边缘检测算子;

  11. 四、实验步骤——边缘检测

  12. 四、实验步骤——边缘检测

  13. 四、实验步骤——边缘检测

  14. 四、实验步骤——边缘检测

  15. 四、实验步骤——边缘检测

  16. 四、实验步骤——边缘检测

  17. 四、实验步骤——边缘检测

  18. 四、实验步骤——边缘检测 常用边缘检测算子: a) Roberts算子 近似式: 1 0 0 1 0 -1 -1 0 Roberts算子

  19. 四、实验步骤——边缘检测 b) Sobel算子 c) Prewitt算子

  20. 四、实验步骤——边缘检测 在新窗口中显示处理结果

  21. 四、实验步骤——边缘检测

  22. 四、实验步骤——傅立叶变换 • 了解图像傅立叶变换的旋转、平移等特性

  23. 四、实验步骤——傅立叶变换 • 了解图像傅立叶变换的旋转、平移等特性

  24. 四、实验步骤——傅立叶变换 • 3. 在已有快速傅立叶变换函数基础上,修改变换后的频谱数据,实现图像的频域平滑去噪; • 4.对频谱数据进行处理,尝试实现理想低通、正弦波载入等操作。

  25. 四、实验步骤——傅立叶变换 • 两种方法: • transform.cpp、transform.h(面向过程) • FFT.cpp、 FFT.h (面向对象) • Transform_FFT,以ImgCenterDib为基类派生,面向对象的DIB读写访问 • 使用ImgCenterDib进行可视化编程

  26. 四、实验步骤——傅立叶变换 • 将傅立叶变换函数加入所建立的工程 • 建立菜单项 • 注意:头文件是否包含进去 • 例如,用已有傅立叶变换函数做FFT变换时,需要在DemoView.cpp里添加如下头文件 • #include"math.h" • #include "MainFrm.h" • #include "transform.h"

  27. 四、实验步骤——傅立叶变换 int bufLong=w; if(h>bufLong) bufLong=h; unsigned char *buf=new unsigned char[bufLong*bufLong]; int i, j; for(i=0;i<h;i++){ for(j=0;j<w;j++) buf[i*w+j]=*(lpDIBBits+i*lineByte+j); for(j=w;j<bufLong;j++) buf[i*w+j]=0; } for(i=h;i<bufLong;i++){ for(j=w;j<bufLong;j++) buf[i*w+j]=0; } fft2D(buf, bufLong, bufLong); for(i=0;i<h;i++){ for(j=0;j<w;j++){ *(lpDIBBits+i*lineByte+j)=buf[i*bufLong+j]; } } delete []buf; ::GlobalUnlock(dib); Invalidate(); } void CDemoView::OnFft() { CDemoDoc *pDoc=GetDocument(); HDIB dib=pDoc->GetHDIB(); LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib); LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB; int w = phead->biWidth; int h = phead->biHeight; int b = phead->biBitCount/8; if(b==3) { ::MessageBox(0,“只处理灰度图象! ",NULL,MB_OK); ::GlobalUnlock(dib); return; } int lineByte=(w * b+3)/4*4; unsigned char *lpDIBBits =(unsigned char *)::FindDIBBits(lpDIB); ifft2D(buf, bufLong, bufLong);

  28. 四、实验步骤——傅立叶变换 噪 声

  29. 四、实验步骤——傅立叶变换 去噪时:应当对傅立叶变换后的复数进行修改 (即,实部和虚部的数值都需要修改) FFT 原始图像 显示:频谱图 求模 复数(实部+虚部)

  30. 去噪 抑制 噪声频谱 四、实验步骤——傅立叶变换 “transform.cpp”: 在void fft2D(unsigned char* imgBuf, int width, int height)中直接修改频谱 //频域数据保存至fftBuf fftBuf=buf; //带阻去噪 for (i=height/2-5; i<=height/2+5;i++){ for (j=width/2-10; j<= width/2-5;j++){ *(fftBuf+i*width*2+j*2+0)=0; *(fftBuf+i*width*2+j*2+1)=0; } for(j=width/2+5; j<= width/2+10;j++){ *(fftBuf+i*width*2+j*2+0)=0; *(fftBuf+i*width*2+j*2+1)=0; } } *(fftBuf+i*width*2+j*2+0) =*(fftBuf+i*width*2+j*2+0)/10; *(fftBuf+i*width*2+j*2+1) =*(fftBuf+i*width*2+j*2+1)/10;

  31. 四、实验步骤——傅立叶变换 存储傅立叶变换后的数据 transform.cpp: float *buf1=new float[n*2]; n=width*height 另一种方法 FFT.cpp: //复数类型结构体 struct ComplexNumber { float imag; // imaginary虚部 float real; //实部 }; //去噪 for(…;…;…){ for(…;…;…){ m_pFFTBuf[i*width+j].imag=0; m_pFFTBuf[i*width+j].real=0; } … } //傅立叶变换缓冲区 ComplexNumber *m_pFFTBuf;

  32. 四、实验步骤——傅立叶变换

  33. 四、实验步骤——傅立叶变换 //加正弦波 for(j=width/2-5; j<= width/2+5;j++){ for(i=height/2-25; i<=height/2-20;i++){ *(fftBuf+i*width*2+j*2+0)=*(fftBuf+i*width*2+j*2+0)*30; *(fftBuf+i*width*2+j*2+1)=*(fftBuf+i*width*2+j*2+1)*30; } for(i=height/2+20; i<=height/2+25;i++){ *(fftBuf+i*width*2+j*2+0)=*(fftBuf+i*width*2+j*2+0)*30; *(fftBuf+i*width*2+j*2+1)=*(fftBuf+i*width*2+j*2+1)*30; } } 加噪声 增强噪声频谱

  34. 四、实验步骤——傅立叶变换

  35. 四、实验步骤——傅立叶变换 高通滤波

  36. 四、实验步骤——傅立叶变换 低通滤波

  37. 四、实验步骤——傅立叶变换 • 类似声音: 高频 细微部分:边缘,噪声 低频 粗略部分:总体的概况

  38. 五、思考题 • 观察laplace、Roberts、Sobel、Kirch等算子对边界检测的特点; • 如何实现彩色图像的边缘检测? • 傅里叶变换有哪些重要的性质,讨论图像的边缘与频率的关系? • 当图像不满足N*N时,如何对图像补0,实现其快速傅立叶变换?

  39. 实验要求: • 上机:完成“ 2013年图像课作业——基础部分”1-2题,当堂检查 • 课后:完成“ 2013年图像课作业——基础部分”3-8题 • 不需要写报告 • 提交包含1-8题作业的完整程序包,并接受检查提问(时间待定)

More Related