数字图像处理_旋转与幅度谱(含MATLAB代码)
用matlab实现数字图像处理几个简单例子

实验报告实验一图像的傅里叶变换(旋转性质)实验二图像的代数运算实验三filter2实现均值滤波实验四图像的缩放朱锦璐04085122实验一图像的傅里叶变换(旋转性质)一、实验内容对图(1.1)的图像做旋转,观察原图的傅里叶频谱和旋转后的傅里叶频谱的对应关系。
图(1.1)二、实验原理首先借助极坐标变换x=rcosθ,y=rsinθ,u=wcosϕ,v=wsinϕ,,将f(x,y)和F(u,v)转换为f(r,θ)和F(w,ϕ).f(x,y) <=> F(u,v)f(rcosθ,rsinθ)<=> F(wcosϕ,wsinϕ)经过变换得f( r,θ+θ。
)<=>F(w,ϕ+θ。
)上式表明,对f(x,y)旋转一个角度θ。
对应于将其傅里叶变换F(u,v)也旋转相同的角度θ。
F(u,v)到f(x,y)也是一样。
三、实验方法及程序选取一幅图像,进行离散傅里叶变换,在对其进行一定角度的旋转,进行离散傅里叶变换。
>> I=zeros(256,256); %构造原始图像I(88:168,120:136)=1; %图像范围256*256,前一值是纵向比,后一值是横向比figure(1);imshow(I); %求原始图像的傅里叶频谱J=fft2(I);F=abs(J);J1=fftshift(F);figure(2)imshow(J1,[5 50])J=imrotate(I,45,'bilinear','crop'); %将图像逆时针旋转45°figure(3);imshow(J) %求旋转后的图像的傅里叶频谱J1=fft2(J);F=abs(J1);J2=fftshift(F);figure(4)imshow(J2,[5 50])四、实验结果与分析实验结果如下图所示(1.2)原图像(1.3)傅里叶频谱(1.4)旋转45°后的图像(1.5)旋转后的傅里叶频谱以下为放大的图(1.6)原图像(1.7)傅里叶频谱(1.8)旋转45°后的图像(1.9)旋转后的傅里叶频谱由实验结果可知1、从旋转性质来考虑,图(1.8)是图(1.6)逆时针旋转45°后的图像,对比图(1.7)和图(1.9)可知,频域图像也逆时针旋转了45°2、从尺寸变换性质来考虑,如图(1.6)和图(1.7)、图(1.8)和图(1.9)可知,原图像和其傅里叶变换后的图像角度相差90°,由此可知,时域中的信号被压缩,到频域中的信号就被拉伸。
数字图像处理与应用(MATLAB版)课后题答案

第一章1. 什么是图像?如何区分数字图像和模拟图像?模拟图像和数字图像如何相互转换?答:图像是当光辐射能量照在物体上,经过反射或透射,或由发光物体本身发出的光能量,在人的视觉器官中所重现出的物体的视觉信息。
数字图像将图像看成是许多大小相同、形状一致的像素组成。
这样,数字图像可以用二维矩阵表示。
将自然界的图像通过光学系统成像并由电子器件或系统转化为模拟图像(连续图像)信号,再由模拟/数字转化器(ADC)得到原始的数字图像信号。
图像的数字化包括离散和量化两个主要步骤。
在空间将连续坐标过程称为离散化,而进一步将图像的幅度值(可能是灰度或色彩)整数化的过程称为量化。
2. 什么是数字图像处理?答:数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
3. 数字图像处理系统有哪几部分组成?各部分的主要功能和常见设备有哪些?答:一个基本的数字图像处理系统由图像输入、图像存储、图像输出、图像通信、图像处理和分析5个模块组成,如下图所示。
各个模块的作用分别为:图像输入模块:图像输入也称图像采集或图像数字化,它是利用图像采集设备(如数码照相机、数码摄像机等)来获取数字图像,或通过数字化设备(如图像扫描仪)将要处理的连续图像转换成适于计算机处理的数字图像。
图像存储模块:主要用来存储图像信息。
图像输出模块:将处理前后的图像显示出来或将处理结果永久保存。
图像通信模块:对图像信息进行传输或通信。
图像处理与分析模块:数字图像处理与分析模块包括处理算法、实现软件和数字计算机,以完成图像信息处理的所有功能。
4. 试述人眼的主要特性。
答:(1)、人眼的视觉机理。
视网膜上有大量的杆状细胞和锥状细胞,锥状细胞能辨别光的颜色,而杆状细胞感光灵敏度高,但不能辨色。
(2)、人眼的视敏特性。
指人眼对不同波长的光具有不同的敏感程度。
(3)、人眼的亮度感觉。
亮度感觉范围指人眼所能感觉到的最大亮度与最小亮度之间的范围。
数字图像处理期末考试答案

