MATLAB几何变换实验报告

合集下载

Matlab实验报告(三)-MATLAB绘图

Matlab实验报告(三)-MATLAB绘图

实验目的1.掌握MATLAB的基本绘图命令。

2.掌握运用MATLAB绘制一维、二维、三维图形的方法.3.给图形加以修饰。

一、预备知识1.基本绘图命令plotplot绘图命令一共有三种形式:⑴plot(y)是plot命令中最为简单的形式,当y为向量时,以y的元素为纵坐标,元素相应的序列号为横坐标,绘制出连线;若y为实矩阵,则按照列绘出每列元素和其序列号的对应关系,曲线数等于矩阵的列数;当y为复矩阵时,则按列以每列元素的实部为横坐标,以虚部为纵坐标,绘出曲线,曲线数等于列数。

⑵ plot(x,y,[linspec])其中linspec是可选的,用它来说明线型。

当x和y为同维向量时,以x为横坐标,y为纵坐标绘制曲线;当x是向量,y是每行元素数目和x维数相同的矩阵时,将绘出以x为横坐标,以y中每行元素为纵坐标的多条曲线,曲线数等于矩阵行数;当x为矩阵,y为相应向量时,使用该命令也能绘出相应图形。

⑶ plot(x1,y1,x2,y2,x3,y3……)能够绘制多条曲线,每条曲线分别以x和y为横纵坐标,各条曲线互不影响。

线型和颜色MATLAB可以对线型和颜色进行设定,线型和颜色种类如下:线:—实线:点线 -.虚点线——折线点:.圆点 +加号 *星号 x x型 o 空心小圆颜色:y 黄 r 红 g 绿 b 蓝 w 白 k 黑 m 紫 c 青特殊的二维图形函数表5 特殊2维绘图函数[1] 直方图在实际中,常会遇到离散数据,当需要比较数据、分析数据在总量中的比例时,直方图就是一种理想的选择,但要注意该方法适用于数据较少的情况。

直方图的绘图函数有以下两种基本形式。

·bar(x,y) 绘制m*n 矩阵的直方图.其中y 为m *n 矩阵或向量,x 必须单向递增。

·bar(y) 绘制y 向量的直方图,x 向量默认为x=1:m close all; %关闭所有的图形视窗。

x=1:10;y=rand (size(x )); bar(x,y ); %绘制直方图.123456789100.51Bar()函数还有barh ()和errorbar ()两种形式,barh()用来绘制水平方向的直方图,其参数与bar()相同,当知道资料的误差值时,可用errorbar ()绘制出误差范围,其一般语法形式为:errorbar (x,y,l,u)其中x,y 是其绘制曲线的坐标,l ,u 是曲线误差的最小值和最大值,制图时,l 向量在曲线下方,u 向量在曲线上方。

matlab图像的几何变换

matlab图像的几何变换

实验三 图像的几何运算一、实验目的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实验报告

(最新版)MATLAB实验报告

(最新版)MATLAB实验报告实验一典型环节的MATLAB仿真一、实验目的1.熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法。

2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节响应曲线的理解。

3.定性了解各参数变化对典型环节动态特性的影响。

二、SIMULINK的使用MATLAB中SIMULINK是一个用来对动态系统进行建模、仿真和分析的软件包。

利用SIMULINK功能模块可以快速的建立控制系统的模型,进行仿真和调试。

1.运行MATLAB软件,在命令窗口栏“>>”提示符下键入simulink命令,按Enter 键或在工具栏单击按钮,即可进入如图1-1所示的SIMULINK仿真环境下。

2.选择File菜单下New下的Model命令,新建一个simulink 仿真环境常规模板。

3.在simulink仿真环境下,创建所需要的系统。

以图1-2所示的系统为例,说明基本设计步骤如下:1)进入线性系统模块库,构建传递函数。

点击simulink下的“Continuous”,再将右边窗口中“Transfer Fen”的图标用左键拖至新建的“untitled”窗口。

2)改变模块参数。

在simulink仿真环境“untitled”窗口中双击该图标,即可改变传递函数。

其中方括号内的数字分别为传递函数的分子、分母各次幂由高到低的系数,数字之间用空格隔开;设置完成后,选择OK,即完成该模块的设置。

3)建立其它传递函数模块。

按照上述方法,在不同的simulink 的模块库中,建立系统所需的传递函数模块。

例:比例环节用“Math”右边窗口“Gain”的图标。

4)选取阶跃信号输入函数。

用鼠标点击simulink下的“Source”,将右边窗口中“Step”图标用左键拖至新建的“untitled”窗口,形成一个阶跃函数输入模块。

5)选择输出方式。

用鼠标点击simulink下的“Sinks”,就进入输出方式模块库,通常选用“Scope”的示波器图标,将其用左键拖至新建的“untitled”窗口。

高等数学:MATLAB实验

高等数学:MATLAB实验
以上两种格式中的x、y都可以是表达式.plot是绘制二维 曲线的基本函数,但在使用 此函数之前,需先定义曲线上每一 点的x及y的坐标.
MATLAB实验
2.fplot绘图命令 fplot绘图命令专门用于绘制一元函数曲线,格式为:
fplot('fun',[a,b]) 用于绘制区间[a,b]上的函数y=fun的图像.
MATLAB实验 【实验内容】
MATLAB实验
由此可知,函数在点x=3处的二阶导数为6,所以f(3)=3为 极小值;函数在点x= 1处的二阶导数为-6,所以f(1)=7为极大值.
MATLAB实验
例12-10 假设某种商品的需求量q 是单价p(单位:元)的函 数q=12000-80p,商 品的总成本C 是需求量q 的函数 C=25000+50q.每单位商品需要纳税2元,试求使销售 利润达 到最大的商品单价和最大利润额.
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验 实验九 用 MATLAB求解二重积分
【实验目的】 熟悉LAB中的int命令,会用int命令求解简单的二重积分.
MATLAB实验
【实验M步A骤T】 由于二重积分可以化成二次积分来进行计算,因此只要
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验
MATLAB实验
实验七 应用 MATLAB绘制三维曲线图
【实验目的】 (1)熟悉 MATLAB软件的绘图功能; (2)熟悉常见空间曲线的作图方法.
【实验要求】 (1)掌握 MATLAB中绘图命令plot3和 mesh的使用; (2)会用plot3和 mesh函数绘制出某区间的三维曲线,线型

实验一 MATLAB_图像处理实验报告

实验一 MATLAB_图像处理实验报告

实验一 MATLAB_图像处理实验报告实验报告课程名称数字图像处理实验名称图像的几何变换姓名__吴征宇学号____ 3101110002 专业班级_ 实验日期__20XX_ 年_10 _月_18 日成绩_____ __ 指导教师___ _一、实验目的掌握图像平移、缩放、旋转与镜像变换;二、实验原理图像平移,自写平移函数function outImage=immove(inImage,Tx,Ty) [m, n] = size(inImage);%计算图象大小outImage = uint8(zeros(m+abs(Ty), n+abs(Tx))); if(Tx>0&&Ty>0) %往右下角平移的情况outImage(1+Ty:m+Ty,1+Tx:n+Tx) = inImage; else if(Tx0) %往左下角平移的情况outImage(1+Ty:m+Ty,1:n) = inImage; else % 往右上角平移的情况outImage(1:m,1+Tx:n+Tx) = inImage; end endend 主函数I=imread('C:\\Documents and Settings\\student\\桌面\\'); J=rgb2gray(I);imshow(J);title('原图像'); H=immove(J,100,-100);figure;imshow(H);title('平移后图像'); B=immove(J,80,-50);figure;imshow(B);title('平移后图像'); G=imresize(J,);figure;imshow(G);title('缩放后图像'); C=imresize(J,2);figure;imshow(C);title('缩放后图像'); D=imrotate(J,30);figure;imshow(D);title('旋转后图像'); E=imrotate(J,54);figure;imshow(E);title('旋转后图像'); F = flipdim(J,1);figure;imshow(F);title('垂直镜像图像'); G = flipdim(J,2);figure;imshow(G);title('水平镜像图像');三、实验环境Window 20XX Matlab1.利用imread( )函数读取一幅图像,假设其名为,存入一个数组中;a=imread('')2.利用whos 命令提取该读入图像的基本信息;3.利用imshow 函数来显示这幅图像;4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;5.利用imwrite 函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。

