matlab二维几何变换
- 格式:ppt
- 大小:294.50 KB
- 文档页数:59
实验三 图像的几何运算一、实验目的1、 理解几何运算的基本概念与定义;2、 掌握在MA TLAB 中进行插值的方法3、 运用MATLAB 语言进行图像的插值缩放和插值旋转。
二、实验原理插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。
最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。
该算法的数学表示为:()()k f x f x = 如果1111()()22k k k k x x x x x -++<<+ 最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。
不过,当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。
双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。
设''''1,1,,m i m n j n a i m b j n <<+<<+=-=-,'i 和'j 是要插值点的坐标,则双线性插值的公式为:''(,)(1)(1)(,)(1)(1,)(1)(,1)(1,1)g i j a b g m n a b g m n a bg m n abg m n =--+-++-++++ 双三次插值的插值核为三次函数,其插值邻域的大小为4×4。
它的插值效果比较好,但相应的计算量也比较大,在这里不做讨论。
1、图像的缩放imresize 函数的语法格式为:B = imresize(A, m, method)2、图像的旋转imrotate 的语法格式为:B = imrotate(A, angle, method)三、实验内容及要求1. 读出girl.bmp 图像并显示。
二维几何变换代码-MATLAB二、二维几何变换%c6_Test.m文件,这是主文件clearall;clc;%Main();Menu();%Menu.m文件,主界面函数% function Menu()%程序主界面函数%初始化图形数据矩阵为空Figure=[];setappdata(0,'FigureData',Figure);%主界面布局leftbase=10;bottombase=-50;scrsz = get(0,'ScreenSize');figure('Position',[scrsz(3)/3 scrsz(4)/6scrsz(3)/3 scrsz(4)*2/3]);%figure();uicontrol('Style','pushbutton','string','查看原图','position',[150+leftba se 500+bottombase 100 50],...'callback','show_callback');uicontrol('Style','pushbutton','string','导入图形','P osition',[150+leftbase 430+bottombase10050],...'Callback','input_callback');uicontrol('Style','pushbutton','string','平移变换','Position',[150+leftbase 360+bottombase10050],...'Callback','translation_callback');uicontrol('Style','pushbutton','string','比例变换','Position',[150+leftbase290+b ottombase100 50],...'Callback','proportion_callback');uicontrol('Style','pushbutton','string','旋转变换','Position',[150+leftbase 220+bottombase 10050],...'Callback','rotation_callback');uicontrol('Style','pushbutton','string','错切变换','Position',[150+leftb ase 150+bottombase100 50],...'Callback','shear_callback');uicontrol('Style','popup','string','关于x轴对称|关于y轴对称|关于原点对称|关于y=x对称|关于y=-x对称',...'Position',[150+leftbase80+bottombase10050],'callback',@mirror _callback);%set(duichen,'Callback',{@mirror_callback,duiche n});end%show_callback.m文件function show_callback(hObj,event)%显示原始图形回调函数Figure=getappdata(0,'FigureData');ifisempty(Figure)errordlg('未导入图形顶点数据','errordialogue');return ;end%获取图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);DrawFigure(Figure,fill,'原图');end%input_callback.m文件functioninput_callback()%输入图形数据矩阵回调函数Figure=GetFigure();if~isempty(Figure)setappdata(0,'FigureData',Figure);msgbox('图形数据输入成功!','提示对话框');elseerrordlg('导入的数据为空','警告信息!');endend%translation_callback.m文件function translation_callback(hObj,event)%平移变换回调事件Figure=getappdata(0,'FigureData');ifisempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return;endprompt={'输入x方向的增量','输入y方向的增量'};%设置提示字符串title='输入平移增量';%设置标题numline=1;%指定输入数据行数defdata={'0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮iflength(data)<2return;end%读取图形顶点坐标Point=Figure(:,[2,3]);%进行平移变换Point=TranslationTransformation(Point,data);%构造平移变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('平移变换---X坐标增量:',num2str(data(1)),';Y坐标增量:',num2str(dat a(2)));%输出平移变换后的图形DrawFigure(Figure,fill,Thead);end%proportion_callback.m文件function proportion_callback(hObj,event)%比例变换回调函数Figure=getappdata(0,'FigureData');ifisempty(Figure)errordlg('未导入图形顶点数据','errordialogue');return;endprompt={'输入x方向的比例因子Sx','输入y方向的比例因子Sy','输入比例变换基点x 坐标','输入比例变换基点y坐标'};%设置提示字符串title='输入比例因子S';%设置标题numline=1;%指定输入数据行数defdata={'1','1','0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮if length(data)<4return ;end%读取图形顶点坐标Point=Figure(:,[2,3]);%size(Point)%size(Figure),data%进行比例变换Point=ProportionTransformation(Point,data([3,4]),data([1,2]));%size(Point)%构造比例变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取比例变换后图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('比例变换---Sx=',num2str(data(1)),';Sy=',num2str(data(2)),';比例变换基点坐标(',num2str(data(3)),',',num2str(data(4)),')');%绘制变换后图形DrawFigure(Figure,fill,Thead);end%rotation_callback.m文件functionrotation_callback(hObj,event)%旋转变换回调函数Figure=getappdata(0,'FigureData');if isempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return ;endprompt={'输入旋转角度angle(度)','输入旋转变换基点x坐标','输入旋转变换基点y坐标'};%设置提示字符串title='输入旋转变换参数';%设置标题numline=1;%指定输入数据行数defdata={'0','0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮if length(data)<3return;end%读取图形顶点坐标Point=Figure(:,[2,3]);%进行旋转变换Point=RotateTransformation(Point,data([2,3]),data(1)*pi/180);%构造旋转变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取旋转变换后图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('旋转变换---旋转角度:',num2str(data(1)),'度;旋转基点坐标(',n um2str(data(2)),',',num2str(da ta(3)),')');%绘制旋转变换后的图形DrawFigure(Figure,fill,Thead);end%shear_callback.m文件function shear_callback(hObj,event)%错切变换回调函数Figure=getappdata(0,'FigureData');if isempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return;endprompt={'输入错切变换参数b','输入错切变换参数c','输入错切变换基点x坐标','输入错切变换基点y坐标'};%设置提示字符串title='输入错切变换参数';%设置标题numline=1;%指定输入数据行数defdata={'0','0','0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮if length(data)<4return;end%读取图形顶点坐标Point=Figure(:,[2,3]);%进行错切变换Point=ShearTransformation(Point,data([3,4]),data ([1,2]));%构造错切变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取错切变换后图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('错切变换---错切参数:b=',num2str(data(1)),',c=',num2str(data(2)),';错切变换基点坐标(',num2str(data(3)),',',num2str(data(4)),')');%绘制变换后图形DrawFigure(Figure,fill,Thead);end%mirror_callback.m文件function mirror_callback(hObj,event)%对称变换回调函数FFigure=getappdata(0,'FigureData');Figure=FFigure;ifisempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return;end%获取所选择的对称类型%heads=['关于x轴对称','关于y轴对称','关于原点对称','关于y=x对称','关于y=-x 对称','原始图形'];heads(1).title='关于x轴对称';heads(2).title='关于y轴对称';heads(3).title='关于原点对称';heads(4).title='关于y=x对称';heads(5).title='关于y=-x对称';heads(6).title='原始图形';%读取图形顶点坐标Point=Figure(:,[2,3]);%进行对称变换Point=MirrorTransformation(Point);%添加原始顶点坐标Point(length(Point)+1).data=FFigure(:,[2,3]);%构造对称变换后的图形数据矩阵figure('name','五中对称变换及原图对比图');for i=1:length(Point)NPoint=Point(i).data;Figure(:,[2,3])=NPoint;%获取对称变换后图形内部点坐标矩阵ET=Create_ET(Figure);fill=Fill(ET);subplot(2,3,i);hold on;[row,column]=size(fill);if column>=2scatter(fill(:,1),fill(:,2),'.','b');end[row,column]=size(Figure);for k=1:row%构造第一条边的起点和终点x坐标矩阵x=[Figure(Figure(k,4),2),Figure(Figure(k,5),2)]; y=[Figure(Figure(k,4),3),Figure(Figure(k,5),3)];plot(x,y,'-r','LineWidth',2);endhold off;title(heads(i).title);endend%DrawFigure.m文件,绘制图形function DrawFigure(num,fill,title)%绘制图形(通过绘制图形边界实现)%fill是图形内部的点坐标矩阵,第一列是x坐标,第二列是y坐标%title 是图形标题,字符串类型%num是图形数据矩阵,其每列定义如下:%点编号?点坐标x 点坐标y 线段起点编号?线段终点编号%依次绘制边figure('name',title);hold on;[row,column]=size(fill);if column>=2scatter(fill(:,1),fill(:,2),'.','b');end[row,column]=size(num);fori=1:row%构造第一条边的起点和终点x坐标矩阵x=[num(num(i,4),2),num(num(i,5),2)];y=[num(num(i,4),3),num(num(i,5),3)];plot(x,y,'-r','LineWidth',2);endhold off;%legend(title);end%GetFigure.m文件,获取图形数据,数据源为程序自带的*.xls文件。
1.调出图形和摄影机工具栏:View—Figure/Camera(该菜单在图形窗口中)。
2.图形特性的有关设置可以通过菜单、工具栏和函数都能实现。
3.plot函数, plot函数是绘制二维图形最常用的函数。
(1)绘制正弦图像:x=linspace(0,2*pi,30)y=sin(x)plot(x,y),title('Figure 26.1: Sine Wave')当plot函数被调用时,便打开一个称为图形窗口的视窗,将两个坐标轴进行适当缩放以满足数据绘制的要求,然后再指定的位置上绘制出数据点,最后将数据点用直线连接起来。
plot函数能自动给坐标轴标注上坐标值以及标号。
如果图形窗口已经存在,plot函数就会自动将当前图形檫除然后绘出新的图形。
(2)在一幅图形上绘制多条曲线或直线z=cos(x)plot(x,y,x,z)title('Figure 26.2:Sine and Cosine')只要在调用plot函数时给它提供第二个参数对(如x-z),该函数就会绘制出另一个曲线,且以不同的颜色显示。
实际上对于plot函数而言,能绘制的曲线个数是没有限制的,用户传递多少个输入参数对,就能画出多少条曲线。
(3)输入参数对一个是矩阵,一个是向量,则plot函数会将矩阵中的每一列与向量参数组成一个输入对,分别绘制出相应的图形。
例如:w=[y;z]plot(x,w)绘制出来的图形与(2)相同;如果改变参数对的顺序,plot函数就将绘制的图形旋转90度。
例如plot(w,x)title('Figure 26.3:Change Argument Order')(4)也可以只用一个输入参数Y调用plot函数。
此时,plot函数就会根据参数包含的数据进行不同的操作:对于复数向量,plot(Y)就相当于执行plot(real (Y),imag(Y))(注意:只有在单输入参数情况下,plot函数才会绘制复数的虚部图形,在其它情况下,输入向量的虚部是被忽略的);Y是实值向量,那么plot(Y)就相当于执行plot(1:length(Y),Y),plot函数将以Y的各元素的索引值为横坐标,以Y为纵坐标绘制出图形;当Y是一个矩阵时,就将Y的每一列视为实数向量来处理。
如何在Matlab中进行二维和三维绘图在科学研究和工程领域,数据可视化是一项十分重要的任务,而Matlab作为一种功能强大的数值计算和数据分析软件,自然也提供了丰富的绘图功能。
本文将介绍如何在Matlab中进行二维和三维绘图,并探讨一些常见的绘图技巧和应用。
一、二维绘图Matlab中的二维绘图是最常见和基础的绘图任务之一。
在绘制二维图形时,我们通常会用到plot函数。
这个函数可以接受单个向量作为输入,将这个向量的值作为y轴上的数据点,自动生成与该向量长度相同的x轴坐标。
例如,我们可以用以下代码绘制一个简单的二维折线图:```x = 0:0.1:2*pi;y = sin(x);plot(x, y);```上述代码中,x参量取从0到2π的均匀间隔的值,而y则是根据x计算得到的sin函数值。
plot函数会自动根据输入绘制折线图,并添加相应的轴标签和图例。
在实际应用中,我们经常需要绘制多条曲线在同一个坐标系中进行对比分析。
可以通过在plot函数中传入多个x和y向量实现这一功能。
例如,我们可以通过以下代码绘制一个简单的双曲线图:```x = 0:0.1:2*pi;y1 = sin(x);y2 = cos(x);plot(x, y1, x, y2);```这样,就会在同一个坐标系中同时绘制sin曲线和cos曲线。
除了折线图,Matlab还支持其他常见的二维绘图类型,如散点图、柱状图和面积图等。
这些绘图类型可以通过不同的函数实现,例如scatter、bar和area等。
这里不再一一赘述,读者可以通过Matlab的帮助文档或官方网站了解更多的用法和示例。
二、三维绘图除了二维绘图,Matlab也提供了丰富的三维绘图功能,用于可视化更为复杂的数据和模型。
在绘制三维图形时,我们通常会用到surf函数。
这个函数可以接受两个二维矩阵作为输入,将这两个矩阵的值分别作为x、y轴上的坐标,而将第三个二维矩阵的值作为z轴上的数据点。
Matlab数字图像处理实验指导实验目的:通过实验,深入理解和掌握图像处理的基本技术,提高动手实践能力。
实验环境:Matlab变成实验一图像的几何变换实验内容:设计一个程序,能够实现图像的各种几何变换。
实验要求:读入图像,打开图像,实现图像的平移变换、比例缩放、转置变换、镜像变换、旋转变换等操作。
实验原理:图像几何变换又称为图像空间变换,它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置。
学习几何变换的关键就是要确定这种空间映射关系,以及映射过程中的变化参数。
几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。
一个几何变换需要两部分运算:首先是空间变换所需的运算,如平移、镜像和旋转等,需要用它来表示输出图像与输入图像之间的(像素)映射关系;此外,还需要使用灰度插值算法,因为按照这种变换关系进行计算,输出图像的像素可能被映射到输入图像的非整数坐标上。
设原图像f(x0,y0)经过几何变换产生的目标图像为g(x1,y1),则该空间变换(映射)关系可表示为:x1=s(x0,y0)y1=t(x0,y0)其中,s(x0,y0)和t(x0,y0)为由f(x0,y0)到g(x1,y1)的坐标换变换函数。
一、图像平移图像平移就是将图像中所有的点按照指定的平移量水平或者垂直移动。
二、图像镜像镜像变换又分为水平镜像和垂直镜像。
水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行对换;而竖直镜像则是将图像上半部分和下半部分以图像水平中轴线为中心轴进行对换。
三、图像转置图像转置是将图像像素的x坐标和y坐标呼唤。
图像的大小会随之改变——高度和宽度将呼唤。
四、图像的缩放图像缩放是指将图像大小按照指定的比率放大或者缩小。
图像缩放函数imresize();调用格式如下:B=imresize(A,Scale,method);参数A为要进行缩放的原始图像。
Scale为统一的缩放比例。
如果希望在x和y方向上以不同比例进行缩放,可用如下调用形式。
《基础强化训练》设计报告题目:二维灰度图象的统计分析及变换处理专业班级:学生姓名:指导教师:2010 年 7 月 17 日《基础强化训练》设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 二维灰度图象的统计分析及(FFT)变换处理课程设计目的:1 较全面了解常用的数据分析与处理原理及方法;2 能够运用相关软件进行模拟分析;3 掌握基本的文献检索和文献阅读的方法;4 提高正确地撰写论文的基本能力。
课程设计内容和要求1 采集一幅像素大于64*64黑白图像;2 常规的数学统计数据处理:计算图象各象素点灰度值得均值、标准差、方差,并绘出灰度直方图;3 采用[FFT(傅立叶变换)]对图像进行分析初始条件:1 MATLAB软件。
2 数字信号处理与图像处理基础知识。
时间安排:第18周周一:安排任务19~20周:仿真设计(鉴主13楼计算机实验室)第20周周六:完成(答辩,提交报告,演示)指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 1Abstract 21 数据采集 31.1图像的选取 31.2 MATLAB读取方法 41.2.1 编辑M文件 41.2.2 图像的读取 41.2.3查看图像的格式 61.2.4 灰度值的获取 72 数据统计处理 82.1 均值计算 82.1.1 原理及计算公式 82.1.2 计算程序及结果 92.2 各像素点灰度值的标准差 92.3 各像素点灰度值的方差 102.4 灰度直方图 113.傅立叶变化 133.1 原理及计算公式 133.2 变换及逆变换程序及结果 143.3对变换后的图像的说明 164.总结(心得体会) 175.参考文献 18摘要MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。