数字图像处理期末考试答案数字图像处理》复指南选择题1.在采用幂次变换进行灰度变换时,当幂次取大于1时,该变换是针对哪一类图像进行的?(B)A。
图像整体偏暗B。
图像整体偏亮C。
图像细节淹没在暗背景中D。
图像同时存在过亮和过暗背景2.图像灰度方差说明了图像的哪一个属性?(B)A。
平均灰度B。
图像对比度C。
图像整体亮度D。
图像细节3.计算机显示器主要采用哪一种彩色模型?(A)A。
RGBB。
CMY或CMYKC。
HSI4.采用模板[-11]T主要检测哪个方向的边缘?(A)A。
水平B。
45度C。
垂直D。
135度5.下列算法中属于图像锐化处理的是:(C)A。
低通滤波B。
加权平均法C。
XXX滤波D。
中值滤波6.维纳滤波器通常用于哪种情况?(C)A。
去噪B。
减小图像动态范围C。
复原图像D。
平滑图像7.彩色图像增强时,可以采用哪种处理方法?(C)A。
直方图均衡化B。
同态滤波C。
加权均值滤波D。
中值滤波8.在对图像进行复原的过程中,B滤波器需要计算哪些功率谱?(B)A。
逆滤波B。
维纳滤波C。
约束最小二乘滤波D。
同态滤波9.XXX滤波后的图像通常较暗,为改善这种情况,可以将高通滤波器的转移函数加上一定的常数以引入一些低频分量。
这样的滤波器称为什么?(B)A。
XXX高通滤波器B。
高频提升滤波器C。
高频加强滤波器D。
理想高通滤波器10.图像与灰度直方图之间的对应关系是什么?(B)A。
一一对应B。
多对一C。
一对多D。
都不对应11.下列算法中属于图像锐化处理的是:(C)A。
低通滤波B。
加权平均法C。
XXX滤波D。
中值滤波12.一幅256x256的图像,若灰度级数为16,则存储它所需的比特数是多少?(A)A。
256KB。
512KC。
1MD。
2M13.一幅灰度级均匀分布的图像,其灰度范围在[0,255],则该图像的信息量为多少?(D)A。
0B。
255C。
6D。
814.下列算法中属于局部处理的是什么?(D)A。
灰度线性变换B。
二值化C。
(完整版)数字图像处理MATLAB程序【完整版】