实验报告几何变换实验

实验报告几何变换实验

实验报告几何变换实验实验报告:几何变换实验引言:几何变换是计算机图形学中的重要概念,它可以改变图像的形状、位置和大小。

在本次实验中,我们将通过对几何变换的实际操作,深入了解几何变换的原理和应用。

一、实验目的本次实验的主要目的是探究几何变换在图像处理中的应用,具体包括平移、旋转、缩放和翻转等几何变换操作。

通过实际操作和观察,我们将了解几何变换对图像的影响,并学习如何使用计算机编程实现这些变换。

二、实验材料和方法1. 实验材料:- 一台计算机- 图像处理软件(如Photoshop、GIMP等)- 编程软件(如Python、MATLAB等)2. 实验方法:- 步骤一:选择一张图片作为实验对象,并导入到图像处理软件中。

- 步骤二:使用图像处理软件进行平移操作,观察图像的位置变化。

- 步骤三:使用图像处理软件进行旋转操作,观察图像的旋转效果。

- 步骤四:使用图像处理软件进行缩放操作,观察图像的大小变化。

- 步骤五:使用图像处理软件进行翻转操作,观察图像的翻转效果。

- 步骤六:使用编程软件编写程序,实现上述几何变换操作,并观察结果。

三、实验结果与分析1. 平移操作:在实验中,我们发现通过平移操作,可以将图像在水平和垂直方向上进行移动。

通过调整平移的距离和方向,我们可以改变图像在画布上的位置。

这种操作常用于图像的对齐和拼接等应用中。

2. 旋转操作:旋转操作可以改变图像的角度和方向。

通过调整旋转的角度和中心点,我们可以使图像以不同的角度进行旋转。

这种操作常用于图像的矫正、仿射变换等应用中。

3. 缩放操作:缩放操作可以改变图像的大小。

通过调整缩放的比例,我们可以使图像变得更大或更小。

这种操作常用于图像的放大、缩小、裁剪等应用中。

4. 翻转操作:翻转操作可以改变图像的方向。

通过水平或垂直翻转,我们可以使图像在左右或上下方向发生镜像反转。

这种操作常用于图像的镜像处理、对称效果等应用中。

四、实验总结通过本次实验,我们深入了解了几何变换在图像处理中的应用。

matlab 图像的几何变换与彩色处理

matlab 图像的几何变换与彩色处理

实验四、图像的几何变换与彩色处理一、实验目的1理解和掌握图像的平移、垂直镜像变换、水平镜像变换、缩放和旋转的原理和应用;2熟悉图像几何变换的MATLAB操作和基本功能3 掌握彩色图像处理的基本技术二、实验步骤1 启动MATLAB程序,读入图像并对图像文件分别进行平移、垂直镜像变换、水平镜像变换、缩放和旋转操作%%%%%%平移>> flowerImg=imread('flower.jpg');>> se=translate(strel(1),[100 100]);>> img2=imdilate(flowerImg,se);>> subplot(1,2,1);>> imshow(flowerImg);>> subplot(1,2,2);>> imshow(img2);I1=imread('flower.jpg');I1=double(I1);H=size(I1);I2(1:H(1),1:H(2),1:H(3))=I1(H(1):-1:1,1:H(2),1:H(3)); I3(1:H(1),1:H(2),1:H(3))=I1(1:H(1),H(2):-1:1,1:H(3)); Subplot(2,2,1);Imshow(uint8(I1));Title('原图');Subplot(2,2,2);Imshow(uint8(I3));Title('水平镜像');Subplot(2,2,3);Imshow(uint8(I2));Title('垂直镜像');img1=imread('flower.jpg');figure,imshow(img1);%%%%%%缩放img2=imresize(img1,0.25);figure,imshow(img2);imwrite(img2,'a2.jpg');%%%%%%旋转img3=imrotate(img1,90); figure,imshow(img3); imwrite(img3,'a3.jpg');2 实验如下操作:(1)改变图像缩放比例f= imread('flower.jpg');T=[ 0.5 0 0; 0 0.5 0; 0 0 1];tform=maketform('affine',T);[g1,xdata1,ydata1]=imtransform(f,tform,'FillValue',255);T=[ 1 0 0; 0 1 0; 0 0 1];tform=maketform('affine',T);[g2,xdata2,ydata2]=imtransform(f,tform,'FillValue',255);T=[ 1.5 0 0; 0 1.5 0; 0 0 1];tform=maketform('affine',T);[g3,xdata3,ydata3]=imtransform(f,tform,'FillValue',255);hold onimshow(g3,'XData', xdata3, 'YData', ydata3)hold onimshow(g2,'XData', xdata2, 'YData', ydata2)hold onimshow(g1,'XData', xdata1, 'YData', ydata1)axis autoaxis on(2)改变图像的旋转角度,f= imread('flower.jpg');theta=3*pi/4;T=[cos(theta) sin(theta) 0; -sin(theta) cos(theta) 0; 0 0 1]; tform=maketform('affine',T);[g3,xdata3,ydata3]=imtransform(f,tform,'FillValue',255); theta=pi;T=[cos(theta) sin(theta) 0; -sin(theta) cos(theta) 0; 0 0 1]; tform=maketform('affine',T);[g4,xdata4,ydata4]=imtransform(f,tform,'FillValue',255); imshow(f);hold onimshow(g3,'XData', xdata3, 'YData', ydata3)hold onimshow(g4,'XData', xdata4, 'YData', ydata4)axis autoaxis on观察变换结果,要求把经过不同类型几何变换的图像和原图像在同一坐标系内显示输出(请参考课件或教材上的代码)3 读入一幅彩色图像,进行如下图像处理:(1)在RGB彩色空间中对图像进行模糊和锐化处理rgb= imread('flower.jpg');figure; imshow(rgb); title('原图');%平滑滤波r=rgb(:,:,1);g=rgb(:,:,2);b=rgb(:,:,3);m=fspecial('average',[8,8]);r_filtered=imfilter(r,m);g_filtered=imfilter(g,m);b_filtered=imfilter(b,m);rgb_filtered=cat(3,r_filtered,g_filtered,b_filtered);figure; imshow(rgb_filtered); title('模糊后');imwrite(rgb_filtered, 'RGB彩色空间模糊后.jpg');%拉普拉斯lapMatrix=[1 1 1;1 -8 1;1 1 1];i_tmp=imfilter(rgb,lapMatrix,'replicate');i_sharped=imsubtract(rgb,i_tmp);figure; imshow(i_sharped); title('锐化后'); imwrite(i_sharped, 'RGB彩色空间锐化后.jpg');(2)在HSI彩色空间中,对H分量图像进行模糊和锐化处理,转换回RGB格式并观察效果(3)在HSI彩色空间中,对S分量图像进行模糊和锐化处理,转换回RGB格式并观察效果(4)在HSI彩色空间中,对I分量图像进行模糊和锐化处理,转换回RGB格式并观察效果fc = imread('flower.jpg');h = rgb2hsi(fc);H = h (:,:,1);S = h (:,:,2);I = h (:,:,3);subplot(3,3,1);imshow(fc); title('原图');%平滑滤波m=fspecial('average',[8,8]);h_filtered=imfilter(H,m);img_h_filtered = cat(3,h_filtered,S,I);rgb_h_filtered = hsi2rgb(img_h_filtered);subplot(3,3,2);imshow(rgb_h_filtered); title('H分量模糊后');imwrite(rgb_h_filtered, 'H分量模糊后.jpg');%拉普拉斯lapMatrix=[1 1 1;1 -8 1;1 1 1];i_tmp=imfilter(H,lapMatrix,'replicate');H_sharped=imsubtract(H,i_tmp);img_h_sharped = cat(3,H_sharped,S,I);rgb_h_sharped = hsi2rgb(img_h_sharped);subplot(3,3,3); imshow(rgb_h_sharped); title('H分量锐化后'); imwrite(rgb_h_sharped, 'H分量锐化后.jpg');subplot(3,3,4);imshow(fc); title('原图');%平滑滤波m=fspecial('average',[8,8]);s_filtered=imfilter(S,m);img_s_filtered = cat(3,H,s_filtered,I);rgb_s_filtered = hsi2rgb(img_s_filtered);subplot(3,3,5);imshow(rgb_s_filtered); title('S分量模糊后'); imwrite(rgb_s_filtered, 'S分量模糊后.jpg');%拉普拉斯lapMatrix=[1 1 1;1 -8 1;1 1 1];i_tmp=imfilter(S,lapMatrix,'replicate');s_sharped=imsubtract(S,i_tmp);img_s_sharped = cat(3,H,s_sharped,I);rgb_s_sharped = hsi2rgb(img_s_sharped);subplot(3,3,6); imshow(rgb_s_sharped); title('S分量锐化后'); imwrite(rgb_s_sharped, 'S分量锐化后.jpg');subplot(3,3,7);imshow(fc); title('原图');%平滑滤波m=fspecial('average',[8,8]);i_filtered=imfilter(I,m);img_i_filtered = cat(3,H,S,i_filtered);rgb_i_filtered = hsi2rgb(img_i_filtered);subplot(3,3,8);imshow(rgb_i_filtered); title('I分量模糊后'); imwrite(rgb_i_filtered, 'I分量模糊后.jpg');%拉普拉斯lapMatrix=[1 1 1;1 -8 1;1 1 1];i_tmp=imfilter(I,lapMatrix,'replicate');i_sharped=imsubtract(I,i_tmp);img_i_sharped = cat(3,H,S,i_sharped);rgb_i_sharped = hsi2rgb(img_i_sharped);subplot(3,3,9); imshow(rgb_i_sharped); title('I分量锐化后'); imwrite(rgb_i_sharped, 'I分量锐化后.jpg');由图看出I分量图像进行模糊和锐化处理的效果最好。

