Matlab图形界面图像的旋转、平移和缩放要点

合集下载

matlab实现平面图形的几何变换.docx

matlab实现平面图形的几何变换.docx

实验报告课程名称:数学实验实验名称:平而图形的几何变换指导教师:实验目的、要求:1.了解儿何变换的基本概念。

2.了解平移、伸缩、对称、旋转等变换。

3.学习掌握MATLAB软件冇关的命令。

实验仪器:安装有MATLAB软件的计算机实验步骤:一、实验原理1.几何变换程的基本概念在平面直角坐标系下,点A由坐标(x,y)表示,如果存在两个函数*=£(兀,刃,y'= f2(x,y)将点A(x, y)映射成点A\x,y),则称函数.齐,.%确定了一个平面上的几何变换丁。

如果能从上面的方程组中反解出(x,y):兀=g](*,卩),)'=g2(兀',)') 则称两数®,g2确定了卩的逆变换厂'。

2.几种常见的几何变换常见的平面图形的儿何变换有平移、伸缩、对称、旋转等变换。

平移变换:把函数_y = f(x)变化为y = f(x + a)f可将函数图形向右平移d个单位,把函数),=于(x)变化为y = fM + a),可将函数图形向上平移d个单位,伸缩变换:把函数y = /(兀)变化为y = f(sx),函数图形会压缩或伸长,其作是改变水平轴的刻度单位,因此$称为水平刻度参数,把函数y =/(兀)变化为y = “(x),则可改变垂直轴的刻度单位。

旋转变换:设函数图形以原点为中心,逆吋针旋转。

也,原来的坐标(兀,刃变为新的坐标(X,Y),旋转变换为*X = xcos& — ysin。

VY = xsinO+ ycosd对称变换:把函数y = /(兀)变化为y = -/(-x),函数图形关于原点对称;把函数y = /(X)变化为y = /(-%),函数图形关于y轴对称;把函数y =(兀)变化为y = -f(x), 函数图形关于x轴对称。

3.几何变换的矩阵表示平移变换、缩放变化、旋转变换、对称变换可以写成如下统一的形式:上式可写为如下矩阵表示形式X~a Ha\lb\Y =A yai\。

Matlab图形界面图像的旋转、平移和缩放要点

Matlab图形界面图像的旋转、平移和缩放要点

Matlab图形界面图像的旋转、平移和缩放姓名:班级:学号:目录问题描述 (2)摘要 (2)正文 (3)1、界面设计 (3)2、打开图片功能 (4)3、实现图片的任意角度的旋转 (5)4、图像的平移 (8)5、图像的缩放(放大与缩小) (12)实验心得 (16)附录: (16)Matlab图形界面操作------图像的旋转、平移和缩放问题描述期末运用学习的matlab知识通过图形用户界面对图片进行操作,实现如下功能。

●能够查找和读取计算机中存储图像。

●实现图像的旋转、平移、缩放等几何变换。

●通过matlab界面功能实现界面的完美布局。

●编写代码和回调函数实现上述功能。

摘要本次任务旨在完成以下几个任务:●整体分为四大模块:原图、旋转、平移和缩放。

●利用数字图像处理技术,以MATLAB为平台,建立一个实现设计主题的简易处理系统。

●能显示输入图像、输出图像。

●程序代码要有注释说明,调用MATLAB函数要清楚并理解函数的功能、使用范围,在设计说明书中要写清楚函数的功能和参数意义。

●完成自己课程设计说明书。

正文1、界面设计(1)在MATLAB命令窗口中输入“guide”,确定后,弹出GUI窗口。

(2)本次设计中,包含两个坐标轴(axes1、axes2),分别显示原图和处理后的图像。

包含六个按钮(Push Button),分别实现“打开图片、保存处理后的图片、旋转、平移、放大、缩小以及退出功能”。

(3)旋转功能同时可以实现选择0—360度任意的度数,当选择不同的度数后,axes2位置就会显示不同选择角度的图片。

如果需要保存该图片可以单击保存按钮进行保存。

(4)平移功能的实现,当单击平移按钮,可以有一个默认的平移位置。

在设计中预设了几个固定位置,可以选择,分别是X单位Y单位方向都可以选择。

达到平移的目的。

(5)放大和缩小功能类似,在界面上表现为选择不同的数据,反映出来不同大小的图片。

(6)操作完成后,点击退出功能,将询问是否退出,如果退出则点击“是”,不退出点击“我还要看看”。

MATLAB技术图像旋转实例

MATLAB技术图像旋转实例

MATLAB技术图像旋转实例导言图像处理是计算机科学领域中的一个重要分支,而旋转是图像处理中经常遇到的一个操作。

在本文中,我们将使用MATLAB来演示如何使用该软件进行图像旋转。

一、图像旋转的基本概念在图像处理中,旋转是指将图像绕着一个中心点进行旋转变换,使得图像在平面上发生方向的变化。

旋转操作通常可以通过应用旋转矩阵来实现。

旋转矩阵包含了旋转角度和旋转中心等信息,通过将旋转矩阵应用于图像,我们可以得到旋转后的图像。

二、MATLAB中的图像旋转函数MATLAB提供了多种图像旋转函数,其中最常用的是imrotate函数。

该函数可以实现对图像进行任意角度的旋转操作。

使用imrotate函数的基本用法如下:rotated_image = imrotate(original_image, angle);其中,original_image是待旋转的图像,angle是旋转的角度。

通过该函数,我们可以得到旋转后的图像rotated_image。

三、MATLAB实例:图像旋转操作为了更好地理解MATLAB中的图像旋转函数的使用,我们将通过一个实际的例子来演示。

假设我们有一张名为"lena.jpg"的图像,我们希望将该图像按顺时针方向旋转45度。

首先,我们需要在MATLAB中加载该图像。

可以使用imread函数实现图片的加载:image = imread('lena.jpg');然后,我们使用imrotate函数对图像进行旋转操作:rotated_image = imrotate(image, 45);最后,我们使用imshow函数来显示旋转后的图像:imshow(rotated_image);通过运行上述代码,我们可以在MATLAB的图像窗口中看到旋转后的图像。

如图1所示,旋转后的lena图像呈现出45度旋转的效果。

图1:旋转后的lena图像四、其他图像旋转技术除了imrotate函数,MATLAB还提供了其他的图像旋转技术,如基于仿射变换的图像旋转、基于坐标变换的图像旋转等。

Matlab图像几何操作

Matlab图像几何操作

figure(2)
transformtype = 'projective'; % 投影变换
transformmatrix = [ 1.1581 0
0;
-0.4228 0.6066 -0.0074;
4.2279 4.3566 1.0000 ];
% transformmatrix =[0.8 0 0; -0.2 0.8 -0.003; 3.5 1.5 1.5];
T = maketform(transformtype ,transformmatrix);
I = imread('cameraman.tif');
nI = imtransform(I,T);
subplot(1,2,1),imshow(I)
subplot(1,2,2),imshow(nI)
2.2 图像的几何变换
2.3.2 Matlab邻域操作函数
Matlab提供了可以实现邻域操作的函数,因此可以直接调用相应的邻域操作函数,完成各种邻域操 作功能: – nlfilter – colfilt – blkproc
2.3.2 Matlab邻域操作函数
nlfilter函数的一般形式为: nI =nlfilter(I,[M N],FUN)
【例】使用imtransform函数实现图像平面扭曲功能 transformtype = 'affine'; % 仿射变换 transformmatrix = [0.5 0 0; 0.5 1 0; 0 0 1]; % 仿射变换要求变换矩阵的最后一列除最后一个元素为1之外, % 其它的均为0 T = maketform(transformtype,transformmatrix); I = imread('cameraman.tif'); nI = imtransform(I,T); subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(nI)

编程实现一幅图像的平移、镜像、旋转、缩小和放大

编程实现一幅图像的平移、镜像、旋转、缩小和放大

课程设计任务书学生姓名:专业班级:通信1003班指导教师:郭志强工作单位:信息工程学院题目: 通信工程应用技术初始条件:(1)使用matlab软件进行操作(2)选择一个图像进行处理要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)编程实现一幅图像的平移、镜像、旋转、缩小和放大。

