您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 图像处理分析-FFT复习过程
精品文档精品文档实验名称实验5:频域滤波实验目的掌握图像进行频域滤波的方法和步骤。1、掌握图像频域DFT变换和反变换的方法。2、掌握图像频域滤波的步骤实验内容1、灰度图像的DFT和IDFT。具体内容:利用OpenCV提供的cvDFT函数对图像进行DFT和IDFT变换2、利用理想高通和低通滤波器对灰度图像进行频域滤波具体内容:利用cvDFT函数实现DFT,在频域上利用理想高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),要求截止频率可输入。3、利用布特沃斯高通和低通滤波器对灰度图像进行频域滤波。具体内容:利用cvDFT函数实现DFT,在频域上进行利用布特沃斯高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),要求截止频率和n可输入。实验完成情况1、实验步骤:利用OpenCV提供的cvDFT函数对图像进行DFT和IDFT变换核心代码如下://DFT变换IplImage*DFT(IplImage*src){IplImage*fourier=cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2);intdft_H,dft_W;dft_H=src-height;dft_W=src-width;CvMat*src_Re=cvCreateMat(dft_H,dft_W,CV_64FC1);//doubleRe,Im;CvMat*src_Im=cvCreateMat(dft_H,dft_W,CV_64FC1);//ImaginarypartCvMat*sum_src=cvCreateMat(dft_H,dft_W,CV_64FC2);//2channels(src_Re,src_Im)CvMat*sum_dst=cvCreateMat(dft_H,dft_W,CV_64FC2);//2channels(dst_Re,dst_Im)cvConvert(src,src_Re);cvZero(src_Im);cvMerge(src_Re,src_Im,0,0,sum_src);cvDFT(sum_src,sum_dst,CV_DXT_FORWARD,0);cvConvert(sum_dst,fourier);cvReleaseMat(&src_Re);cvReleaseMat(&src_Im);cvReleaseMat(&sum_src);cvReleaseMat(&sum_dst);returnfourier;}精品文档精品文档//DFT反变换IplImage*IDFT(IplImage*fourier){IplImage*dst=cvCreateImage(cvGetSize(fourier),IPL_DEPTH_8U,1);intdft_H,dft_W;dft_H=fourier-height;dft_W=fourier-width;CvMat*dst_Re=cvCreateMat(dft_H,dft_W,CV_64FC1);//doubleRe,Im;CvMat*dst_Im=cvCreateMat(dft_H,dft_W,CV_64FC1);//ImaginarypartCvMat*sum_dst=cvCreateMat(dft_H,dft_W,CV_64FC2);//2channels(dst_Re,dst_Im)CvMat*sum_src=cvCreateMat(dft_H,dft_W,CV_64FC2);cvConvert(fourier,sum_src);cvDFT(sum_src,sum_dst,CV_DXT_INV_SCALE,0);cvSplit(sum_dst,dst_Re,dst_Im,0,0);cvConvert(dst_Re,dst);cvReleaseMat(&dst_Re);cvReleaseMat(&dst_Im);cvReleaseMat(&sum_src);cvReleaseMat(&sum_dst);returndst;}//归一化,将灰度映射到0~255之间,并将能量最高的四角移到中心,生成图片频域能量图voidBuildDFTImage(IplImage*fourier,IplImage*dst){IplImage*image_Re=0,*image_Im=0;image_Re=cvCreateImage(cvGetSize(fourier),IPL_DEPTH_64F,1);image_Im=cvCreateImage(cvGetSize(fourier),IPL_DEPTH_64F,1);//ImaginarypartcvSplit(fourier,image_Re,image_Im,0,0);//ComputethemagnitudeofthespectrumMag=sqrt(Re^2+Im^2)cvPow(image_Re,image_Re,2.0);cvPow(image_Im,image_Im,2.0);cvAdd(image_Re,image_Im,image_Re);cvPow(image_Re,image_Re,0.5);cvReleaseImage(&image_Im);精品文档精品文档cvAddS(image_Re,cvScalar(1.0),image_Re);//1+MagcvLog(image_Re,image_Re);//log(1+Mag)//重新安排傅里叶图像中心//RearrangethequadrantsofFourierimagesothattheoriginisat//theimagecenterdoubleminVal=0,maxVal=0;cvMinMaxLoc(image_Re,&minVal,&maxVal);//LocalizeminimumandmaximumvaluesCvScalarmin;min.val[0]=minVal;doublescale=255/(maxVal-minVal);cvSubS(image_Re,min,image_Re);cvConvertScale(image_Re,dst,scale);cvReleaseImage(&image_Re);//RearrangethequadrantsofFourierimagesothattheoriginisat//theimagecenterintnRow,nCol,i,j,cy,cx;uchartmp13,tmp24;nRow=fourier-height;nCol=fourier-width;cy=nRow/2;//imagecentercx=nCol/2;for(j=0;jcy;j++){for(i=0;icx;i++){tmp13=CV_IMAGE_ELEM(dst,uchar,j,i);CV_IMAGE_ELEM(dst,uchar,j,i)=CV_IMAGE_ELEM(dst,uchar,j+cy,i+cx);CV_IMAGE_ELEM(dst,uchar,j+cy,i+cx)=tmp13;tmp24=CV_IMAGE_ELEM(dst,uchar,j,i+cx);CV_IMAGE_ELEM(dst,uchar,j,i+cx)=CV_IMAGE_ELEM(dst,uchar,j+cy,i);CV_IMAGE_ELEM(dst,uchar,j+cy,i)=tmp24;}}}实验结果如图:精品文档精品文档2、实验步骤:利用cvDFT函数实现DFT,在频域上利用理想高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),截止频率可输入。核心代码如下:voidPassFilter(IplImage*fourier,intFLAG,doubled0,intn1){inti,j;intstate=-1;doubletempD;longwidth,height;width=fourier-width;height=fourier-height;longx,y;x=width/2;y=height/2;CvMat*H_mat;精品文档精品文档H_mat=cvCreateMat(fourier-height,fourier-width,CV_64FC2);for(i=0;iheight;i++){for(j=0;jwidth;j++){if(iy&&jx){state=3;}elseif(iy){state=1;}elseif(jx){state=2;}else{state=0;}switch(state){case0:tempD=(double)sqrt(1.0*i*i+j*j);break;case1:tempD=(double)sqrt(1.0*(height-i)*(height-i)+j*j);break;case2:tempD=(double)sqrt(1.0*i*i+(width-j)*(width-j));break;case3:tempD=(double)sqrt(1.0*(height-i)*(height-i)+(width-j)*(width-j));break;default:break;}switch(FLAG){caseIDEAL_LOW:if(tempD=D0){((double*)(H_mat-data.ptr+H_mat-step*i))[j*2]=1.0;((double*)(H_mat-data.ptr+H_mat-step*i))[j*2+1]=0.0;}else{((double*)(H_mat-data.ptr+H_mat-step*i))[j*2]=0.0;((double*)(H_mat-data.ptr+H_mat-step*i))[j*2+1]=0.0;}break;caseIDEAL_HIGH:if(tempD=D0){((double*)(H_mat-data.ptr+H_mat-step*i))[j*2]=0.0;((double*)(H_mat-data.ptr+H_mat-step*i))[j*2+1]=0.0;}else{精品文档精品文档((double*)(H_mat-data.ptr+H_mat-step*i))[j*2]=1.0;((double*)(H_mat-data.ptr+H_mat-step*i))[j*2+1]=0.0;}break;caseBW_LOW:tempD=1/(1+pow(tempD/D0,2*n));((double*)(H_mat-data.ptr+H_mat-step*i))[j*2]=tempD;((double*)(H_mat-data.ptr+H_mat-step*i))[j*2+1]=0.0;break;caseBW_HIGH:tempD=1/(1+pow(D0/tempD,2*n));((double*)(H_mat-data.ptr+H_mat-step*i))[j*2]=tempD;((double*)(H_mat-data.ptr+H_mat-step*i))[j*2+1]=0.0;break;default:break;}}}cvMulSpectrums(fourier,H_mat,fourier,CV_DXT_ROWS);cvReleaseMat(&H_mat);}其中选择IDEAL_LOW与IDEAL_HIGH模式即为该实验的理想低通与高通滤波器实验结果如图:理想低通滤波器处理过程如下图所示精品文档精品文档理想高通滤波器处理过程如下图所示精品文档精品文档3、实验步骤:利用cvDFT函数实现DFT,在频域上进行利用布特沃斯高通和低通滤波器进行滤波,并把滤波过后的图像显示在屏幕上(观察振铃现象),并且截止频率和n可输入。核心代码与2中类似其中选择BW_LOW与BW
本文标题:图像处理分析-FFT复习过程
链接地址:https://www.777doc.com/doc-6090730 .html