数字图像处理DigitalImageProcessing第二讲图像的数字化温静wjing@sxu.edu.cnPage2编程方法三种形式选一–C++的CDIB类方法–OpenCV库结合C(或C++)–MatlabPage3(1)CDIB类方法图像处理的功能封装为CDIB类–C(或C++)的程序结构–MFC的程序框架(用向导生成框架)–用Windows的程序框架图像处理利用类的对象,通过成员函数实现例如:CDibm_pDibInit;if(!m_pDibInit-Read(&file)){AfxMessageBox(cannotreadthefile);return;}Page4(1)CDib类方法Page5(1)CDib类方法(续)CDib类:完成bmp的操作定义对象CDibmydib;(包括头文件CDib.h)读取像素的方法:mydib.GetPixel(20,40);读取(20,40)坐标处的像素颜色值,返回颜色数值写像素的方法:mydib.WritePixel(35,49,color);将(35,49)坐标处的像素置为当前color的颜色值。Page6(1)图像读入方法(3)利用MFC的打开文件对话框实现打开图像文件的代码如下:CDibmybmp;CSizesizeimage;voidCImageprocessView::OnOpen(){//定义CFileDialog类的对象CFileDialogFileDlg(TRUE,_T(*.bmp),,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,imagefiles(*.bmp)|*.bmp|AVIfiles(*.avi)|*.avi|AllFiles(*.*)|*.*||,NULL);Page7(1)图像读入方法(3)chartitle[]={OpenImage};FileDlg.m_ofn.lpstrTitle=title;CFilefile;if(FileDlg.DoModal()==IDOK){if(!file.Open(FileDlg.GetPathName(),CFile::modeRead)){AfxMessageBox(cannotopenthefile);return;}Page8(2)图像显示方法(3)CDib类的方法在MFC的View类中加入OnDraw成员函数,利用该成员函数在View中显示图像,假设mybmp是图像类的对象,将屏幕设备坐标系的m_origin位置作为图像原点,绘制尺度为sizeimage的图像为:CDibmybmp;CPointm_origin;CSizesizeimage(100,200);mybmp.Draw(pDC,m_origin,sizeimage);//在的窗口内显示图像Page9(1)图像读入方法(3)if(!mybmp.Read(&file)){AfxMessageBox(cannotreadthefile);return;}}if(mybmp.m_lpBMIH-biCompression!=BI_RGB){AfxMessageBox(Cannotreadcompressedfile.);return;}//取得图像的尺度sizeimage=mybmp.GetDimensions();}Page10(2)OpenCV库结合C(或C++)Intel®开源计算机视觉库OpenCV图像处理结构分析运动分析与对象跟踪模式识别照相机定标和三维重建OpenCV是Intel®开源计算机视觉库。它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法Page11OpenCV网址12OpenCV参考手册CxCore中文参考手册Cv中文参考手册CvAux中文参考手册HighGUI中文参考手册Page13OpenCV图像处理基础1、加入头文件#includecv.h#includehighgui.h“2、使用IplImage*img1;img1=cvLoadImage(path,1);img11=cvLoadImage(path,0);Page14(1)图像读入方法(2)OpenCV方法IplImage*img=0;img=cvLoadImage(lena.jpg,1);//异常判断if(!img){printf(Couldnotloadimagefile:%s\n,filename);exit(0);}Page15(2)图像显示方法(2)OpenCV使用cvShowImage函数显示图像,其调用方法如下:cvShowImage(Image,pImg);其中pImg表示已经定义的图像指针,Image为显示窗口的名称。例如:IplImage*pImg;//声明IplImage指针//读入图像pImg=cvLoadImage(lena.jpg,1);cvNamedWindow(Image,1);//创建窗口cvShowImage(Image,pImg);//显示图像cvWaitKey(0);//等待按键cvDestroyWindow(Image);//销毁窗口cvReleaseImage(&pImg);//释放图像Page16(3)matlab处理方法M文件编写%读取图像;I=imread('sag.bmp');figure(1);imshow(I);%将图像转换为灰度图像J=rgb2gray(I);figure(2);imshow(J);%存盘%imwrite(J,'e:/photo2.bmp');Page17(2)Matlab方法imread的使用方法imread:读取matalab的真彩图像图像格式转换函数:–gray2ind将灰度图像转换成索引图像–grayslice通过设定阈值将灰度图像转换成索引色图像im2bw通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图–ind2gray将索引色图像转换成灰度图像–ind2rgb将索引色图像转换成真彩色图像–mat2gray将一个数据矩阵转换成一副灰度图–rgb2gray将一副真彩色图像转换成灰度图像;–rgb2ind将真彩色图像转换成索引色图像Page18(1)图像读入方法(1)Matlab方法用Matlab方法读入图像在上章已经阐述:I=imread(‘x.bmp’);或I=imread(‘x’,‘bmp’);Matlab读入图像的类型包括强度图像(即灰度图像)、二进制图像、索引图像和RGB图像。Page19(2)图像显示方法(1)(1)Matlab方法例如:I=imread(‘x.bmp’);imshow(I)(2)OpenCV方法Page20(3)彩色图像的灰度化方法彩色图像的灰度化处理方法如下:对于彩色图像中的任意一个像素,如果其RGB的三个分量分别为R、G和B,该图像像素的灰度Gray值一般用下面公式进行计算:114.0587.0299.0BGRGrayPage21(3)彩色图像的灰度化方法for(intx=0;xsizeimage.cx;x++)for(inty=0;ysizeimage.cy;y++){RGBQUADcolor;color=mybmp.GetPixel(x,y);//RGB图像转灰度图像Gray=R*0.299+G*0.587+B*0.114doublegray=color.rgbRed*0.299+color.rgbGreen*0.587+color.rgbBlue*0.114;color.rgbBlue=(int)gray;color.rgbGreen=(int)gray;color.rgbRed=(int)gray;graybmp.WritePixel(x,y,color);}Page22第3章数字图像处理的数学基础及相关运算3.1线性系统3.2调谐信号3.3卷积和滤波3.4关联函数3.5运算类型3.6二维系统3.7点运算3.8代数运算3.9特定区域处理Page233.1线性系统–3.1.1线性系统分析–3.1.2移不变系统分析Page243.1.1线性系统分析任何一个实际系统,当给定一个输入信号u(t),则产生相应的输出信号y(t),系统的输入信号与输出信号之间实质上是一种数学运算,可以采用如图3-1所示的模型表示。图3-1应用系统模型Page25Page263.1.2移不变系统分析Page273.2调谐信号–3.2.1调谐信号分析–3.2.2对调谐信号的响应分析–3.2.3系统传递函数分析Page283.2.1调谐信号分析Page293.2.2对调谐信号的响应分析Page30Page31Page323.2.3系统传递函数分析1.传递函数的形式对于线性移不变系统,式(2-15)描述了输入信号与输出信号之间的关系,其中H()称为系统的传递函数。传递函数H()包含了所表示系统的全部特征。Page33Page342.线性移不变系统对余弦信号的输出Page35A()为系统的增益因子,代表系统对输入信号的缩放比例。为输出信号的相位,其作用是将调谐输入信号的时间坐标加以平移。综上所述,线性移不变系统具有以下性质:(1)调谐输入产生同频率的调谐输出;(2)系统的传递函数是一个仅依赖于频率的复函数,它包含了系统的全部特征信息;(3)传递函数对调谐输入信号仅产生幅值的缩放和相位的平移。Page363.3卷积和滤波–3.3.1连续卷积分析–3.3.2离散卷积分析–3.3.3滤波分析Page373.3.1连续卷积分析Page383.3.2离散卷积分析Page393.3.3滤波分析卷积运算在信号处理和图像处理学科中通常称为滤波。一个线性移不变系统输入和输出之间的关系,既可以采用传递函数进行描述,也可以采用卷积的形式进行描述。也就是说,线性移不变系统的输出可通过输入信号与系统的冲击响应函数h(t)的卷积得到,即()()()d()()d()*()ytuhthututht∞∞Page40Page413.4关联函数–3.4.1关联函数的定义分析–3.4.2关联与卷积的关系分析Page423.4.1关联函数的定义分析Page431.自关联函数Page442.互关联函数Page453.4.2关联与卷积的关系分析Page463.5运算类型具有代表性的图像处理典型算法从功能上包括以下几种:(1)单幅图像→单幅图像(2)多幅图像→单幅图像(3)单幅图像或多幅图像→数值/符号等Page473.6二维系统–3.6.1二维线性系统分析–3.6.2二维位置不变线性系统分析–3.6.3二维系统的梯度算子分析Page483.6.1二维线性系统分析Page493.6.2二维位置不变线性系统分析Page50Page513.6.3二维系统的梯度算子分析1.连续系统梯度算子Page52Page53由于无论是x方向还是y方向,离散系统的坐标值最小增量为1,因而以相邻点之差近似表示梯度分量。2.离散系统梯度算子Page54Page553.7点运算–3.7.1线性点运算分析–3.7.2非线性点运算分析–3.7.3直方图修正分析Page56对于一幅输入图像,若输出图像的每个像素点的灰度值由输入像素来决定,则这样的图像变换称为图像的点运算(pointoperation),即该点像素灰度的输出值仅是本身灰度的单一函数。点运算的结果由灰度变换函数(gray-scaletransformation,GST)确定,即:B(x,y)=ƒ[A(x,y)]式中,A(x,y)是运算前的图像像素值,B(x,y)是点运算后的图像值,ƒ是对A(x,y)的一种映射函数,即GST函数。Page573.7.1线性点运算分析当灰度变换GST函