几何变换

几何变换

1.实习二、图像的几何变换一、实验目的1、掌握图像几何变换的基本原理2、掌握如何利用Matlab相应函数对图像进行几何变换(图像缩小、放大、旋转、裁剪等)3、学会自己编写简单几何变换的程序二、实验内容1、对所选图像进行缩小操作2、对所选图像进行放大操作3、对所选图像进行旋转操作三、实验过程源程序及图像:p1=imread('Azul.jpg');info=imfinfo('Azul.jpg');W=info.Width;H=info.Height;%显示原始图像figure(1);imshow(p1);%使用imresize()函数将原始图像缩小为原图形的0.5倍p2=imresize(p1,0.5);figure(2);imshow(p2);%不使用imresize()函数将原始图像缩小为原图形的0.5倍c=2;i=1:W./c;j=1:H./c;I=floor(c*i); J=floor(c*j);p3(j,i,1:3)=p1(J,I,1:3);figure(3);imshow(p3);问题:1、在进行缩小操作时出现以下错误:??? Index exceeds matrix dimensions.Error in ==> C:\MATLAB6p5\work\w3.mOn line 15 ==> p3(j,i)=p1(J,I);解决:i=1:W./c; j=1:H./c;I=floor(c*i); J=floor(c*j);p3(j,i)=p1(J,I);在变换过程中注意存放像素的数组大小应该相等2、缩小操作完成时的的图形是灰度图而非原来的真彩色图解决:在变换时应注意讲灰度图转换成真彩色图形将p3(j,i)=p1(J,I);改成p3(j,i,1:3)=p1(J,I,1:3);即可得到真彩色图形%使用imresize()函数将原始图像放大为原图形的2倍p4=imresize(p1,2);figure(4);imshow(p4);%不使用imresize()函数将原始图像放大为原图形的2倍d=0.5;x=2:floor(W./d); y=2:floor(H./d);X=floor(d*x); Y=floor(d*y);p5(y,x,1:3)=p1(Y,X,1:3);figure(5);imshow(p5);问题:3、进行放大操作时出现以下问题:??? Subscript indices must either be real positive integers or logicals. Error in ==> C:\MATLAB6p5\work\w3.mOn line 26 ==> p5(y,x,1:3)=p1(Y,X,1:3);解决:Matab数组存放下标是以1开始的不能为零,将下列第二行d=0.5;x=1:floor(W./d); y=1:floor(H./d);X=floor(d*x); Y=floor(d*y);p5(y,x,1:3)=p1(Y,X,1:3);改为:x=2:floor(W./d); y=2:floor(H./d);即可%将原始图形旋转30度显示p6=imrotate(p1,30);figure(6);imshow(p6);%编写将原始图形旋转30度显示pi=3.14; theta=30; angle=pi*theta/180;H1=floor(W*sin(angle)-cos(angle)); W1=floor(W*cos(angle)+H*sin(angle)); for y1=1:Hfor x1=1:WX1=floor((x1-H/2)*cos(angle)+(y1-W/2)*sin(angle)+H1/2+228);Y1=floor(-(x1-H/2)*sin(angle)+(y1-W/2)*cos(angle)+W1/2+1);p7(Y1,X1,1:3)=p1(y1,x1,1:3);endendfigure(7);imshow(p7);问题:4、出现的问题:??? Subscript indices must either be real positive integers or logicals.Error in ==> C:\MATLAB6p5\work\w3.mOn line 40 ==> p7(Y1,X1,1:3)=p1(y1,x1,1:3);解决:将for循环中的公式加上一个合适的正常数使计算结果中不出现零值H1=floor(W*sin(angle)-cos(angle)); W1=floor(W*cos(angle)+H*sin(angle));for y1=1:Hfor x1=1:WX1=floor((x1-H/2)*cos(angle)+(y1-W/2)*sin(angle)+H1/2+228);Y1=floor(-(x1-H/2)*sin(angle)+(y1-W/2)*cos(angle)+W1/2+1);p7(Y1,X1,1:3)=p1(y1,x1,1:3);endend%对旋转的图形进行插值计算p8=imrotate(p1,30,'bilinear');figure(8);imshow(p8);问题:与图六中未标明插值结果相同,即Matlab中使用的函数会自动对变换后的图像进行插值计算。

初识MATLAB的实验报告

初识MATLAB的实验报告

初识MATLAB的实验报告1. 引言MATLAB(Matrix Laboratory)是一种高级的技术计算环境和编程语言。

它具有强大的矩阵计算能力和丰富的科学和工程绘图功能,被广泛应用于各个领域的科研与工程实践中。

本实验旨在初步了解MATLAB的基本语法和功能,通过实际操作加深对MATLAB编程的理解。

2. 实验目的1. 掌握MATLAB的安装和基本使用方法;2. 学习MATLAB中的常用数学函数和操作;3. 了解MATLAB绘图功能并能够绘制简单的图形。