(2)给出所用算法的理论依据和必要的推导过程,给出原始图像和处理后的图像。

时间安排:第15周:安排任务,布置题目;第15—18周:设计仿真,撰写报告第19周:完成设计,提交报告,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)Abstract ........................................................................................................................................................... I I 1 MA TLAB简介 .. (1)1.1 MA TLAB用途 (1)2图像选择及变换 (4)2.1 原始图像选择读取 (4)2.2 图像放大和缩小 (6)2.2.1 图像放大缩小的知识 (6)2.2.2 函数说明及参数选择 (8)2.2.3 源程序及运行结果 (8)2.3 图像任意角度的旋转 (10)2.3.1 函数说明及参数选择 (10)2.3.2 源程序及运行结果 (10)2.4 图像的平移 (12)2.4.1 函数说明及参数选择 (12)2.4.2 源程序及运行结果 (13)2.5 图像经过镜像 (13)3.5.1 函数说明及参数选择 (13)2.5.2 源程序及运行结果 (14)4 感悟体会小结 (17)5 参考文献 (18)附录 (19)全部源程序代码: (19)摘要MATLAB是—套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成—个方便的、界面友好的用户环境。

编程实现一幅图像的平移、镜像、旋转、缩小和放大。

编程实现一幅图像的平移、镜像、旋转、缩小和放大。

编程实现⼀幅图像的平移、镜像、旋转、缩⼩和放⼤。

课程设计任务书学⽣姓名: zhh 专业班级:通信1002班指导教师:徐⽂君⼯作单位:信息⼯程学院题⽬: 通信⼯程应⽤技术综合训练与实习初始条件:1.数字图像处理课程相关知识。

2.Matlab软件的软件编程应⽤与仿真。

要求完成的主要任务:任务:编程实现⼀幅图像的平移、镜像、旋转、缩⼩和放⼤。

要求:1.给出所⽤算法的理论依据和必要的推导过程。

2.给出原始图像和处理后的图像。

时间安排:序号设计内容所⽤时间1根据设计任务确定实验⽅案2天2根据实验条件进⾏电路的测试,并对结果进⾏分析7天3撰写课程设计报告1天合计2周指导教师签名: 年⽉⽇系主任签名: 年⽉⽇⽬录摘要..................................................................................I Abstract ............................................................................. II 1 图像的⼏何变换.. (1)1.1图像⼏何变换内容 (1)1.2 Matlab仿真使⽤的主要函数 (1)2图像的平移变换 (3)2.1图像平移变换原理 (3)2.2图像平移变换的matlab实现 (3)3图像的镜像变换 (4)3.1 图像镜像变换原理 (5)3.2 图像镜像变换的matlab实现 (6)4图像的旋转变换 (6)4.1图像旋转变换原理 (7)4.2 图像旋转变换的matlab实现 (8)5图像的⽐例变换 ..................................................... 错误!未定义书签。

5.1 图像⽐例变换原理 (10)5.2 图像⽐例变换的matlab实现 (10)6 ⼼得体会 (14)参考⽂献 (15)附录 (16)摘要图像是对三维实际景物的平⾯投影,图形图像处理主要是通过计算机对图像进⾏处理,从⽽达到预期的效果的技术。

matlab实现图像的放大及旋转

matlab实现图像的放大及旋转

MATLAB是一个包含大量计算算法的集合。

其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。

函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。

在通常情况下,可以用它来代替底层编程语言,如C和C 。

在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。

MATLAB的这些函数集包括从最简单最基本的函数到诸如距阵,特征向量、快速傅立叶变换的复杂函数。

函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。

(4)出色的图形处理功能MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和距阵用图形表现出来,并且可以对图形进行标注和打印。

高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。

可用于科学计算和工程绘图。

新版本的MATLAB 对整个图形处理功能作了很大的改进和完善,使他不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB 同样表现了出色的处理能力。

同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。

另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。

(5)应用广泛的模块集合工具箱MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。

一般来说,他们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。

目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP 与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。

图形图像处理-图像的几何变换Matlab实现

图形图像处理-图像的几何变换Matlab实现

湖南商学院课程_设计目录第一章绪论§ 1非彩色图像在Matlab中的矩阵 (3)§ 2彩色图像在Matlab中的矩阵 (4)第二章图像的镜像变换§ 1图像的水平方向镜像 (5)§ 2图像的垂直方向镜像 (8)第三章图像的旋转变换§ 1图像的旋转变换 (10)第四章图像的转置变换§ 1非彩色图像的转置变换 (13)§ 3彩色图像的转职变换 (13)第五章图像的缩放变换§ 1双线性内插法简介 (15)§ 2图像的缩放 (16)第六章图像的平移变换§ 1图像的平移变换 (19)第一章绪论§ 1非彩色图像在Matlab中的矩阵非彩色图像可以定义为一个二维函数f(x, y),其中x和y是Euclid空间(平面)坐标,任意一个二元组(x,y)处的值f称为该点处的强度或者灰度。

当x,y 和灰度值f是离散的数值时,我们称改图像为数字图像。

每一个非彩色图像在Matlab中都是一个二维矩阵A n m,而我们知道变换是指集合自身到自身的映射,所以对非彩色图像的变换其实质就是对二维矩阵人m 进行变换得到另一个二维矩阵B.m的过程。

例如图像1.1图1.1其在Matlab中的表示:>> A=imread('Fig3.24.jpg');>> size(A)ans = 298 252 %A是一个298行252列的矩阵§ 2彩色图像在Matlab中的矩阵不同于非彩色图像,每一个彩色图像在Maltab中都是三维矩阵A, m s。

例如图像2.1图2.1>> A=imread('Koala.jpg');>> size(A)ans =768 1024 3A是一个三维矩阵,768行1024列3层,3层是RGB三色的数值。

示意图:第二章图像的镜像变换§ 1图像的水平方向镜像1.1对于非彩色图像实现水平镜像操作,我们每次只需提取一列,使其与对称的列交换位置即可:aij a iiI Ia2 j a2i‘: 其中j 1I I I Ia nj」.a ni」原图像经过变换后为:132 152 210例1:对99 172 10进行水平方向镜像。

MATLAB实现RGB图像的平移、缩放和旋转

MATLAB实现RGB图像的平移、缩放和旋转