第一部分数字图像处理实验一图像的点运算实验1.1 直方图一.实验目的1.熟悉matlab图像处理工具箱及直方图函数的使用;2.理解和掌握直方图原理和方法;二.实验设备1.PC机一台;2.软件matlab。
三.程序设计在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察图像matlab环境下的直方图分布。
(a)原始图像 (b)原始图像直方图六.实验报告要求1、给出实验原理过程及实现代码;2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。
实验1.2 灰度均衡一.实验目的1.熟悉matlab图像处理工具箱中灰度均衡函数的使用;2.理解和掌握灰度均衡原理和实现方法;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(2,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(2,2,3),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题a=histeq(I,256); %直方图均衡化,灰度级为256subplot(2,2,2),imshow(a) %输出均衡化后图像title('均衡化后图像') %在均衡化后图像中加标题subplot(2,2,4),imhist(a) %输出均衡化后直方图title('均衡化后图像直方图') %在均衡化后直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
matlab实现图像的放大及旋转

MA TLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。
在通常情况下,可以用它来代替底层编程语言,如C和C 。
在计算要求相同的情况下,使用MA TL AB的编程工作量会大大减少。
MA TLAB的这些函数集包括从最简单最基本的函数到诸如距阵,特征向量、快速傅立叶变换的复杂函数。
函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
(4)出色的图形处理功能MA TLAB自产生之日起就具有方便的数据可视化功能,以将向量和距阵用图形表现出来,并且可以对图形进行标注和打印。
高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。
可用于科学计算和工程绘图。
新版本的MA TLAB对整个图形处理功能作了很大的改进和完善,使他不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MA TLAB同样表现了出色的处理能力。
同时对一些特殊的可视化要求,例如图形对话等,MA TLAB也有相应的功能函数,保证了用户不同层次的要求。
另外新版本的M A TLA B还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。
(5)应用广泛的模块集合工具箱MA TLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
(整理)数字图像处理MATLAB指令

其他常用的图像转换函数有:gray2ind函数,将灰度图像转换成索引图像。
Im2bw函数,将其它图像转化为二值图像。
Ind2gray函数,将索引图像转换成灰度图像。
Rgb2gray函数,将彩色图像转换成灰度图像。
1.利用imread( )函数读取一幅图像,存入一个数组中;2.利用whos 命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;函数执行语句A = imread('saturn.png');whosName Size Bytes Class AttributesA 1500x1200x3 5400000 uint8imshow(A)4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;imfinfo('saturn.png')5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg 文件,设为flower.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。
imwrite(A,'xingxing.jpg','quality',25)B = imread('xingxing.jpg');6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flower.bmp。
imwrite(A , 'xingxing.bmp')C = imread('xingxing.bmp');7.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。
F = imread('circbw.tif');im2bw(F)imshow(F)实验二图像直方图与灰度变换下面给出灰度变化的MATLAB程序f=imread('medicine_pic.jpg');g=imhist(f,256); %显示其直方图g1=imadjust(f,[0 1],[1 0]);%灰度转换,实现明暗转换(负片图像) figure,imshow(g1)g2=imadjust(f,[0.5 0.75],[0 1]);%将0.5到0.75的灰度级扩展到范围[0 1] figure,imshow(g2)g=imread('point.jpg');h=log(1+double(g));%对输入图像对数映射变换h=mat2gray(h); %将矩阵h转换为灰度图片h=im2uint8(h); %将灰度图转换为8位图figure,imshow(h)下面给出直方图均衡化增强图像对比度的MATLAB程序:I=imread(‘pollen.jpg); % 读入原图像J=histeq(I); %对原图像进行直方图均衡化处理Imshow(I); %显示原图像Title(‘原图像’); %给原图像加标题名Figure;imshow(J); %显示直方图均衡化后的图像Title(‘直方图均衡化后的图像’) ; %给直方图均衡化后的图像加标题名Figure; subplot(1,2,1) ;%对直方图均衡化后的图像进行屏幕控制;作一幅子图作为并排两幅图的第1幅图Imhist(I,64); %将原图像直方图显示为64级灰度Title(‘原图像直方图’) ; %给原图像直方图加标题名Subplot(1,2,2); %作第2幅子图Imhist(J,64) ; %将均衡化后图像的直方图显示为64级灰度Title(‘均衡变换后的直方图’) ; %给均衡化后图像直方图加标题名1、利用自己编写的灰度直方图计算程序计算rice.tif图像的直方图,并与系统自带的计算程序进行对比。
c#数字图像处理(十一)图像旋转

c#数字图像处理(⼗⼀)图像旋转如果平⾯上的点绕原点逆时针旋转θº,则其坐标变换公式为:x'=xcosθ+ysinθ y=-xsinθ+ycosθ其中,(x, y)为原图坐标,(x’, y’)为旋转后的坐标。
它的逆变换公式为:x=x'cosθ-y'sinθ y=x'sinθ+y'cosθ矩阵形式为:和缩放类似,旋转后的图像的像素点也需要经过坐标转换为原始图像上的坐标来确定像素值,同样也可能找不到对应点,因此旋转也⽤到插值法。
在此选⽤性能较好的双线性插值法。
为提⾼速度,在处理旋转90º、-90º、±180º时使⽤了镜像来处理。
///<summary>///图像旋转///</summary>///<param name="srcBmp">原始图像</param>///<param name="degree">旋转⾓度</param>///<param name="dstBmp">⽬标图像</param>///<returns>处理成功 true 失败 false</returns>public static bool Rotation(Bitmap srcBmp, double degree, out Bitmap dstBmp){if (srcBmp == null){dstBmp = null;return false;}dstBmp = null;BitmapData srcBmpData = null;BitmapData dstBmpData = null;switch ((int)degree){case0:dstBmp = new Bitmap(srcBmp);break;case -90:dstBmp = new Bitmap(srcBmp.Height, srcBmp.Width);srcBmpData = srcBmp.LockBits(new Rectangle(0, 0, srcBmp.Width, srcBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);dstBmpData = dstBmp.LockBits(new Rectangle(0, 0, dstBmp.Width, dstBmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);unsafe{byte* ptrSrc = (byte*)srcBmpData.Scan0;byte* ptrDst = (byte*)dstBmpData.Scan0;for (int i = 0; i < srcBmp.Height; i++){for (int j = 0; j < srcBmp.Width; j++){ptrDst[j * dstBmpData.Stride + (dstBmp.Height - i - 1) * 3] = ptrSrc[i * srcBmpData.Stride + j * 3];ptrDst[j * dstBmpData.Stride + (dstBmp.Height - i - 1) * 3 + 1] = ptrSrc[i * srcBmpData.Stride + j * 3 + 1];ptrDst[j * dstBmpData.Stride + (dstBmp.Height - i - 1) * 3 + 2] = ptrSrc[i * srcBmpData.Stride + j * 3 + 2];}}}srcBmp.UnlockBits(srcBmpData);dstBmp.UnlockBits(dstBmpData);break;case90:dstBmp = new Bitmap(srcBmp.Height, srcBmp.Width);srcBmpData = srcBmp.LockBits(new Rectangle(0, 0, srcBmp.Width, srcBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);dstBmpData = dstBmp.LockBits(new Rectangle(0, 0, dstBmp.Width, dstBmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);unsafe{byte* ptrSrc = (byte*)srcBmpData.Scan0;byte* ptrDst = (byte*)dstBmpData.Scan0;for (int i = 0; i < srcBmp.Height; i++){for (int j = 0; j < srcBmp.Width; j++){ptrDst[(srcBmp.Width - j - 1) * dstBmpData.Stride + i * 3] = ptrSrc[i * srcBmpData.Stride + j * 3];ptrDst[(srcBmp.Width - j - 1) * dstBmpData.Stride + i * 3 + 1] = ptrSrc[i * srcBmpData.Stride + j * 3 + 1];ptrDst[(srcBmp.Width - j - 1) * dstBmpData.Stride + i * 3 + 2] = ptrSrc[i * srcBmpData.Stride + j * 3 + 2];}}}srcBmp.UnlockBits(srcBmpData);dstBmp.UnlockBits(dstBmpData);break;case180:case -180:dstBmp = new Bitmap(srcBmp.Width, srcBmp.Height);srcBmpData = srcBmp.LockBits(new Rectangle(0, 0, srcBmp.Width, srcBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); dstBmpData = dstBmp.LockBits(new Rectangle(0, 0, dstBmp.Width, dstBmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);unsafe{byte* ptrSrc = (byte*)srcBmpData.Scan0;byte* ptrDst = (byte*)dstBmpData.Scan0;for (int i = 0; i < srcBmp.Height; i++){for (int j = 0; j < srcBmp.Width; j++){ptrDst[(srcBmp.Width - i - 1) * dstBmpData.Stride + (dstBmp.Height - j - 1) * 3] = ptrSrc[i * srcBmpData.Stride + j * 3];ptrDst[(srcBmp.Width - i - 1) * dstBmpData.Stride + (dstBmp.Height - j - 1) * 3 + 1] = ptrSrc[i * srcBmpData.Stride + j * 3 + 1];ptrDst[(srcBmp.Width - i - 1) * dstBmpData.Stride + (dstBmp.Height - j - 1) * 3 + 2] = ptrSrc[i * srcBmpData.Stride + j * 3 + 2];}}}srcBmp.UnlockBits(srcBmpData);dstBmp.UnlockBits(dstBmpData);break;default://任意⾓度double radian = degree * Math.PI / 180.0;//将⾓度转换为弧度//计算正弦和余弦double sin = Math.Sin(radian);double cos = Math.Cos(radian);//计算旋转后的图像⼤⼩int widthDst = (int)(srcBmp.Height * Math.Abs(sin) + srcBmp.Width * Math.Abs(cos));int heightDst = (int)(srcBmp.Width * Math.Abs(sin) + srcBmp.Height * Math.Abs(cos));dstBmp = new Bitmap(widthDst, heightDst);//确定旋转点int dx = (int)(srcBmp.Width / 2 * (1 - cos) + srcBmp.Height / 2 * sin);int dy = (int)(srcBmp.Width / 2 * (0 - sin) + srcBmp.Height / 2 * (1 - cos));int insertBeginX = srcBmp.Width / 2 - widthDst / 2;int insertBeginY = srcBmp.Height / 2 - heightDst / 2;//插值公式所需参数double ku = insertBeginX * cos - insertBeginY * sin + dx;double kv = insertBeginX * sin + insertBeginY * cos + dy;double cu1 = cos, cu2 = sin;double cv1 = sin, cv2 = cos;double fu, fv, a, b, F1, F2;int Iu, Iv;srcBmpData = srcBmp.LockBits(new Rectangle(0, 0, srcBmp.Width, srcBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); dstBmpData = dstBmp.LockBits(new Rectangle(0, 0, dstBmp.Width, dstBmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);unsafe{byte* ptrSrc = (byte*)srcBmpData.Scan0;byte* ptrDst = (byte*)dstBmpData.Scan0;for (int i = 0; i < heightDst; i++){for (int j = 0; j < widthDst; j++){fu = j * cu1 - i * cu2 + ku;fv = j * cv1 + i * cv2 + kv;if ((fv < 1) || (fv > srcBmp.Height - 1) || (fu < 1) || (fu > srcBmp.Width - 1)){ptrDst[i * dstBmpData.Stride + j * 3] = 150;ptrDst[i * dstBmpData.Stride + j * 3 + 1] = 150;ptrDst[i * dstBmpData.Stride + j * 3 + 2] = 150;}else{//双线性插值Iu = (int)fu;Iv = (int)fv;a = fu - Iu;b = fv - Iv;for (int k = 0; k < 3; k++){F1 = (1 - b) * *(ptrSrc + Iv * srcBmpData.Stride + Iu * 3 + k) + b * *(ptrSrc + (Iv + 1) * srcBmpData.Stride + Iu * 3 + k);F2 = (1 - b) * *(ptrSrc + Iv * srcBmpData.Stride + (Iu + 1) * 3 + k) + b * *(ptrSrc + (Iv + 1) * srcBmpData.Stride + (Iu + 1) * 3 + k); *(ptrDst + i * dstBmpData.Stride + j * 3 + k) = (byte)((1 - a) * F1 + a * F2);}}}}}srcBmp.UnlockBits(srcBmpData);dstBmp.UnlockBits(dstBmpData);break;}return true;}。
数字图像处理MATLAB程序大全1

数字图像处理MATLAB程序大全1%对一幅图像进行2倍、4倍、8倍和16倍减采样,显示结果。
a=imread('E:\lmt\ketangshiyan\ceshitu\Plane211.jpg');b=rgb2gray(a);for m=1:4figure[width,height]=size(b);quartimage=zeros(floor(width/(m)),floor(height/(2*m)));k=1;n=1;for i=1:(m):widthfor j=1:(2*m):heightquartimage(k,n)=b(i,j);n=n+1;endk=k+1;n=1;endimshow(uint8(quartimage));endI=imread('F:\work\Digital Image Processing\2015\ketangshiyan\ceshitu\Plane211.jpg');I2=rgb2gray(I);imshow(I);figure,imshow(I2);%读入源图像,BMP格式I=imread('F:\work\Digital Image Processing\2015\ketangshiyan\ceshitu\cameraman.bmp'); %显示图像I的基本信息whos I%显示图像imshow(I)%显示图像的详细信息,filename是存储在磁盘中的图像全名imfinfo('F:\work\Digital Image Processing\2015\ketangshiyan\ceshitu\cameraman.bmp') %保存图像I为jpg格式,压缩存储,q为图像质量,介于0-100之间的整数imwrite(I,'F:\work\Digital Image Processing\2015\ketangshiyan\ceshitu\cameraman1.jpg'); %以位图的格式存储图像imwrite(I,'F:\work\Digital Image Processing\2015\ketangshiyan\ceshitu\cameraman1.tif');%在同一个图像窗口显示多幅图像,并为每幅图像添加标题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验一15生医一、实验内容产生右图所示图像 f1(m,n),其中图像大小为256×256,中间亮条为128×32,暗处=0,亮处=100。
对其进行FFT:①同屏显示原图f1(m,n)和FFT(f1)的幅度谱图;②若令f2(m,n)=(-1)^(m+n)f1(m,n),重复以上过程,比较二者幅度谱的异同,简述理由;③若将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较;④若将f1(m,n) 顺时针旋转90度得到f4(m,n),令f5(m,n) = f1(m,n) + f4(m,n),试显示FFT(f5)的幅度谱,指出其与 FFT(f1)和FFT(f4)的关系;⑤若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与 FFT(f2)和FFT(f3)的关系,比较FFT(f6)和FFT(f5)的幅度谱。
二、运行环境MATLAB R2014a三、运行结果及分析1.同屏显示原图f1(m,n)和FFT(f1)的幅度谱图:50100150200250100150200250501001502002501001502002502.令f2(m,n)=(-1)^(m+n )f1(m,n),对其进行FFT ,比较f2与f1幅度谱的异同,简述理由:5010015020025010015020025050100150200250100150200250异同及理由:①空域:f2由于前边乘了系数(-1)^(m+n ),导致灰度值有正有负,而在MATLAB 的imshow 函数中默认把负值变为0(有些情况是取反),所以形成了如左图所示的黑白花纹。
②频域:FFT(2)为FFT(1)中心化后的图像。
空域进行乘以(-1)^(m+n )的操作,即相当于频域里的位移,实现频谱的中心化。
3.将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较:5010015020025010015020025050100150200250100150200250比较:空域图像旋转90度后,频域幅度谱也旋转90度。
4.将f1(m,n) 顺时针旋转90度得到f4(m,n),令f5(m,n) = f1(m,n) + f4(m,n),试显示FFT(f5)的幅度谱,指出其与 FFT(f1)和FFT(f4)(a)亮块图像f1(m,n)50100150200250100150200250(b) FFT(f1)幅度谱5010015020025050100150200250旋转图像f4(m,n)50100150200250501001502002505010015020025010015020025050100150200250501001502002505010015020025050100150200250关系:空域里原图与其旋转90度后的图像进行叠加,在频域里也体现为相应幅度谱的叠加,即FFT(f5)=FFT(f1)+FFT(f4)。
5.令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与 FFT(f2)和FFT(f3)的关系,比较FFT(f6)和FFT(f5)的幅度谱:50100150200250100150200250501001502002505010015020025050100150200250501001502002505010015020025010015020025050100150200250100150200250501001502002505010015020025010015020025050100150200250关系:空域里原图与其旋转90度后的图像进行叠加,在频域里也体现为相应幅度谱的叠加,即FFT(f6)=FFT(f2)+FFT(f3)。
比较:FFT(6)为FFT(5)中心化后的图像。
四、心得体会通过MATLAB编程更加熟练了课上的知识点,比如空域旋转频域也旋转,空域叠加频域也满足叠加关系。
同时,对MATLAB实现傅里叶变换及其显示的机理也有所掌握,比如后边附的程序中会提到的Note1-Note5的思考。
Note1:复数取绝对值后才可以二维图示;Note2:为什么这里要划分255个灰度级为什么是在频域里操作(可能的解释:用灰度来表示值的大小,越白值越大);Note3:空域进行此操作频域位移;Note4:双线性插值法;Note5:旋转坐标计算式:256*(1+0)五、具体程序(复制于matlab notebook)% 产生亮块图像 0暗100亮f1=zeros(256,256);for m=64:192for n=112:144f1(m,n)=100;endendfigure(1);subplot(1,2,1);imshow(f1);xlabel('(a)亮块图像f1(m,n)');axis on;% 求f1(m,n)的傅里叶变换FFT_f1=fft2(f1);% 求f1(m,n)的频谱FFT_f1=abs(FFT_f1); % Note1:复数取绝对值后才可以二维图示tmax=FFT_f1(1,1);tmin=FFT_f1(1,1);for m=1:256for n=1:256if tmax<FFT_f1(m,n)tmax= FFT_f1(m,n);endif tmin> FFT_f1(m,n)tmin= FFT_f1(m,n);endendenddelta=tmax-tmin;for m=1:256for n=1:256FFT_f1(m,n)=255*( FFT_f1(m,n)-tmin)/delta;endend% Note2:为什么这里要划分255个灰度级为什么是在频域里操作(可能的解释:用灰度来表示值的大小,越白值越大)subplot(1,2,2);imshow (FFT_f1);xlabel('(b) f1(m,n)的频谱');axis on;5010015020025010015020025050100150200250100150200250% 频谱中心化 f2=f1;for m=1:256 for n=1:256f2(m,n)=(-1)^(m+n)*f1(m,n); % Note3:空域进行此操作频域位移 end endFFT_f2=fft2(f2); FFT_f2=abs(FFT_f2);tmax=FFT_f2(1,1); tmin=FFT_f2(1,1); for m=1:256 for n=1:256if tmax<FFT_f2(m,n)tmax= FFT_f2(m,n);endif tmin> FFT_f2(m,m)tmin= FFT_f2(m,n);endendenddelta=tmax-tmin;for m=1:256for n=1:256FFT_f2(m,n)=255*( FFT_f2(m,n)-tmin)/delta; endendfigure(2)subplot(1,2,1);imshow(f2);xlabel('(a)亮块图像f2(m,n)');axis on;subplot(1,2,2);imshow (FFT_f2);xlabel('(b) f2(m,n)的频谱');axis on;5010015020025010015020025050100150200250100150200250% f2(m,n)旋转90°生成f3(m,n)f3=imrotate(f2,-90,'bilinear'); % Note4:双线性插值法FFT_f3=fft2(f3); FFT_f3=abs(FFT_f3);tmax=FFT_f3(1,1); tmin=FFT_f3(1,1); for m=1:256for n=1:256 % Note5:旋转坐标计算式:256*(1+0) if tmax<FFT_f3(m,n) tmax= FFT_f3(m,n); endif tmin> FFT_f3(m,n) tmin= FFT_f3(m,n); end endenddelta=tmax-tmin;for m=1:256for n=1:256FFT_f3(m,n)=255*( FFT_f3(m,n)-tmin)/delta; endendfigure(3);subplot(1,2,1);imshow (FFT_f2);xlabel('(a) FFT(f2)幅度谱');axis on;subplot(1,2,2);imshow (FFT_f3);xlabel('(b) FFT(f3)幅度谱');axis on;5010015020025010015020025050100150200250100150200250% 旋转90°与原图叠加的空域频域比较f4=imrotate(f1,-90,'bilinear');f5=f1+f4;FFT_f4=fft2(f4);FFT_f4=abs(FFT_f4);tmax=FFT_f4(1,1);tmin=FFT_f4(1,1);for m=1:256for n=1:256if tmax<FFT_f4(m,n)tmax=FFT_f4(m,n);endif tmin>FFT_f4(m,n)tmin=FFT_f4(m,n);endendenddelta=tmax-tmin;for m=1:256for n=1:256FFT_f4(m,n)=255*(FFT_f4(m,n)-tmin)/delta; endendFFT_f5=fft2(f5);FFT_f5=abs(FFT_f5);tmax=FFT_f5(1,1);tmin=FFT_f5(1,1);for m=1:256for n=1:256if tmax<FFT_f5(m,n)tmax=FFT_f5(m,n);endif tmin>FFT_f5(m,n)tmin=FFT_f5(m,n);endendenddelta=tmax-tmin;for m=1:256for n=1:256FFT_f5(m,n)=255*(FFT_f5(m,n)-tmin)/delta; endendfigure(4);subplot(3,2,1);imshow (f1);xlabel('(a)亮块图像f1(m,n)');axis on;subplot(3,2,2);imshow (FFT_f1);xlabel('(b) FFT(f1)幅度谱');axis on;subplot(3,2,3);imshow (f4);xlabel('(c)旋转图像f4(m,n)');axis on;subplot(3,2,4);imshow (FFT_f4);xlabel('(d) FFT(f4)幅度谱');axis on;subplot(3,2,5);imshow (f5);xlabel('(e)叠加图像f5(m,n)');axis on;subplot(3,2,6);imshow (FFT_f5);xlabel('(f) FFT(f5)幅度谱');axis on; (a)亮块图像f1(m,n)50100150200250100150200250(b) FFT(f1)幅度谱5010015020025050100150200250旋转图像f4(m,n)501001502002505010015020025050100150200250100150200250501001502002501001502002505010015020025050100150200250% 旋转90°与原图叠加的空域频域比较(二者均中心化) f6=f2+f3;FFT_f6=fft2(f6);FFT_f6=abs(FFT_f6);tmax=FFT_f6(1,1);tmin=FFT_f6(1,1);for m=1:256for n=1:256if tmax<FFT_f6(m,n)tmax=FFT_f6(m,n);endif tmin>FFT_f6(m,n)tmin=FFT_f6(m,n);endendenddelta=tmax-tmin;for m=1:256for n=1:256FFT_f6(m,n)=255*(FFT_f6(m,n)-tmin)/delta; endendfigure(5);subplot(3,2,1);imshow (f2);xlabel('(a)亮块图像f2(m,n)');axis on;subplot(3,2,2);imshow (FFT_f2);xlabel('(b) FFT(f2)幅度谱');axis on;subplot(3,2,3);imshow (f3);xlabel('(c)旋转图像f3(m,n)');axis on;subplot(3,2,4);imshow (FFT_f3);xlabel('(d) FFT(f3)幅度谱');axis on;subplot(3,2,5);imshow (f6);xlabel('(e)叠加图像f6(m,n)'); axis on;subplot(3,2,6);imshow (FFT_f6);xlabel('(f) FFT(f6)幅度谱'); axis on; 501001502002501001502002505010015020025050100150200250501001502002505010015020025050100150200250100150200250501001502002501001502002505010015020025050100150200250figure(6);subplot(1,2,1);imshow (FFT_f5);xlabel('(a) FFT(f5)幅度谱'); axis on;subplot(1,2,2);imshow (FFT_f6);xlabel('(b) FFT(f6)幅度谱');10015020025050100150200250。