3. 实验步骤3.1 MATLAB安装首先,在官方网站(3.2 MATLAB入门3.2.1 MATLAB语法MATLAB的语法类似于其他常见的编程语言,每个语句以分号结尾。

在MATLAB 中,可以直接进行基本的数学运算,例如加减乘除、指数、对数等。

通过以下代码可以计算两个变量的和并将结果打印出来:matlaba = 10;b = 20;sum = a + b;disp(sum);3.2.2 MATLAB变量在MATLAB中,可以创建和操作各种类型的变量,例如数值、字符串、矩阵等。

以下代码演示了如何创建一个矩阵:matlabmatrix = [1, 2, 3; 4, 5, 6; 7, 8, 9];disp(matrix);3.2.3 MATLAB函数MATLAB提供了许多内置的数学函数,可以直接调用。

以下代码演示了如何计算正弦函数值并打印结果:matlabx = pi/4;y = sin(x);disp(y);3.3 MATLAB绘图MATLAB具有强大的绘图功能,可以绘制各种图形,如曲线、散点图、柱状图等。

以下代码演示了如何绘制一个简单的正弦曲线:matlabx = linspace(0, 2*pi, 100);y = sin(x);plot(x, y);xlabel('x');ylabel('y');title('Sine Curve');4. 实验结果与分析在完成上述实验步骤后,我们成功安装了MATLAB,并学习了基本的语法、变量和函数的使用方法。

MATLAB实验报告

MATLAB实验报告

MATLAB实验报告实验⼀ MATLAB 环境的熟悉与基本运算⼀、实验⽬的及要求1.熟悉MATLAB 的开发环境;2.掌握MATLAB 的⼀些常⽤命令;3.掌握矩阵、变量、表达式的输⼊⽅法及各种基本运算。

⼆、实验内容1、熟悉MATLAB 的开发环境: ① MATLAB 的各种窗⼝:命令窗⼝、命令历史窗⼝、⼯作空间窗⼝、当前路径窗⼝。

②路径的设置:建⽴⾃⼰的⽂件夹,加⼊到MATLAB 路径中,并保存。

? 设置当前路径,以⽅便⽂件管理。

2、学习使⽤clc 、clear,了解其功能与作⽤。

3、矩阵运算:已知:A=[1 2;3 4]; B=[5 5;7 8]; 求:A*B 、A 、*B,并⽐较结果。

4、使⽤冒号选出指定元素:已知:A=[1 2 3;4 5 6;7 8 9]; 求:A 中第3列前2个元素;A 中所有列第2,3⾏的元素; 5、在MATLAB 的命令窗⼝计算: 1))2sin(π2) 5.4)4.05589(÷?+ 6、关系及逻辑运算1)已知:a=[5:1:15]; b=[1 2 8 8 7 10 12 11 13 14 15],求: y=a==b ,并分析结果 2)已知:X=[0 1;1 0]; Y=[0 0;1 0],求: x&y+x>y ,并分析结果 7、⽂件操作1)将0到1000的所有整数,写⼊到D 盘下的data 、txt ⽂件 2)读⼊D 盘下的data 、txt ⽂件,并赋给变量num 8、符号运算1)对表达式f=x 3-1 进⾏因式分解2)对表达式f=(2x 2*(x+3)-10)*t ,分别将⾃变量x 与t 的同类项合并 3)求3(1)xdz z +?三、实验报告要求完成实验内容的3、4、5、6、7、8,写出相应的程序、结果实验⼆ MATLAB 语⾔的程序设计⼀、实验⽬的1、熟悉 MATLAB 程序编辑与设计环境2、掌握各种编程语句语法规则及程序设计⽅法3、函数⽂件的编写与设计4、了解与熟悉变量传递与赋值⼆、实验内容1.编写程序,计算1+3+5+7+…+(2n+1)的值(⽤input 语句输⼊n 值)。

matlab第二章实训报告

matlab第二章实训报告

佛山科学技术学院《MATLAB教程第二章实训》报告专业姓名成绩班级学号日期一、目的1.学习matlab的数据类型2.矩阵和数组的算术运算3.字符串4.时间和日期5.结构体和元胞数组6.多维数组7.逻辑运算和关系运算8.数组的信息获取9.多项式二、步骤1.学习matlab的数据类型Matlab R2010a定义了15种基本的数据类型,包括整型、浮点型、字符型和逻辑型等。

用户甚至可以定义自己的数据类型。

Matlab内部的任何数据类型,都是按照数组的形式进行储存和运算的。

数值型包括整数和浮点数,其中整数包括有符号数和无符号数,浮点数包括单精度型和双精度型。

在默认情况下,matlab默认将所有数值都按照双精度浮点数类型来存储和操作。

(1)常数和变量Matlab的常数采用十进制表示,可以用带小数点的形式直接表示,也可以用科学记数法。

数值的表示范围是10^-309-10^309。

变量是数值计算的基本单元。

Matlab与其他的高级语言不同,变量使用是无需先定义,其名称就是第一次合法出现时的名称,因此用起来很便捷。

Matlab的变量命名有一定的规则:a.变量区分字母的大小写。

例如,“a”和“A”是不同的变量。

b.变量名不能超过63个字符,第63个字符后的字符会被忽略。

c.变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能有空格和标点符号。

d.关键字(如if\while等)不能作为变量名。

在matlab中的所有表示符号包括函数名、文件名都是遵循变量名的命名规则。

Matlab中有一些自己的特殊变量,是由系统预先自动定义的,例如:ans——运算结果的默认变量名Pi——圆周率πEps——浮点数的相对误差Inf或inf——无穷大Nan或nan——不定值i或j——i=j=-1^1/2,虚数单位Nargin——函数的输入变量数目Nargout——函数的输出变量数目Realmin——最小的可用正实数Realmax——最大的可用正实数(2)整数和浮点数Matlab提供了8种内置的整数类型,为了在使用时提高运行速度和存储空间,应该尽量使用字节少的数据类型,可以使用类型转换函数将各种整数类型强制相互转换。

MATLAB几何变换实验报告

MATLAB几何变换实验报告

作业二几何变换一、编写一个函数,实现将一幅图像旋转一定角度,以该图像中心点为旋转点。

分别使用三种插值方法。

1、原理:平移变换:x = u + δxy = v + δy旋转变换:x = ucosθ- vsinθy = usinθ+ vcosθ2、源码:function wchy1(I,jiaodu,wchy)%用三种插值方法实现将一幅图像旋转一定角度%I:待处理图片名称%jiaodu:要旋转的角度,旋转方向为顺时针%wchy:插值方法,1代表最近邻插值,2代表双线性插值,3代表三次内插法img=imread(I);figure,subplot(1,2,1);imshow(img),title('原图');[h,w]=size(img);theta=jiaodu/180*pi;py=[1 0 w/2;0 1 h/2;0 0 1];rot=[cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1];pix1=[1 1 1]*py*rot;%变换后图像左上点的坐标pix2=[1 w 1]*py*rot;%变换后图像右上点的坐标pix3=[h 1 1]*py*rot;%变换后图像左下点的坐标pix4=[h w 1]*py*rot;%变换后图像右下点的坐标height=round(max([abs(pix1(1)-pix4(1))+0.5abs(pix2(1)-pix3(1))+0.5]));%变换后图像的高度width=round(max([abs(pix1(2)-pix4(2))+0.5abs(pix2(2)-pix3(2))+0.5]));%变换后图像的宽度imgn=zeros(height,width);delta_y=abs(min([pix1(1) pix2(1) pix3(1) pix4(1)]));%取得y方向的负轴超出的偏移量delta_x=abs(min([pix1(2) pix2(2) pix3(2) pix4(2)]));%取得x方向的负轴超出的偏移量switch wchycase 1for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot/py;%用变换后图像的点的坐标去寻找原图像点的坐标,否则有些变换后的图像的像素点无法完全填充if pix(1)>=1 && pix(2)>=1 && pix(1)<=h && pix(2)<=wimgn(i+delta_y,j+delta_x)=img(round(pix(1)),round(pix(2)));endendendsubplot(1,2,2),imshow(uint8(imgn)),title('最近邻插值法旋转后的图片')case 2for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot/py;%用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= wpix_up_left=[floor(pix(1)) floor(pix(2))];%四个相邻的点 pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y);%计算临近四个点的权重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_lef t(2))+ ...value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2));endendendsubplot(1,2,2),imshow(uint8(imgn)),title('双线性插值法旋转后的图片')case 3for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot/py;%用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充u=pix(1)-floor(pix(1)); i1=floor(pix(1))+2;v=pix(2)-floor(pix(2));j1=floor(pix(2))+2;if pix(1)>=1 && pix(2)>=1 && pix(1) <= h-3 && pix(2) <= w-3A=[sw(1+u) sw(u) sw(1-u) sw(2-u)];C=[sw(1+v);sw(v);sw(1-v);sw(2-v)];B=[img(i1-1,j1-1) img(i1-1,j1) img(i1-1,j1+1) img(i1-1,j1+2)img(i1,j1-1) img(i1,j1) img(i1,j1+1) img(i1,j1+2) img(i1+1,j1-1) img(i1+1,j1) img(i1+1,j1+1) img(i1+1,j1+2)img(i1+2,j1-1) img(i1+2,j1) img(i1+2,j1+1) img(i1+2,j1+2)];B=double(B);imgn(i+delta_y,j+delta_x)=(A*B*C);endendendsubplot(1,2,2),imshow(uint8(imgn)),title('三次内插法旋转后的图片')endfunction A=sw(w1)w=abs(w1);if w<1&&w>=0A=1-2*w^2+w^3; elseif w>=1&&w<2A=4-8*w+5*w^2-w^3; elseA=0;end3、测试:clear,clcwchy1('lena.tif',15,1) wchy1('lena.tif',30,2) wchy1('lena.tif',45,3)4、运行结果:二、编写一个函数,实现将一幅图像水平垂直偏移若干像素。