Func的1 2 3分别对应平移、旋转、缩放功能function []=transition(func,I)if func==1delta_x=str2double(inputdlg('请输入向右平移量', 'INPUT scale factor', 1, {'-60'})); %负数为向左delta_y=str2double(inputdlg('请输入向下平移量', 'INPUT scale factor', 1, {'-89'})); %负数为向上img=imread(I);%读入图像B=size(img); %获取原始图像的高和宽imgn(:,:,:)=zeros(B(1)+abs(delta_y),B(2)+abs(delta_x));%创建平移图像输出矩阵rot=[1 0 0;0 1 0;delta_y delta_x 1]; %寻求新坐标用到的平移矩阵pix1=[1 1 1]*rot; %pix1(1),pix1(2)分别为变换后图像的左上角的y,x,分别为1+delta_y,1+delta_x,这种三维空间坐标被称为齐次坐标表示法pix4=[B(1) B(2) 1]*rot; %pix4(1),pix4(2)分别为变换后图像的右下角的y,x,分别为v+delta_y,u+delta_xfor q=1:3 %为每个通道做相同处理%%向右下方移动if delta_x>=0 && delta_y>=0 %如果两个平移量都为正for y=pix1(1):pix4(1) %新图像纵坐标从最开始到结束处for x=pix1(2):pix4(2) %新图像横坐标从最开始到结束处pix=[y x 1]/rot; %pix矩阵经计算后为[y-delta_y,x-delta_x,1] if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)%这里是判断是否有像素可进行平移,例如:若y-delta_y<0.5,则说明没有找到可平移的像素坐标imgn(y,x,q)=img(round(pix(1)),round(pix(2)),q); %新的图像(x,y)点的像素值选取(x-delta_x,y-delta_y)处的像素值,则实现了平移endendendend%%向左下方移动if delta_x<0 && delta_y>=0for y=pix1(1):pix4(1)for x=pix1(2):pix4(2)pix=[y x 1]/rot;if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)imgn(y,x-delta_x,q)=img(round(pix(1)),round(pix(2)),q);endendendend%%向左上方移动if delta_x<0 && delta_y<0for y=pix1(1):pix4(1)for x=pix1(2):pix4(2)pix=[y x 1]/rot;if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)imgn(y-delta_y,x-delta_x,q)=img(round(pix(1)),round(pix(2)),q);endendendend%%向右上方移动if delta_x>=0 && delta_y<0for y=pix1(1):pix4(1)for x=pix1(2):pix4(2)pix=[y x 1]/rot;if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)imgn(y-delta_y,x,q)=img(round(pix(1)),round(pix(2)),q);endendendendendimshow(uint8(imgn));title('平移');endif func==2img=imread(I); %读入原图像B=size(img);%获取图像的高度和宽度K1 =str2double(inputdlg('请输入列缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%行默认变为原来的0.5倍K2 =str2double(inputdlg('请输入行缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%列默认变为原来的0.5倍width = K1 * B(1); %缩放后的图像宽度height = K2 * B(2); %缩放后的图像高度for p=1:3imgn(:,:,p) = uint8(zeros(round(width),round(height))); %创建输出图像矩阵,round是进行数值取整endwidthScale = B(1)/width; %列缩放倍数的倒数heightScale = B(2)/height;%行缩放倍数的倒数for q=1:3for x = 5:width - 5 % 5是为了防止矩阵超出边界溢出for y = 5:height - 5oldX = x * widthScale; % oldX,oldY为原坐标,x,y为新坐标oldY = y * heightScale;if(oldX/double(uint16(oldX)) == 1.0) && (oldY/double(uint16(oldY)) == 1.0) %判断oldx,oldy是否为整数imgn(x,y,q) = img(int16(oldX),int16(oldY),q);elsea = double(round(oldX));b = double(round(oldY)); %若不是整数四舍五入后把临近值赋过去imgn(x,y,q) = img(a,b,q);endendendendimshow(imgn);title('最邻近插值缩放');endif func==3H=1; %索引pix中第一个元素,即高度W=2; %索引pix中第二个元素,即宽度angle=str2double(inputdlg('请输入旋转角度', 'INPUT scale factor', 1, {'45'})); %要旋转的角度,旋转方向为顺时针img=imread(I); %这里v为原图像的高度,u为原图像的宽度B=size(img); %读入高度和宽度theta=angle/180*pi; %将角度单位换算成弧度单位rot=[cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1]; %寻求坐标所用到的旋转矩阵pix1=[1 1 1]*rot; %变换后图像左上点的坐标pix2=[1 B(2) 1]*rot; %变换后图像右上点的坐标pix3=[B(1) 1 1]*rot; %变换后图像左下点的坐标pix4=[B(1) B(2) 1]*rot; %变换后图像右下点的坐标height=round(max([abs(pix1(H)-pix4(H))+0.5 abs(pix2(H)-pix3(H))+0.5])); %变换后图像的高度,为避免溢出要加上0.5,相当于进一法width=round(max([abs(pix1(W)-pix4(W))+0.5 abs(pix2(W)-pix3(W))+0.5])); %变换后图像的宽度for p=1:3imgn(:,:,p)=zeros(height,width); %创建图像输出矩阵enddelta_y=abs(min([pix1(H) pix2(H) pix3(H) pix4(H)])); %取得y方向的负轴超出的偏移量(Y轴坐标是向下的)delta_x=abs(min([pix1(W) pix2(W) pix3(W) pix4(W)]));%取得x方向的负轴超出的偏移量for q=1:3for y=1-delta_y:height-delta_yfor x=1-delta_x:width-delta_xpix=[y x 1]/rot;if pix(H)>=0.5 && pix(W)>=0.5 && pix(H)<=B(1) && pix(W)<=B(2)imgn(y+delta_y,x+delta_x,q)=img(round(pix(H)),round(pix(W)),q);endendendendimshow(uint8(imgn));title('最近邻插值旋转');end。

用MATLAB编程实现数字图像旋转

用MATLAB编程实现数字图像旋转

用MATLAB编程实现数字图像旋转摘要:文章论述了用Matlab编程实现数字图像旋转的基本方法,从计算机几何坐标中的图像旋转矩阵表示着手,给出了图像旋转变换的推导过程,用简单综合插值方法,基本解决了数字图像旋转后出现的空洞问题,并通过Matlab编程工具进行实验验证。

关键词:数字图像旋转;移动变换;旋转矩阵变换;简单综合插值。

数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。

目前,数字图像处理的信息大多是二维信息。

由于数据量大,因此对计算机的计算速度、存储容量等要求较高。

随着微型计算机性能的提高,原来以大型机、小型机为主机的图像处理系统演变为以微机为主机的结构,其应用也迅速普及,当前图像处理技术在工业自动化、工业检测、遥感探测、军事、航空、生物医学等各个方面都发挥着十分重要的作用。

图像旋转是一种常用的数字图像处理技术,传统的图像旋转都是在二维空间中进行的,由于旋转后图像像素点坐标不再是整数,故旋转后必须对像素点灰度进行一维插值运算或二维插值运算,尤其是当对旋转后的图像质量要求较高时,需要采用高阶插值运算。

文章从通用的图像旋转矩阵着手,给出了图像旋转变及换简单综合插值的推导过程,并用Matlab编程工具进行实验验证图像旋转结果。

1Matlab简介MATLAB是矩阵实验室(Matrix Laboratory)之意。

除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,可视化建模仿真和实时控制等功能。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、C#等语言来解算相同的事情简捷得多。

2图像旋转矩阵一般图像的旋转是以图像的中心为原点,将图像上所有像素都旋转一个相同角度。

图像的旋转变换后,图像的大小会改变。

在图像旋转变换中既可以把转出显示区域的图像截去,也可以扩大范围(即是移动图像),以显示所有的图像。

设点旋转角后的对应点为,r是点到原点(0,0)的距离,在旋转过程中,r保持不变。

使用MATLAB进行图像处理的基本技巧

使用MATLAB进行图像处理的基本技巧

使用MATLAB进行图像处理的基本技巧图像处理是数字图像处理的一种重要分支,通过对图像进行数字信号处理,实现增强、恢复、分割和分析等目标。

MATLAB作为一款强大的数学计算软件,也可以用于图像处理,并提供了丰富的图像处理工具箱。

本文将介绍一些使用MATLAB进行图像处理的基本技巧。

一、图像的读取与显示在MATLAB中,可以使用imread函数读取图像文件,常见的格式包括jpg、png和bmp等。

读取图像的语法格式为:img = imread('image.jpg');其中,'image.jpg'为图像文件的路径和文件名,读取的图像将存储在img数组中。

读取图像后,可以使用imshow函数将图像显示在窗口中。

语法格式如下:imshow(img);其中,img为待显示的图像数组。

二、图像的缩放对于不同的应用需求,我们可能需要对图像进行缩放。

在MATLAB中,可以使用imresize函数实现图像的缩放。

语法格式如下:resized_img = imresize(img, scale);其中,img为待缩放的图像数组,scale为缩放比例。

通过调整scale的值,可以实现图像的放大或缩小。

三、图像的灰度化在某些情况下,我们只关注图像的亮度信息,而忽略颜色信息。

此时可以将图像转换为灰度图像,以降低计算复杂度。

在MATLAB中,可以使用rgb2gray函数实现图像的灰度化。

语法格式如下:gray_img = rgb2gray(img);其中,img为待灰度化的图像数组,gray_img为转换后的灰度图像数组。

四、图像的滤波图像滤波是图像处理中常用的技术,用于去除图像中的噪声、平滑图像或增强图像的某些特征。

在MATLAB中,常用的图像滤波函数包括均值滤波、中值滤波和高斯滤波等。

1. 均值滤波均值滤波可以有效地平滑图像,并去除部分噪声。

在MATLAB中,可以使用imfilter函数实现均值滤波。

matlab实现图像的放大及旋转

matlab实现图像的放大及旋转

MATLAB是一个包含大量计算算法的集合。

其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。

函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。

在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。

MATLAB的这些函数集包括从最简单最基本的函数到诸如距阵,特征向量、快速傅立叶变换的复杂函数。

图像的几何操作一、图像的基本运算1、加法运算图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。

直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通信方式传送的图像(如卫星图像),这种处理是必不可少的。

在MA TLAB7.0中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。

imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输入图像。

imadd函数的调用格式可参考图像处理的工具箱。

下面的程序可将图1两幅图像叠加在一起,叠加效果如图2所示。

imshow('rice.png');imshow('cameraman.tif');I=imread('rice.png');J=imread('cameraman.tif');K=imadd(I,J,'uint16');%大小必须一样imshow(K,[])图1 图2给图像的每一个像素加上一个常数可以使图像的亮度增加。

例如以下程序示例的处理效果如图3所示。

I=imread('rice.png');J=imadd(I,50);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);图32、减法运算图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。

MATLAB图像处理之平移,旋转,倾斜,放缩

MATLAB图像处理之平移,旋转,倾斜,放缩

MATLAB图像处理之平移,旋转,倾斜,放缩实验内容:如何对号灰度图像(或彩色图像)进行方所、平移、旋转和综合变换实验内容一:图像的放缩实验程序:%注意,当处理图像大小过大时,请先使用size函数得出矩阵大小,否则处理之后图像会提示内存不足,或者先压缩图像,又或者可以改变电脑运行内存,具体方法可以根据具体情况通过论坛查询,这里就不再过多赘述. x1=imread('0045.jpg');%导入真彩图片0045.jpg,是三维矩阵b=imresize(x1,20);%将原图像放大20倍c=imresize(x1,0.05);%将原图像缩小为原来的20倍figure,subplot(131),imshow(x1),title('原始图像');%此区域内显示1行3列个图像,该图像位于第1个,显示x1的图像,并命名为“原始图像”subplot(132),imshow(b),title('放大20倍');%此区域内显示1行3列个图像,该图像位于第2个,显示b的图像,并命名为“放大200倍”subplot(133),imshow(c),title('缩小20倍');%此区域内显示1行3列个图像,该图像位于第3个,显示c的图像,并命名为“缩小20倍”实验结果:实验内容二:图像的旋转实验程序:clear allclc%imrotate(A,angle,method,bbox)%功能:将矩阵(图片)A旋转任意角度%参数:A——待操作矩阵,angle——需要旋转的角度,method——插值方法,bbox——输出图像大小%将矩阵A旋转angle度(任意),其中angle应用角度制表示;method包括'nearest'、'bilinear'、%'bicubic'分别为“邻近插值法”、“双线性插值法”、“三次卷积插值法”;%bbox(Bounding ? ? box defining size of output image)包括'crop'、'loose',%分别表示将旋转后的图像剪裁为输入图像大小后输出和已旋转后图像大小输出%x1=imread('0045.jpg');%导入真彩图片0045.jpg,是三维矩阵x2=rot90(x1,1);%将图片旋转整数倍个90度figure;%生成图像subplot(272);%此区域生成2行7列个图像,该图像位于第2个imshow(x1);%显示x1生成的图像title('原始图像');%命名x1图像为“原始图像”subplot(275);%此区域生成2行7列个图像,该图像位于第5个imshow(x2);%显示x2生成的图像title('旋转90度');%命名x1图像为“旋转90度”x3=imrotate(x1,30,'nearest','loose');%使用最邻近法逆时针将图像旋转30度,使用loose形式输出图像x5=imrotate(x1,30,'nearest','crop');%使用最邻近法逆时针将图像旋转30度,使用crop形式输出图像x4=imrotate(x1,30,'bilinear','crop');%使用双线性插值法逆时针将图像旋转30度,使用crop形式输出图像x6=imrotate(x1,30,'bilinear','loose');%使用双线性插值法逆时针将图像旋转30度,使用loose形式输出图像subplot(278);%此区域生成2行7列个图像,该图像位于第8个imshow(x3);%显示x3生成的图像title('最邻近法逆时针旋转30度1');%命名x3图像为“最邻近法逆时针旋转30度”subplot(2,7,12);%此区域生成2行7列个图像,该图像位于第12个imshow(x4);%显示x4生成的图像title('双线性插值法逆时针旋转30度1');%命名x4图像为“双线性插值法逆时针旋转30度”subplot(2,7,10);%此区域生成2行7列个图像,该图像位于第10个imshow(x5);%显示x5生成的图像title('最邻近法逆时针旋转30度2');%命名x5图像为“最邻近法逆时针旋转30度2”subplot(2,7,14);%此区域生成2行7列个图像,该图像位于第14个imshow(x6);%显示x6生成的图像title('双线性插值法逆时针旋转30度2');%命名x6图像为“双线性插值法逆时针旋转30度2”实验结果:实验内容三:图像的平移3.1将图像从一个位置平移到另一个位置实验程序:x1=imread('0045.jpg');%导入真彩图片0045.jpg,是三维矩阵figure(1);%生成图像subplot(121),imshow(x1),title('原始图像');%此区域生成1行2列个图像,该图像位于第1个,并命名为“原始图像”,显示x1的图像se1=translate(strel(1),[100 -100]);%形态学膨胀后j1就是平移后的图像j1=imdilate(x1,se1);%对x1,se1进行膨胀操作subplot(122),imshow(j1),title('左下平移');%此区域生成1行2列个图像,该图像位于第2个,并命名为“左下平移”,显示j1的图像实验结果:实验内容四:图像的倾斜实验程序:A=imread('0045.jpg');%将图像导入工作区tform=affine2d([2 0.33 0;0 1 0;0 0 1]);%创建定义仿射几何变换的affine2d 对象B=imwarp(A,tform);%使用 imwarp 对图像应用几何变换。

图像几何变换matlab

图像几何变换matlab

二、图像几何变换
由于拍摄图像的角度、距离等原因,可能
会需要对图像进行适当的几何变换。
几何变换又称为空间变换,是将一幅图像
中的坐标位置映射到另外一幅图像中的新 坐标位置。它不改变图像的像素值,只是 在图像平面上进行像素的重新安排。
三、解决几何变换问题的思路
一般要考虑原图像中的某个像素点的
x
y1 y0


y
2. 垂直镜像的变换公式
(x0,y0)是原图像上的点,中心轴如图所示, 垂直镜像对应的新坐标点为: x1=x0; y1=Nx0
y0;
y0
0
x1 x 垂 直 像
y1

N y
3. 程序实现:
4. MATLAB中实现镜像的函数
水平镜像和垂直镜像的变换矩阵:
[ x1 y1 1] [ x0 y0
(x0,y0)是原图像上的点,图像水平平移量为
a,垂直平移量为b,如图所示。
平移后的新坐标点为: x1=x0+a; y1=y0+b;
x0 0 a 平 移 x1 x
y0 b
y1 y
2. 程序实现:
3. 知识

2.2 图像平移
2.3 图像镜像 2.4 图像转置 2.5 图像缩放 2.6 图像旋转
G = rgb2gray(F); % 将F对应的RGB彩色图像数据 转换为灰度图像数据,存入G中
关于图像的函数和命令(2)
imwrite(G,‘rice1.bmp’); %将图像数据G写入文件
rice1中,存为新图片。
imshow(F); %显示图像数据F对应的图像
figure;
subplot(2,2,1);
坐标(x0,y0) 和此像素点映射到新图像

图文详解matlab原始处理图像几何变换

图文详解matlab原始处理图像几何变换

图⽂详解matlab原始处理图像⼏何变换⽬录(⼀)图像⼏何变换理论知识(1)图像的平移与⽐例(2)关于旋转变换(3)关于对称变换(4)复合变换(⼆)matlab编程实现变换(1)对图像的理解(2)⽐例变换(3)对称变换总结(⼀)图像⼏何变换理论知识(1)图像的平移与⽐例图像的平移很简单,平移前后的坐标分别为(x,y)和(x',y'),则满⾜的关系式为x'= x +Tx;y'= y +Ty;其中Tx与Ty分别为对应的偏移量。

图像的⽐例也很简单,可以描述为:x'=S_x * x; y'=S_y * y;那么上述的关系怎么⽤⼀个矩阵来表⽰呢?⼀个很重要的矩阵来了,那就是变换矩阵T,并且对于⼆维坐标下的点,⼀般转化为笛卡尔坐标系下进⾏计算,⽤⼀个三维点表⽰⼆维的,只不过把最后⼀项值置为1,这样⼀个⼆维坐标(x,y)就变为(x,y,1)了。

在把上述的平移等式关系转化为矩阵形式为:⽐例等式关系为:(2)关于旋转变换对于某个点,在坐标系中的变换为(旋转⾓度为θ,并且逆时针旋转为正):那么可以看出,这个时候对应的旋转矩阵为T就如图上所⽰。

(3)关于对称变换对称变换⽐较简单,还是以点的变换为例,⽐如变换前的点P(x,y)和变换后的点P'=(x',y'),那么对称变换包括点关于x 轴、y轴、原点、y=x、y=-x等等,点的变换可以⾃⼰推导下,这样也就可以得到对应的变换矩阵T了。

⽐如,关于x对称的话,T=[1,0,0;0,-1,0;0,0,1],关于原点对称的话,T=[-1,0,0;0,-1,0;0,0,1];关于y=x对称的话,T=[0,1,0;1,0,0;0,0,1];等等。

(4)复合变换下⾯再重点介绍下复合变换,因为有的变换不是简单的初等变换,但是有⼀点需要明确的是任何复合变换都可以⽤初等变换⼀步步变换⽽来。

⽐如前⾯的旋转变换,旋转点选取的是原点,这样才有的那个公式,那要是旋转点不是原点怎么办?⽐如任⼀点s(X_f,Y_f),那么点P绕着点s旋转⼀定的⾓度θ该怎么表⽰呢?这⾥就要把这个复合变换化成为3个简单的初等变换,具体步骤为:⾸先把s点平移操作⾄原点(这个过程中,相当于所有的点都按照⼀定的⽅向平移了),然后相当于在原点对平移后的P点进⾏旋转变换,变换完后再把这个店反平移回去,这样是不是就相当于完成了那个复合变换。

几何变换的matlab程序示例

几何变换的matlab程序示例

几何变换是图像处理中常见的操作,通过对图像进行旋转、平移、缩放等变换,可以实现图像的翻转、修正以及透视等效果。

MATLAB作为一种强大的数学工具,提供了丰富的函数和工具箱,可以方便地进行各种几何变换的计算和实现。

本文将结合实例,介绍如何使用MATLAB进行几何变换的程序示例,包括图像旋转、平移和缩放等操作。

1. 图像旋转图像旋转是一种常见的几何变换操作,可以通过MATLAB中的imrotate函数来实现。

该函数可以对图像进行指定角度的旋转,其基本语法为:```matlabrotated_img = imrotate(img, angle);```其中,img为待旋转的图像,angle为旋转的角度。

通过这个函数,可以实现图像的任意角度的旋转操作。

2. 图像平移图像平移是指沿着x轴和y轴的方向对图像进行移动,可以通过MATLAB中的imtranslate函数来实现。

其基本语法为:```matlabtranslated_img = imtranslate(img, [x_shift, y_shift]);```其中,img为待平移的图像,[x_shift, y_shift]为沿x轴和y轴的平移距离。

通过该函数,可以实现对图像的任意平移操作。

3. 图像缩放图像缩放是指对图像的大小进行调整,可以通过MATLAB中的imresize函数来实现。

其基本语法为:```matlabresized_img = imresize(img, scale);```其中,img为待缩放的图像,scale为缩放比例。

通过该函数,可以实现对图像的任意缩放操作。

除了以上三种基本的几何变换操作外,MATLAB还提供了一些其他相关的函数和工具箱,如仿射变换、透射变换等。

通过这些工具,可以实现更加复杂和多样化的图像处理操作。

总结通过本文的介绍,我们了解到了MATLAB中几何变换的基本操作,包括图像旋转、平移和缩放。

这些操作可以帮助我们实现对图像的各种修正和调整,从而得到我们想要的效果。

matlab 旋转加平移坐标系

matlab 旋转加平移坐标系

1. 概述在进行图像处理、物体识别与三维建模等工程问题中,常常需要对坐标系进行旋转和平移操作,以适应不同的视角和坐标系要求。

Matlab 作为一种强大的工程计算软件,提供了丰富的工具和函数来进行坐标系的变换与处理。

本文将介绍如何利用Matlab对坐标系进行旋转和平移操作,以帮助工程师和科研人员更好地处理相关问题。

2. 坐标系的旋转在Matlab中,可以使用旋转矩阵来对坐标系进行旋转。

旋转矩阵可以通过旋转角度和旋转轴来确定,常见的旋转矩阵有绕x轴、绕y轴和绕z轴的旋转矩阵。

下面将分别介绍如何在Matlab中实现这三种旋转操作。

2.1 绕x轴的旋转在Matlab中,可以使用内置函数rotx来实现绕x轴的旋转操作。

假设需要将坐标系绕x轴旋转α度,可以通过如下代码实现:```matlabalpha = 30; 旋转角度为30度R_x = rotx(alpha); 生成绕x轴旋转角度为alpha的旋转矩阵```2.2 绕y轴的旋转同样地,可以使用内置函数roty来实现绕y轴的旋转操作。

假设需要将坐标系绕y轴旋转β度,可以通过如下代码实现:```matlabbeta = 45; 旋转角度为45度R_y = roty(beta); 生成绕y轴旋转角度为beta的旋转矩阵```2.3 绕z轴的旋转对于绕z轴的旋转操作,同样可以使用内置函数rotz来实现。

假设需要将坐标系绕z轴旋转γ度,可以通过如下代码实现:```matlabgamma = 60; 旋转角度为60度R_z = rotz(gamma); 生成绕z轴旋转角度为gamma的旋转矩阵```3. 坐标系的平移除了旋转操作,对坐标系进行平移也是常见的需求。

在Matlab中,可以通过简单的矩阵运算来实现坐标系的平移操作。

下面将介绍如何在Matlab中进行坐标系的平移操作。

假设需要将坐标系沿着x、y和z方向分别平移tx、ty和tz个单位,可以通过如下代码实现:```matlabtx = 1; x方向平移1个单位ty = 2; y方向平移2个单位tz = 3; z方向平移3个单位T = [1, 0, 0, tx;0, 1, 0, ty;0, 0, 1, tz;0, 0, 0, 1]; 生成平移矩阵```4. 坐标系的变换组合在实际问题中,往往需要将旋转和平移操作进行组合,以实现复杂的坐标系变换。

MATLAB实现图像的平移缩放和旋转要点

MATLAB实现图像的平移缩放和旋转要点

数字图像处理课程设计题目图像的几何变换重建系 (部) 信息工程系班级姓名学号指导教师2013 年 12 月 16 日至 12 月 27 日共 2 周2013年 12 月 27 日数字图像处理课程设计任务书课程设计成绩评定表目录1 引言 (4)1.1课程设计的目的........................... 错误!未定义书签。

1.2课程设计的任务........................... 错误!未定义书签。

1.3课程设计的要求........................... 错误!未定义书签。

1.4开发工具................................. 错误!未定义书签。

2设计内容 (4)2.1设计内容 (4)2.2 系统框图 (4)3 设计方案 (5)3.1功能模块的划分 (5)3.2算法描述 (5)3.3实现主要功能的原理和方法 (8)3.3.1最近邻域插值法 (8)3.3.2双线性插值法 (8)4功能模块的具体实现 (10)4.1 模块功能 (10)4.2流程图 (11)4.3程序清单及各模块的实现效果图 (11)4.4 系统仿真与调试 (21)5 总结与体会 (22)参考文献 (22)附录 (23)1 引言2设计内容2.1设计内容我选取的是图像的几何变换,设计内容如下,(1)能够读取和存储图像。

(2)实现图像的平移、缩放、旋转几何变换。

(3)分别采用最近邻插值和双线性插值技术进行图像重建。

(4)编写代码实现上述功能。

图2-1系统框图本次课设所做的图像几何变换包括平移变换、缩放变换和旋转变换。

缩放变换和旋转变换均用双线性插值变换和最近邻插值变换两种方法来做,对图像进行处理后再存储。

3 设计方案3.1功能模块的划分本次设计整体分为四大模块:原图、平移、缩放和旋转。

其中缩放和旋转又分别有双线性插值和最近邻插值两模块。

3.2算法描述图像比例缩放是指将给定的图像在x 轴方向按比例缩放fx 倍,在y 轴按比例缩放fy 倍,从而获得一幅新的图像。

2016年度精品--MATLAB中图像的几何操作

2016年度精品--MATLAB中图像的几何操作

MATLAB中图像的几何操作1.1图像的裁剪:在实际应用或科研领域,很多时候要对图像裁剪操作。

图像裁剪就是在源图像或者大图像中裁剪图像块来,这个图像块一般是多边形的。

图像裁剪是图像处理中最基本的操作之一。

使用imcrop函数对图像进行裁剪操作,然后制作出动画效果,该函数有两个参数,一个用来指定裁剪的图像,另一个用来指定裁剪矩形。

一般格式如下:imcrop(A,[80,120,100,50]);[80,120,100,50]的含义是:以图像的(80,,10)点位裁剪矩形的左上角坐标,裁剪的宽度是100,高度是50。

用roipoly函数进行多边形区域的裁剪,roipoly(A,c1,c2);c1,c2定义区域的向量。

1.2图像的缩放:在图像缩放过程中,涉及图像数据的删除与增加。

特别是图像放大的时候需要考虑如何自傲扩大后的空隙中加入新的图像颜色数据。

增加颜色数据的方法主要根据周围相近像素的颜色值进行插值计算。

使用imresize函数缩放图像.形式为:imreseze(A,n)A为图像,n为放大倍数。

另外一种是:imreseze(A,[n,m])把原有的图像放大为行列分别为n,m的图像。

三种插值方法:1.最近邻插值法:是imreseze默认的方法,2.双线性插值方法:格式:imreseze(A,n,'bilinear').3.双立方插值方法:格式:imreseze(A,n,'bicubic').1.3图像的选转:使用imrotate函数进行图像的旋转。

一般的格式为:imrotate(A,Angle,Method,Bbox).Angle:旋转地角度,Method:为插值的方法,可以在,nearest、bilinear、bicubic中选着,Bbox为loose是底板放大,显示整个图形,导致图形变小是默认的情况,为crop时旋转图形的底板不变图形可能被切割,一般使用crop形式。

图像平移旋转缩放镜像

图像平移旋转缩放镜像

A=imread('timg.jpg');%translate(SE, [y x])在结构元素SE上进行y和x方向的位移正数对应右移和下移se=translate(strel(1),[100 80]);B=imdilate(A,se);%形态学膨胀figure;subplot(1,2,1),subimage(A);title('原图像')subplot(1,2,2),subimage(B);title('图像平移')init = imread('timg.jpg'); % 读取图像[R, C] = size(init); % 获取图像大小res = zeros( R, C); % 构造结果矩阵。

每个像素点默认初始化为0(黑色)alfa = -15 * 0.0; % 旋转角度tras = [cos(alfa) -sin(alfa) 0; sin(alfa) cos(alfa) 0; 0 0 1]; % 旋转的变换矩阵for i = 1 : Rfor j = 1 : Ctemp = [i; j; 1];temp = tras * temp;% 矩阵乘法x = uint16(temp(1, 1));y = uint16(temp(2, 1));% 变换后的位置判断是否越界if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)res(i, j) = init(x, y);endendend;imshow(uint8(res)); % 显示图像3.1415926 /18图像裁剪%% 指定位置裁剪clcclear[I,map]=imread('timg.jpg');figure;subplot(121);imshow(I,map);%指定剪切区域的大小和位置,剪切,返回xy坐标和裁剪区域[x,y,I2,rect]=imcrop(I,map,[410 540 400 400]);%位置和区域大小subplot(122);imshow(I2);%% 手动裁剪clcclear[I,map]=imread('timg.jpg');figure;subplot(121);imshow(I,map);%指定剪切区域的大小和位置,剪切,返回xy坐标和裁剪区域[x,y,I2,rect]=imcrop(I,map);subplot(122);imshow(I2);分析与思考translate(SE, [y x])在结构元素SE上进行y和x方向的位移正数对应右移和下移reduceI=imresize(I,0.5)把图像I缩小到原图的两倍J=Flipdim(I,1)水平镜像J=Flipdim(I,2)垂直镜像J=Flipdim(I,3)水平垂直镜像[x,y,I2,rect]=imcrop(I,map,[410 540 400 400]);裁剪I对应坐标上的图片。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab图形界面图像的旋转、平移和缩放姓名:班级:学号:目录问题描述 (2)摘要 (2)正文 (3)1、界面设计 (3)2、打开图片功能 (4)3、实现图片的任意角度的旋转 (5)4、图像的平移 (8)5、图像的缩放(放大与缩小) (12)实验心得 (16)附录: (16)Matlab图形界面操作------图像的旋转、平移和缩放问题描述期末运用学习的matlab知识通过图形用户界面对图片进行操作,实现如下功能。

●能够查找和读取计算机中存储图像。

●实现图像的旋转、平移、缩放等几何变换。

●通过matlab界面功能实现界面的完美布局。

●编写代码和回调函数实现上述功能。

摘要本次任务旨在完成以下几个任务:●整体分为四大模块:原图、旋转、平移和缩放。

●利用数字图像处理技术,以MATLAB为平台,建立一个实现设计主题的简易处理系统。

●能显示输入图像、输出图像。

●程序代码要有注释说明,调用MATLAB函数要清楚并理解函数的功能、使用范围,在设计说明书中要写清楚函数的功能和参数意义。

●完成自己课程设计说明书。

正文1、界面设计(1)在MATLAB命令窗口中输入“guide”,确定后,弹出GUI窗口。

(2)本次设计中,包含两个坐标轴(axes1、axes2),分别显示原图和处理后的图像。

包含六个按钮(Push Button),分别实现“打开图片、保存处理后的图片、旋转、平移、放大、缩小以及退出功能”。

(3)旋转功能同时可以实现选择0—360度任意的度数,当选择不同的度数后,axes2位置就会显示不同选择角度的图片。

如果需要保存该图片可以单击保存按钮进行保存。

(4)平移功能的实现,当单击平移按钮,可以有一个默认的平移位置。

在设计中预设了几个固定位置,可以选择,分别是X单位Y单位方向都可以选择。

达到平移的目的。

(5)放大和缩小功能类似,在界面上表现为选择不同的数据,反映出来不同大小的图片。

(6)操作完成后,点击退出功能,将询问是否退出,如果退出则点击“是”,不退出点击“我还要看看”。

2、打开图片功能进入程序界面后,要实现几何操作,需要先打开一张图片。

单击打开图片按钮,可以选择图片路径,从存储图片的地址任意旋转一张图片,图片就会显示在axes1的位置。

效果如2-1所示:图2-1如果想再打开一张图片进行操作,可以再次单击“打开图片”按钮进行操作,效果如图2-2所示:图2-23、实现图片的任意角度的旋转该功能回调函数使用的是imrotate函数,其调用格式如下所示:(1)函数说明及参数选择I0=imrotate(loadImage,value);I0是处理后的图片。

loadImage是定义的全局变量,当打开图片后,将新图片的值赋予该变量。

Value值是传递过来的度数值。

(2)问题分析如果value值是一个定值,在实现旋转功能时,仅能在一个位置,通过优化,实现任意角度旋转。

(3)运用的函数和方法旋转功能涉及imrotate以及imshow函数,详细方法参考源代码。

(4)实验结果点击旋转按钮,默认值为180度,效果如图3-1所示:图3-1(旋转180度)拖动滑动条,选择其他角度,实现旋转功能。

旋转72度效果如图3-2所示:图3-2(旋转72度)旋转0度即不进行旋转,效果如图3-3所示:图3-3(旋转0度)通过验证,随意拖动滑动条,均可以正常显示,如图4-4所示:图3-4更换其他图片实现旋转功能,效果图3-5所示:图3-5(5)结果分析:一般图像的旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。

旋转后图像的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。

图像的旋转变换也可以用矩阵变换来表示。

4、图像的平移(1)问题分析:图像平移是将一幅图像中所有的点都按照指定的平移量在水平、垂直方向移动,平移后的图像与原图像相同。

平移后的图像上的每一点都可以在原图像中找到。

(2)实验方法:设(x0,y0)为原图像上的一点,图像水平平移量△X,垂直平移量为△Y,则平移后点(x0,y0)的坐标变为(x1,y1)。

(x0,y0)与(x1,y1)之间的关系为:x1=x0+△x;y1=y0+△y。

该功能可以通过函数translate函数实现。

关键代码se=translate(strel(1),[100 -100]); strel(1)表示图像不变,进行[Y X]方向的平移,se是设置的图像平移的距离。

平移变量的旋转通过switch来判断并进行传递。

(3)实验结果:平移量为(-100,-100)时,效果如图4-1所示:图4-1平移量为(-50,-100)时,效果如图4-2所示:图4-2平移量为(0,-100)时,效果如图4-3所示:图4-3平移量为(-50,-100)时,效果如图4-4所示:图4-4平移量为(100,0)时,效果如图4-5所示:图4-5平移量为(100,100)时,效果如图4-6所示:图4-6更换其他图片进行平移操作,效果如图4-7:图4-7(4)结果分析:在设置的平移变量选项中,负数在X方向上代表向左平移,在Y轴上代表向上平移。

选择不同的平移变量,图片将平移结果显示在对应的地方。

超出显示区域的地方自动截取数据。

5、图像的缩放(放大与缩小)(1)问题分析:图像的放大和缩小是用同一个函数实现的,根据图像比例变换的原理及相应算法可得到。

(2)实验方法:图像的放大和缩小的函数是imresize,核心代码如下:I0=imresize(loadImage,value2);其中的value值代表放缩的倍数。

(3)实验结果:点击放大按钮,默认的放大倍数15倍,如图5-1所示。

图5-1(放大15倍)拖动滑动条,得到新的大小的图片,如图5-2所示:图5-2放大1倍的效果如图5-3所示:图5-3(放大1倍即原图大小)缩小效果图,图5-4所示:图5-4(原图0.5倍)随意拉动拖动条,得到缩小效果图,图5-6所示:图5-6当缩小时的value值调为0时,出现错误,说明,在缩小时,value值设置为0是不合适的,效果如图5-7所示。

图5-7更换图片,改变缩小的变量数值,得到大小不一的图片,如图5-8所示:图5-8(4)结果分析:在放大图片时,当按比例将原图像放大K倍,如果按照最近邻域法则需要将一个像素值添加在新图像的k×k的子块中。

显然,如果放大倍数太大,按照这种方法处理会出现马赛克效应。

最简单的比例缩小时当fx=fy=0.5时,即图像被缩到一半大小,此时缩小后图像中的(0,0)像素对应于原图像中的(0,0)像素;(0,1)像素对应于原图像中的(0,2)像素;(1,0)像素对应于原图像中的(2,0)像素,以此类推。

图像缩小之后,因为承载的数据量小了,所以画布可相应缩小。

此时,只需在原图像基础上,每行隔一个像素取一点,每隔一行进行操作,即取原图的偶奇数行和偶奇数列构成新的图像。

如果图像按任意比例缩小则需要计算选择的行和列。

实验心得本次课程设计使我更深的了解了MATLAB的程序设计及图像处理的内容,复习了有关于图像处理方面的知识,同时也对于MATLAB这一功能强大的软件的使用更加的熟练,也学习到了很多新的知识,积累了一些经验,归结如下:更全面的认识了MATLAB这个软件,并且能够熟练的使用MATLAB的基本功能,掌握了MATLAB的程序设计的基本方式方法和步骤。

学习了图像的处理的各项基本函数的使用,特别对MATLAB的帮助功能有了很深刻的了解,能够独立的完成函数的编写及功能的实现,再也不是什么函数都需要使用网络来询问,学习了图像噪声的使用,让我对专业知识有了更深的了解,对我以后的学习很有方向性。

我对图像几何变换的原理,包括图像的平移变换,图像的旋转,图像的旋转及图像的放大与缩小等原理都有了更清楚的认识,也明白了它们的实现机制。

对于使用MATLAB去实现数字图像的处理也有了更好的认识。

通过这次的课程设计,使我意识到所有的知识都是需要用实践去帮着理解的,所谓理论指导实践,很好的实践能帮助我们更好地去理解知识,对于知识的掌握更加牢靠。

同时在复习以前所学知识的同时其实也实现了温故知新,对于旧知识有了新的理解。

对于工程实践,要想实现预期的效果,必须明白它实现的机制和相应的算法,只有通过相应的理论来指导,我们才能有所创新,有所突破。

附录:1、参考文献:【1】贺兴华等. MATLAB7.x图像处理. 北京:人民邮电出版社,2006【2】陈杰. MATLAB宝典. 北京:电子工业出版社,2007.【3】张德丰. MATLAB数值分析与应用. 北京:国防工业出版社,2009【4】[美]冈萨雷斯.温茨著. 数字图像处理.2版. 北京:电子工业出版社,2002 【5】汪晓银,邹庭荣. 数学软件与数学实验. 武汉:华中农业大学教务处,2007【6】Rafael C.Gonzalez.数字图像处理(第三版).电子工业出版社,2011【7】杨丹,赵海滨,龙哲.MATLAB图像处理实例详解.清华大学出版社,20132、源代码:(1)打开图片tryisLoad=getappdata(handles.figure1,'isLoad');if isLoad==0,[fileName,filePath,filterIndex]=uigetfile(...{'*.*','All files';},...'选择图像文件','MultiSelect','off');if isequal(fileName,0) || isequal(filePath,0),return;elsesetappdata(handles.figure1,'fileName',fileName);setappdata(handles.figure1,'filePath',filePath);setappdata(handles.figure1,'isLoad',1);file=fullfile(filePath,fileName);axes(handles.axes1);I=imread(file);sizeI=size(I);if length(sizeI)==3,I=rgb2gray(I);elseif length(sizeI)==2,I=I;elseerrordlg('Error Happened.','Error');endsetappdata(handles.figure1,'loadImage',I);imshow(I);endelsebtnName=questdlg('您已经打开一个文件,确定打开另一个?将覆盖当前的文件?','提示',...'OK','Cancel','Cancel');switch btnName,case 'OK',setappdata(handles.figure1,'isLoad',0);feval(@pushbutton1_Callback,handles.pushbutton1,eventdata,handles);case 'Cancel',return;endendcatcherrordlg('You must open a BMP file.','Error');end(1)旋转:value=get(handles.slider1,'Value');loadImage=getappdata(handles.figure1,'loadImage');axes(handles.axes2);I0=imrotate(loadImage,value);imshow(I0);(2)平移:tryx=get(handles.popupmenu3,'Value');y=get(handles.popupmenu4,'Value');loadImage=getappdata(handles.figure1,'loadImage');switch x,case 1,switch y,case 1,se=translate(strel(1),[-100 -100]);saveImage=imdilate(loadImage,se);case 2,se=translate(strel(1),[-50 -100]);saveImage=imdilate(loadImage,se);case 3,se=translate(strel(1),[0 -100]);saveImage=imdilate(loadImage,se);case 4,se=translate(strel(1),[50 -100]);saveImage=imdilate(loadImage,se);case 5,se=translate(strel(1),[100 -100]);saveImage=imdilate(loadImage,se);endcase 2,switch y,case 1,se=translate(strel(1),[-100 -50]);case 2,se=translate(strel(1),[-50 -50]);saveImage=imdilate(loadImage,se);case 3,se=translate(strel(1),[0 -50]);saveImage=imdilate(loadImage,se);case 4,se=translate(strel(1),[50 -50]);saveImage=imdilate(loadImage,se);case 5,se=translate(strel(1),[100 -50]);saveImage=imdilate(loadImage,se);endcase 3,switch y,case 1,se=translate(strel(1),[-100 0]);saveImage=imdilate(loadImage,se);case 2,se=translate(strel(1),[-50 0]);saveImage=imdilate(loadImage,se);case 3,se=translate(strel(1),[0 0]);saveImage=imdilate(loadImage,se);case 4,se=translate(strel(1),[50 0]);saveImage=imdilate(loadImage,se);case 5,se=translate(strel(1),[100 0]);endcase 4,%LoGswitch y,case 1,se=translate(strel(1),[-100 50]);saveImage=imdilate(loadImage,se);case 2,%verticalse=translate(strel(1),[-50 50]);saveImage=imdilate(loadImage,se);case 3,%Bothse=translate(strel(1),[0 50]);saveImage=imdilate(loadImage,se);case 4,%Bothse=translate(strel(1),[50 50]);saveImage=imdilate(loadImage,se);case 5,%Bothse=translate(strel(1),[100 50]);saveImage=imdilate(loadImage,se);endcase 5,%Zerocrossswitch y,case 1,se=translate(strel(1),[-100 100]);saveImage=imdilate(loadImage,se);case 2,%verticalse=translate(strel(1),[-50 100]);saveImage=imdilate(loadImage,se);case 3,%Bothse=translate(strel(1),[0 100]);case 4,%Bothse=translate(strel(1),[50 100]);saveImage=imdilate(loadImage,se);case 5,%Bothse=translate(strel(1),[100 100]);saveImage=imdilate(loadImage,se);endendsetappdata(handles.figure1,'saveImage',saveImage);axes(handles.axes2);imshow(saveImage);catcherrordlg('Error Happened.','Error');end(4)放大value2=get(handles.slider2,'Value');loadImage=getappdata(handles.figure1,'loadImage');axes(handles.axes2);I0=imresize(loadImage,value2);figure,imshow(I0);(5)缩小function pushbutton6_Callback(hObject, eventdata, handles) value3=get(handles.slider3,'Value');loadImage=getappdata(handles.figure1,'loadImage');axes(handles.axes2);I0=imresize(loadImage,value3);figure,imshow(I0);。

相关文档
最新文档