400 likes | 565 Views
数字图像处理实验. 李 露 C404 82316502(O) E-mail: lilu@buaa.edu.cn 助教:卢亚楠 (15810539617) C307. 实验目的:. 熟练掌握数字图像处理的基本算法 会用 VC++ 实现基本的图像处理算法 会自己设计算法进行图像处理 提高动手能力和理论联系实际的能力 提高分析问题和解决问题的能力. 实验内容:. 实验要求:. 1 、课前做好预习,课堂编程实现。 2 、实验课集体上机三次(签到)。
E N D
数字图像处理实验 李 露 C404 82316502(O) E-mail: lilu@buaa.edu.cn 助教:卢亚楠(15810539617) C307
实验目的: • 熟练掌握数字图像处理的基本算法 • 会用VC++实现基本的图像处理算法 • 会自己设计算法进行图像处理 • 提高动手能力和理论联系实际的能力 • 提高分析问题和解决问题的能力
实验要求: • 1、课前做好预习,课堂编程实现。 • 2、实验课集体上机三次(签到)。 • 3、实验检查时间待定。采用实验操作与实验报告综合评分。实验成绩占最终成绩的30%。 • 相关资料下载地址: http://imageprocessing.buaa.edu.cn下载专区
实验安排: • 实验一: 11月11日 19:00-21:00 • 11月15日 19:00-21:00 • 任选一个时间段即可 • 实验地点:新主楼D408 图像处理与识别实验室
数字图像处理——基础实验 图像处理的基本算法
一、实验目的: • 1.学习位图文件的基本结构; • 2.学习图像可视化编程; • 3.理解图像傅立叶变换的原理,掌握图像处理的基本操作,及其在频域的处理过程和技巧。 • 自行完成基础部分的课后作业。
二、实验环境 • 计算机 • VC++ 6.0 • 部分应用程序框架和代码。
三、实验要求 • 1.实现laplace算子、Roberts算子、Sobel算子、Kirch算子等边界检测算子中的任何两个; • 2.在已有快速傅立叶变换代码基础上,对图像进行傅里叶变换和逆傅里叶变换,了解图像傅立叶变换的旋转、平移等特性; • 3.对给定图像实现频域的平滑去噪,以及通过频域对某一幅图像添加噪声。
四、实验步骤 • 1. 在已有函数中加入边缘检测算子,观察图像处理前后的变化; • 2.自己尝试加入新的菜单并映射函数,实现新的边缘检测算子;
四、实验步骤——边缘检测 常用边缘检测算子: a) Roberts算子 近似式: 1 0 0 1 0 -1 -1 0 Roberts算子
四、实验步骤——边缘检测 b) Sobel算子 c) Prewitt算子
四、实验步骤——边缘检测 在新窗口中显示处理结果
四、实验步骤——傅立叶变换 • 了解图像傅立叶变换的旋转、平移等特性
四、实验步骤——傅立叶变换 • 了解图像傅立叶变换的旋转、平移等特性
四、实验步骤——傅立叶变换 • 3. 在已有快速傅立叶变换函数基础上,修改变换后的频谱数据,实现图像的频域平滑去噪; • 4.对频谱数据进行处理,尝试实现理想低通、正弦波载入等操作。
四、实验步骤——傅立叶变换 • 两种方法: • transform.cpp、transform.h(面向过程) • FFT.cpp、 FFT.h (面向对象) • Transform_FFT,以ImgCenterDib为基类派生,面向对象的DIB读写访问 • 使用ImgCenterDib进行可视化编程
四、实验步骤——傅立叶变换 • 将傅立叶变换函数加入所建立的工程 • 建立菜单项 • 注意:头文件是否包含进去 • 例如,用已有傅立叶变换函数做FFT变换时,需要在DemoView.cpp里添加如下头文件 • #include"math.h" • #include "MainFrm.h" • #include "transform.h"
四、实验步骤——傅立叶变换 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);
四、实验步骤——傅立叶变换 噪 声
四、实验步骤——傅立叶变换 去噪时:应当对傅立叶变换后的复数进行修改 (即,实部和虚部的数值都需要修改) FFT 原始图像 显示:频谱图 求模 复数(实部+虚部)
去噪 抑制 噪声频谱 四、实验步骤——傅立叶变换 “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;
四、实验步骤——傅立叶变换 存储傅立叶变换后的数据 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;
四、实验步骤——傅立叶变换 //加正弦波 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; } } 加噪声 增强噪声频谱
四、实验步骤——傅立叶变换 高通滤波
四、实验步骤——傅立叶变换 低通滤波
四、实验步骤——傅立叶变换 • 类似声音: 高频 细微部分:边缘,噪声 低频 粗略部分:总体的概况
五、思考题 • 观察laplace、Roberts、Sobel、Kirch等算子对边界检测的特点; • 如何实现彩色图像的边缘检测? • 傅里叶变换有哪些重要的性质,讨论图像的边缘与频率的关系? • 当图像不满足N*N时,如何对图像补0,实现其快速傅立叶变换?
实验要求: • 上机:完成“ 2013年图像课作业——基础部分”1-2题,当堂检查 • 课后:完成“ 2013年图像课作业——基础部分”3-8题 • 不需要写报告 • 提交包含1-8题作业的完整程序包,并接受检查提问(时间待定)