MATLAB实验报告

MATLAB实验报告

MATLAB实验报告⼀.试验时间:2013/10/15 ⼆.实验地点:⼤楼五楼8号机房三.实验名称:MATLAB 数值计算四.实验⽬的:1.掌握MATLAB 数据对象的特点以及数值的运算规则。

2.掌握MATLAB 中建⽴矩阵的⽅法以及矩阵处理和分析的⽅法。

3.掌握MATLAB 中常量与变量的使⽤及各种表达式的书写规则。

4.熟悉MATLAB 常⽤函数的使⽤以及多项式的运⽤。

⼆.实验内容1. 求下列表达式的值。

(1)z1=2185sin 2e +结果:>> z1=2*sin((85/360)*pi)/(1+eps*eps) z1 =1.3512(2)z2=),x 1(ln 21++x ?-+=5,45.0t *21,2x结果:>> x=[2 1+2*i;-0.45 5] x =2.0000 1.0000 + 2.0000i -0.4500 5.0000 >> z2=1/2*log(x+sqrt(1+x)) z2 =0.6585 0.6509 + 0.4013i -0.6162 1.0041 (3)z3=22.0^3.0^e a e a -×sin(a+0.3)+ln(23.0a +),a=-3.0,-2.9,-2.8,…2.8,2.9,3.0结果:>> a=-3:0.1:3;>> z3=(eps(a*0.3)-eps(a*0.2))/2.0.*sin(a+0.3)+log((a+0.3)/2.0) z3 =Columns 1 through 50.3001 + 3.1416i 0.2624 + 3.1416i 0.2231 + 3.1416i 0.1823 + 3.1416i 0.1398 + 3.1416i0.0953 + 3.1416i 0.0488 + 3.1416i -0.0000 + 3.1416i -0.0513 + 3.1416i -0.1054 + 3.1416i Columns 11 through 15-0.5108 + 3.1416i -0.5978 + 3.1416i -0.6931 + 3.1416i -0.7985 + 3.1416i -0.9163 + 3.1416i Columns 21 through 25-1.0498 + 3.1416i -1.2040 + 3.1416i -1.3863 + 3.1416i -1.6094 + 3.1416i -1.8971 + 3.1416i Columns 26 through 30-2.3026 + 3.1416i -2.9957 + 3.1416i -37.0245 -2.9957 -2.3026 Columns 31 through 35-1.8971 -1.6094 -1.3863 -1.2040 -1.0498Columns 36 through 40-0.9163 -0.7985 -0.6931 -0.5978 -0.5108Columns 41 through 45-0.4308 -0.3567 -0.2877 -0.2231 -0.1625Columns 46 through 50-0.1054 -0.0513 0.0000 0.0488 0.0953Columns 51 through 550.1398 0.1823 0.2231 0.2624 0.3001Columns 56 through 600.3365 0.3716 0.4055 0.4383 0.4700Column 610.50082.创建⼀个由10个元素组成的等差数列x,第⼀个元素是1,第10个元素是20.(1)计算其元素个数;(2)取出其中第⼆个元素赋值给y.(3)将数组X的前3个元素分别赋值为4,5,6.(4)将数组X的前5个元素倒序后构成⼀个字数组赋值给Z。

图像几何变换

图像几何变换

实验三图像几何变换实验3.1 图像的缩放一.实验目的1.熟悉matlab图像处理工具箱及图像缩放函数的使用;2.掌握图像缩放的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像缩放函数,设置相关参数,再输出处理后的图像。

I = imread('cameraman.tif');figure,imshow(I);scale = 0.5;J = imresize(I,scale);figure,imshow(J);四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。

书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像缩放函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察matlab环境下图像缩放后的结果。

(a)原始图像 (b)缩放后的图像六.实验报告要求输入一幅灰度图像,给出其图像缩放后的结果,然后改变缩放比率,观察图像缩放后结果柄进行分析。

原始图片缩放后的图像0.5 缩放后的图像0.2结果分析:J = imresize(I,scale);%返回的图像B的长宽是图像I的长宽的scale倍,即缩放图像。

scale大于1,则放大图像;scale小于1,缩小图像。

实验3.2 图像旋转一.实验目的1.熟悉matlab图像处理工具箱及图像旋转函数的使用;2.理解和掌握图像旋转的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像旋转函数,设置相关参数,再输出处理后的图像。

I = imread('cameraman.tif');figure,imshow(I);theta = 30;K = imrotate(I,theta); % Try varying the angle, theta.figure, imshow(K)四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。

matlab图像几何变换答案.docx

matlab图像几何变换答案.docx

实验四:图像几何变换(编程报告)一、实验目的(1)学习儿种常见的图像儿何变换,并通过实验体会儿何变换的效果;(2)常握图像平移、剪切、缩放、旋转、镜像、错切等几何变换的算法原理及编程实现(3)掌握matlab编程环境中基木的图像处理函数(4)掌握图像的复合变换二、涉及知识点(1)图像几何变换不改变图像像素的值,只改变像素所在的几何位置(2)图像裁剪imcrop函数,语法格式为:B=imcwp(A);交互式用鼠标选取区域进行剪切B=imcrop(A,[left top right bottom]);针对指定的区域[left top right bottom]进行剪切(3)图像缩放imresize函数,语法格式为:B = imresize(A,m,method)这里参数method用丁•指定插值的方法,可选用的值为'nearest* (最邻近法),'bilinear* (双线性插值),'bicubic'(双三次插值),默认为'nearest'oB二imresize(A,m,method)返冋原图A的m倍放大的图像(m小于1时效果是缩小)。

⑷ 图像旋转imrotate函数,语法格式为:B = imrotate(A,angle,^rop^,参数crop用于指定裁剪旋转后超出图像的部分。

三、实验内容(1)将图像hehua.bmp裁剪成200X200大小⑵制作动画,将一幅图像逐渐向左上角平移移出图像区域,空白的地方用白色填充(3)利用剪切图像函数制作动画⑷ 将图像分别放大1.5倍和缩小0.8倍,插值方法使用双线性插值法,分别显示图像。

(5)将图像水平镜像,再顺吋针旋转45度,显示旋转后的图像。

(6)将图像分别进行水平方向30度错切,垂直方向45度错切,分别显示结果四、实验环境Windows卜matlab编程环境五、实验源代码及结果裁夢后2・ f=imreadChehual .bmp r);[m,n,xj=size(f);f=double(f);for i=l:10mx=10*i;my 二10*i;g=zeros(m,n,x)+255;%g(mx+1:m,my+1:nJ:x)=f(l:m-mxj:n-my J :x); g( 1:m-mx,l:n-my ,1 :x)=f(mx+1:m,my+1:nJ :x);figure;imshow(uint8(g));end3・ f=imreadChehual .bmp1); [m,n]=size(f);for i=50:10:2(X)m=i;n=i;f2=imcrop(f4n,n,mjnJ); figure;imshow(uint8(f2));4. f=imread(,hehua l.bmp1); figure;imshow(f);titleC 原图J;f= double(f);fl =imresize(f, 1.5,'bilinear'); figure;imshow(uint8(f 1));title('放大1.5 倍');f2=imresize(f,0.8,'bilinear'); figure;imshow(uint8(f2));titled缩小0.8 倍');5. f=imread(,hehua 1 .bmp1); subplot(131); imshow(f); titlefJM 图); [m,n,x]=sizc(f); g=zeros(m,n,x); for i=l:m for j =l:n for k=l:x g(i,j,k)=f(i,n・j+l,k); endend subplot(132); imshow(uint8(g));titleC 水平镜像工 f2=imrotate(g,45,'crop ,); subplot(133); imshow(uint8(f2)); titled®时针旋转45度);6・ f=imreadChehual .bmp 1);subplot(131);imshow(f);title (隙图');h=size(f);fl=zeros(h(l )+round(h(2)*tan(pi/6)),h(2),h(3));for m= l:h(l)forn=l:h(2)fl(m+round(n*tan(pi/6)),n,l :h(3))=f(m,n,l :h(3)); endendsubplot(132);imshow(uint8(f 1));title ('水平 30 度);f2=zeros(h( 1 ),h(2)+round(h(2)*tan(pi/4)),h(3));for m=l:h(l)for n=l:h ⑵f2(m,n+round(m*tan(pi/4)), 1:h(3))=f(m,n,l:h(3));endendsubplot(133);imshow(uint8(f2));title (唾直 45 度');原图 水平镜像 顺时针旋转45度1 ・ f=imread(,hehua.bmp ,);figure;imshow(f);title 。

Matlab实验报告

Matlab实验报告

实验报告潘佳韩 08373061 邓振荣 08373024王睿晨 08373028 李恒 08373096 张明 08373046 练习一:实验目的:熟悉线性变换与仿射变换。

实验原理:φ:(x,y)→(x',y') 由函数关系x'=a1 x+b1 y; y'=a2 x+b2 y决定,a1,a2,b1,b2是与x,y无关的常数。

那么φ为线性变换。

而仿射变换可以看成先作一个线性变换,再作一次平移得到的变换。

实验步骤:t=Pi/6;a1=Cos[t];b1=-Sin[t];a2=Sin[t];b2=Cos[t];f[{x_,y_}]:={a1*x+b1*y,a2*x+b2*y};co={};curve={};Do[AppendTo[co,{{-5,y},{5,y}}],{y,-5,5}];Do[AppendTo[co,{{x,-5},{x,5}}],{x,-5,5}];curve=Table[{1.5 Sin[4 t],-3 Sin[3 t]*Sin[5 t]+2},{t,0,2 Pi,Pi/180}];Do[AppendTo[curve,{5 Sin[2 t],5 Sin[3 t]*Sin[5 t]}],{t,0,Pi,Pi/180}];Show[Graphics[Table[Line[co[[i]]],{i,1,22}]],Graphics[Line[curve]],AspectRatio Automatic]w=1;Show[Graphics[Table[Line[{Nest[f,co[[i,1]],w],Nest[f,co[[i,2]],w]}],{i,1,22}]], Graphics[Line[Table[Nest[f,curve[[j]],w],{j,1,Length[curve]}]]],AspectRatio Au tomatic]实验结果:(1) φ (c):x'=x cos α-y sin α;y'=x sin α+y cos α为c经过旋转得到的图像(2)(x,y)与(x’,y’)满足:(x tan α-y)/(1+tan α^2)^0.5=(x' tan α-y')/(1+tan α^2)^0.5;(x'-x)/(y-y')=tan α(3)直线变换后依旧是直线,平行直线变换后依旧是平行直线,平行四边形变换后依旧是平行四边形练习二:实验目的:研究线性变换的特征实验原理:在单位圆周上依次取点,观察各向量间的关系实验步骤:pic={};n=90;Do[p0={Cos[2m*Pi/n],Sin[2m*Pi/n]};AppendTo[pic,Line[{{0,0},2p0}]];points={};p=p0;Do[AppendTo[points,p];p1=f[p];p=p1,{k,1,2}];AppendTo[pic,Line[points]],{m,1,n}];pic1=Show[Graphics[pic],AspectRatio Automatic]实验结果:实验结论:会存在向量OP 与PP’方向一致实验目的:观察经过f变换后,图形c以及网格o的变化情况。

matlab图像几何变换报告

matlab图像几何变换报告

《数字图像处理》课程设计报告课题名称图像几何变换系统设计学院自动控制与机械工程学院专业通信技术班级1班姓名学号毕思发201004090101高建磊201004090104瞿瑞锋201004090111刘跃翔201004090118杨正华201004090130时间2012.6.26目录一、引言 (3)1.1课程设计的目的 (3)1.2 课程设计任务 (3)1.3 课程设计要求与内容 (4)二、系统总体设计 (5)2.1 设计方案 (5)2.2 开发步骤 (5)2.3 开发工具 (5)2.4 系统框图 (6)三、系统设计与实现 (7)3.1模块功能 (7)3.2 设计内容 (7)3.3 流程图 (8)3.4M a t l a b程序实现代码 (10)四、系统仿真与调试 (14)4.1 matlab仿真结果截图示例 (14)4.2 问题与解决方案 (20)五、心得体会 (21)参考文献 (22)一、引言近几年来,由于大规模集成电路技术和计算机技术的迅猛发展、离散数学理论的创立和完善,数字图像处理技术正逐渐成为其他科学技术领域中不可缺少的一项重要工具。

数字图像技术也从空间探索到微观研究、从军事领域到农业生产、从科学教育到娱乐游戏等越来越多的领域得到广泛应用。

无形之中成为了现代不可或缺的处理技术。

我们的娱乐生活、学习、甚至是科技的发展都离不开它。

通过课程设计实现对其的认知度以及更深入的学习和运用它。

1.1课程设计的目的数字图像处理课程设计作为独立的教学环节,是通信技术及相关专业的集中实践环节之一,是学习完《数字图像处理》课程后,进行的一次综合练习。

数字图像处理课程设计过程中,学生通过查阅资料、总体设计、模块设计、程序设计、集成调试等环节,完成一个基于Matlab编程语言,涉及多种典型应用,并具有综合功能的数字图像处理系统设计。

使学生能够将课堂上学到的理论知识与实践应用结合起来,对数字图像处理基础理论、程序逻辑分析、算法设计等方面的知识进一步加深认识,同时在软件编程、调试、工程合作开发等方面得到较全的锻炼和提高。

实验报告二 Matlab图像代数运算和几何变换

实验报告二 Matlab图像代数运算和几何变换

实验二Matlab图像代数运算和几何变换一、实验目的1、掌握不同图像类型的转换2、掌握图像代数运算和几何变换的方法;3、掌握灰度级插值法的实验方法。

二、实验内容1、练习图像类型转换的相关命令(ind2rgb,mat2gray,grayslice,rgb2gray,rgb2ind,im2bw,ind2gray,dither)(p69-73);2、练习课本6.3.2(p139-p143)图像代数运算的内容;3、练习图像平移 (p148),图像比例变换(p153),图像旋转(p156),图像镜像变换(p158),图像切割(p160)Matlab实现例题;4、练习灰度级插值法(p171)。

三、实验步骤和结果1、练习图像类型转换的相关命令(ind2rgb,mat2gray,grayslice,rgb2gray,rgb2ind,im2bw,ind2gray,dither)(1)mat2gray()函数I=imread('rice.png');>> J=filter2(fspecial('sobel'),I);>> K=mat2gray(J);>> imshow(I);>> figure,imshow(K)(2)、grayslice()函数>> I=imread('snowflakes.png');>> X=grayslice(I,16);>> imview(I)imview(X,jet(16))(3)、rgb2ind()函数> RGB=imread('peppers.png');>> imshow(RGB);>> figure,imshow(RGB)>> [X,map]=rgb2ind(RGB,128);>> figure,imshow(X,map) (4)、im2bw()函数>> load trees>> BW=im2bw(X,map,0.4);>> figure,imshow(X,map)>> figure,imshow(BW)(5)、ind2gray()函数load trees>> I=ind2gray(X,map);>> figure,imshow(X,map)>> figure,imshow(I)(6)、dither()函数>> RGB=imread('peppers.png'); >> [X,map]=rgb2ind(RGB,256); >> I=dither(RGB,map);>> BW=dither(I);>> imshow(RGB,map);>> figure,imshow(RGB,map); >> figure,imshow(BW)Result:(1)转换后图像(2)索引色图像(3)索引色图像(4)索引色图像(4)二值化后的图像(5)转换后的灰度图像(6)索引色图像(6)抖动转换图像2、练习课本6.3.2(p139-p143)图像代数运算的内容(1)加法运算I=imread('rice.png');>> figure(1),imshow(I,[])>> I2=imread('cameraman.tif')>> figure(2),imshow(I2,[])>> K=imadd(I,I2,'uint16');>> figure(3),imshow(K,[])>> I=imread('lena.bmp');>> I2=imadd(I,50);>> figure(1),imshow(I)>> figure(2),imshow(I2)(2)、减法运算>> I=imread('rice.png'); >> I2=imread('cameraman.tif'); >> I3=imsubtract(I,I2);>> figure,imview(I3)(3)乘法&除法运算>> I=imread('lena.bmp');>> I2=immultiply(I,0.5);>> figure,imshow(I)>> figure,imshow(I2)>> I3=immultiply(I,1.5);>> figure,imshow(I3)>> I4=imdivide(I,0.5);>> figure,imshow(I4)>> I5=imdivide(I,1);>> figure,imshow(I5)Result:(1)加法运算后的图像(1)加入常数后的图像(2)减法运算(3)乘以0.5后的图像乘以1后的图像除以0.5后的图像除以1后的图像3、练习图像平移 (p148),图像比例变换(p153),图像旋转(p156),图像镜像变换(p158),图像切割(p160)Matlab实现例题;(a)图像平移>> I=imread('trees.tif');>> figure,imshow(I)>> I=double(I);>> I_movesult=zeros(size(I));>> H=size(I);>> Move_x=50;>> Move_y=50;>>I_movesult(Move_x+1:H(1),Move_y+1:H(2))=I(1:H(1)-Move_x,1:H(2)-Move_y);>> figure,imshow(uint8(I_movesult))(b)图像比例变换J=imread('trees.tif');>> figure,imshow(J);>> X1=imresize(J,2);>> X2=imresize(J,0.5);>> figure,imshow(X1)>> figure,imshow(X2)(C)图像旋转变换>> I=imread('peppers.png');>> figure,imshow(I)>> X1=imrotate(I,30,'nearest');>> figure,imshow(uint8(X1))>> X2=imrotate(I,45,'nearest');>> figure,imshow(uint8(X2))>> X3=imrotate(I,60,'nearest');>> figure,imshow(uint8(X3))>> X4=imrotate(I,90,'nearest');>> figure,imshow(uint8(X4))(d)图像镜像变换>> I=imread('forest.tif');>> I=double(I);>> figure,imshow(uint8(I));>> H=size(I);>> figure(2),>> I2(1:H(1),1:H(2))=I(H(1):-1:1,1:H(2));>> imshow(uint8(I2));>> figure,imshow(uint8(I2));>> I3(1:H(1),1:H(2))=I(1:H(1),H(2):-1:1);>> figure,imshow(uint8(I3));>> I4(1:H(1),1:H(2))=I(H(1):-1:1,H(2):-1:1);>> figure,imshow(uint8(I4));(e)图像切割>> I1=imread('peppers.png');>> I2=imcrop(I1,[75 68 220 100]);>> imview(I2)I3=imcrop(I1,[30 40 120 100]);>> imview(I3)(a)平移后的图像(b)放大后图像(b)缩小后的图像(c)旋转30°后的图像旋转45°后的图像旋转60°后的图像旋转90°后的图像(d)原始图像垂直镜像水平镜像对角镜像(e)原始图像一次切割后图像二次切割后图像4、练习灰度级插值法(p171)>> I=imread('lena.bmp');>> X1=imresize(I,1);>> X2=imresize(I,1,'bilinear');>> X3=imresize(I,1,'bicubic');>> figure,imshow(X1)>> figure,imshow(X2)>> figure,imshow(X3)最近邻差值法双线性插值法三次插值法四、实验体会在本次实验中掌握不同图像类型的转换,掌握了转换函数及其语法格式,如ind2rgb()函数将索引图像转换成真彩色。

matlab图像几何变换

matlab图像几何变换

学号光电图像处理实验报告实验一:图像几何变换作者肖剑洪专业电子科学与技术学院物理与电子学院指导老师王晓明完成时间2013.12.2实验一图像几何变换一、实验目的图像几何变换是图像处理与分析的基础容之一。

使学生掌握图像平移、镜像、缩放和旋转等几何变换的方法以及程序实现。

二、实验设备联想图像处理工作站三、实验容及要求图像几何变换不改变图像的像素值,而是改变像素所在的几何位置,具有独特的方法。

本实验的容如下:1.学会使用Matlab的图像处理工具箱(Image Processing Toolbox)。

使学生初步具备使用该软件处理图像信息能力,并可以利用该软件完成本课程规定的其他实验和作业。

2.编程实现图像平移,要求平移后的图像大小不变;3.编程实现图像的镜像;4.编程实现图像的比例缩放,要求分别用最近邻插值、双线性插值和双三次插值三种方法来实现,并比较缩放效果;5.编程实现以任意角度对图像进行旋转变换。

四、实验原理1.图像平移从上到下、从左到右依次计算新图像中的每个像素(x, y)在源图像中对应的坐标值(x0, y0);即:x0 = x –△x,y0 = y –△y其中,△x、△y分别是水平和垂直偏移量。

2.图像镜像从上到下、从左到右依次计算新图像中的每个像素(x, y)在源图像中对应的坐标值(x0, y0);即:x0 = fWidth – x,y0 = y 水平镜像x0 = x,y0 = fHeight – y 垂直镜像其中,fWidth、fHeight分别是图像的宽度和高度。

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

从上到下、从左到右依次计算新图像中的每个像素(x, y)在源图像中对应的坐标值(x0, y0);即:x0 = [x / fx + 0.5],y0 = [y / fy + 0.5]其中,fx、fy分别是水平和垂直方向的缩放比率,中括号表示对括号表达式取整。

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

作业二几何变换一、编写一个函数,实现将一幅图像旋转一定角度,以该图像中心点为旋转点。

分别使用三种插值方法。

1、原理:平移变换:x = u + δxy = v + δy旋转变换:x = ucosθ - vsinθy = usinθ + vcosθ2、源码:function wchy1(I,jiaodu,wchy)%用三种插值方法实现将一幅图像旋转一定角度%I:待处理图片名称%jiaodu:要旋转的角度,旋转方向为顺时针%wchy:插值方法,1代表最近邻插值,2代表双线性插值,3代表三次内插法img=imread(I);figure,subplot(1,2,1);imshow(img),title('原图');[h,w]=size(img);theta=jiaodu/180*pi;py=[1 0 w/2;0 1 h/2;0 0 1];rot=[cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1];pix1=[1 1 1]*py*rot;%变换后图像左上点的坐标pix2=[1 w 1]*py*rot;%变换后图像右上点的坐标pix3=[h 1 1]*py*rot;%变换后图像左下点的坐标pix4=[h w 1]*py*rot;%变换后图像右下点的坐标height=round(max([abs(pix1(1)-pix4(1))+0.5 abs(pix2(1)-pix3(1))+0.5]));%变换后图像的高度width=round(max([abs(pix1(2)-pix4(2))+0.5 abs(pix2(2)-pix3(2))+0.5]));%变换后图像的宽度imgn=zeros(height,width);delta_y=abs(min([pix1(1) pix2(1) pix3(1) pix4(1)]));%取得y方向的负轴超出的偏移量delta_x=abs(min([pix1(2) pix2(2) pix3(2) pix4(2)]));%取得x方向的负轴超出的偏移量switch wchycase 1for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot/py;%用变换后图像的点的坐标去寻找原图像点的坐标,否则有些变换后的图像的像素点无法完全填充if pix(1)>=1 && pix(2)>=1 && pix(1)<=h && pix(2)<=wimgn(i+delta_y,j+delta_x)=img(round(pix(1)),round(pix(2)));endendendsubplot(1,2,2),imshow(uint8(imgn)),title('最近邻插值法旋转后的图片')case 2for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot/py;%用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= wpix_up_left=[floor(pix(1)) floor(pix(2))];%四个相邻的点pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y);%计算临近四个点的权重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_lef t(2))+ ...value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2));endendendsubplot(1,2,2),imshow(uint8(imgn)),title('双线性插值法旋转后的图片')case 3for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/rot/py;%用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充u=pix(1)-floor(pix(1)); i1=floor(pix(1))+2;v=pix(2)-floor(pix(2));j1=floor(pix(2))+2;if pix(1)>=1 && pix(2)>=1 && pix(1) <= h-3 && pix(2) <= w-3A=[sw(1+u) sw(u) sw(1-u) sw(2-u)];C=[sw(1+v);sw(v);sw(1-v);sw(2-v)];B=[img(i1-1,j1-1) img(i1-1,j1) img(i1-1,j1+1) img(i1-1,j1+2)img(i1,j1-1) img(i1,j1) img(i1,j1+1) img(i1,j1+2)img(i1+1,j1-1) img(i1+1,j1) img(i1+1,j1+1) img(i1+1,j1+2)img(i1+2,j1-1) img(i1+2,j1) img(i1+2,j1+1) img(i1+2,j1+2)];B=double(B);imgn(i+delta_y,j+delta_x)=(A*B*C);endendendsubplot(1,2,2),imshow(uint8(imgn)),title('三次内插法旋转后的图片') endfunction A=sw(w1)w=abs(w1);if w<1&&w>=0A=1-2*w^2+w^3; elseif w>=1&&w<2A=4-8*w+5*w^2-w^3; elseA=0;end3、测试:clear,clcwchy1('lena.tif',15,1) wchy1('lena.tif',30,2) wchy1('lena.tif',45,3)4、运行结果:2、编写一个函数,实现将一幅图像水平垂直偏移若干像素。

分别使用三种插值方法。

1、原理:水平偏移:x = u + shv;y=v垂直偏移:x = u;y = svu + v2、源码:function wchy2(I,sp,cz,wchy)%用三种插值方法实现将一幅图像水平垂直偏移变换%I:待处理图片名称%sp:水平偏移多少像素%cz:垂直偏移多少像素%wchy:插值方法,1代表最近邻插值,2代表双线性插值,3代表三次内插法img=imread(I);figure,subplot(1,2,1);imshow(img),title('原图');[h,w]=size(img);sh=sp/w;sv=cz/(h+sp);sp_rot=[1 sh 0;0 1 0;0 0 1];cz_rot=[1 0 0;sv 1 0;0 0 1];pix1=[1 1 1]*sp_rot*cz_rot;%变换后图像左上点的坐标pix2=[1 w 1]*sp_rot*cz_rot;%变换后图像右上点的坐标pix3=[h 1 1]*sp_rot*cz_rot;%变换后图像左下点的坐标pix4=[h w 1]*sp_rot*cz_rot;%变换后图像右下点的坐标height=round(max([abs(pix1(1)-pix4(1))+0.5 abs(pix2(1)-pix3(1))+0.5]));%变换后图像的高度width=round(max([abs(pix1(2)-pix4(2))+0.5 abs(pix2(2)-pix3(2))+0.5]));%变换后图像的宽度imgn=zeros(height,width);delta_y=abs(min([pix1(1) pix2(1) pix3(1) pix4(1)])); %取得y方向的负轴超出的偏移量delta_x=abs(min([pix1(2) pix2(2) pix3(2) pix4(2)])); %取得x方向的负轴超出的偏移量switch wchycase 1for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/cz_rot/sp_rot;%用变换后图像的点的坐标去寻找原图像点的坐标,否则有些变换后的图像的像素点无法完全填充if pix(1)>=1 && pix(2)>=1 && pix(1)<=h && pix(2)<=wimgn(i+delta_y,j+delta_x)=img(round(pix(1)),round(pix(2)));endendendsubplot(1,2,2),imshow(uint8(imgn)),title('最近邻插值法偏移后的图片')case 2for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/cz_rot/sp_rot;%用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充float_Y=pix(1)-floor(pix(1));float_X=pix(2)-floor(pix(2));if pix(1)>=1 && pix(2)>=1 && pix(1)<=h && pix(2)<=wpix_up_left=[floor(pix(1)) floor(pix(2))];%四个相邻的点pix_up_right=[floor(pix(1)) ceil(pix(2))];pix_down_left=[ceil(pix(1)) floor(pix(2))];pix_down_right=[ceil(pix(1)) ceil(pix(2))];value_up_left=(1-float_X)*(1-float_Y);%计算临近四个点的权重value_up_right=float_X*(1-float_Y);value_down_left=(1-float_X)*float_Y;value_down_right=float_X*float_Y;imgn(i+delta_y,j+delta_x)=value_up_left*img(pix_up_left(1),pix_up_lef t(2))+ ...value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...value_down_right*img(pix_down_right(1),pix_down_right(2));endendendsubplot(1,2,2),imshow(uint8(imgn)),title('双线性插值法偏移后的图片')case 3for i=1-delta_y:height-delta_yfor j=1-delta_x:width-delta_xpix=[i j 1]/cz_rot/sp_rot;%用变换后图像的点的坐标去寻找原图像点的坐标,%否则有些变换后的图像的像素点无法完全填充u=pix(1)-floor(pix(1)); i1=floor(pix(1))+2;v=pix(2)-floor(pix(2));j1=floor(pix(2))+2;if pix(1)>=1 && pix(2)>=1 && pix(1)<=h-4 && pix(2)<=w-4A=[sw(1+u) sw(u) sw(1-u) sw(2-u)];C=[sw(1+v);sw(v);sw(1-v);sw(2-v)];B=[img(i1-1,j1-1) img(i1-1,j1) img(i1-1,j1+1) img(i1-1,j1+2)img(i1,j1-1) img(i1,j1) img(i1,j1+1) img(i1,j1+2)img(i1+1,j1-1) img(i1+1,j1) img(i1+1,j1+1) img(i1+1,j1+2)img(i1+2,j1-1) img(i1+2,j1) img(i1+2,j1+1) img(i1+2,j1+2)];B=double(B);imgn(i+delta_y,j+delta_x)=(A*B*C);endendendsubplot(1,2,2),imshow(uint8(imgn)),title('三次内插法偏移后的图片') endfunction A=sw(w1)w=abs(w1);if w<1&&w>=0A=1-2*w^2+w^3;elseif w>=1&&w<2A=4-8*w+5*w^2-w^3;elseA=0;end3、测试:clear,clcwchy2('Fig0237.tif',20,200,1) wchy2('Fig0237.tif',20,200,2) wchy2('Fig0237.tif',20,200,3)4、运行结果:。

相关文档
最新文档