实验二 Matlab图像代数运算
- 格式:doc
- 大小:4.75 MB
- 文档页数:6
实验报告实验一图像的傅里叶变换(旋转性质)实验二图像的代数运算实验三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°,由此可知,时域中的信号被压缩,到频域中的信号就被拉伸。
理工大学信息工程与自动化学院学生实验报告( 2012 —2013 学年第二学期)课程名称:图形图像处理开课实验室:信自444 2013年 5月 15日一、实验目的1.了解图像的算术运算在数字图像处理中的初步应用。
2.体会图像算术运算处理的过程和处理前后图像的变化。
二、实验原理图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。
如果输入图像为A(x,y)和B(x,y),输出图像为C(x,y),则图像的代数运算有如下四种形式:C(x,y) = A(x,y) + B(x,y)C(x,y) = A(x,y) - B(x,y)C(x,y) = A(x,y) * B(x,y)C(x,y) = A(x,y) / B(x,y)图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算术操作,还能为许多复杂的图像处理提供准备。
例如,图像减法就可以用来检测同一场景或物体生产的两幅或多幅图像的误差。
使用MATLAB的基本算术符(+、-、*、/ 等)可以执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型。
为了更方便地对图像进行操作,MATLAB 图像处理工具箱包含了一个能够实现所有非稀疏数值数据的算术操作的函数集合。
下表列举了所有图像处理工具箱中的图像代数运算函数。
表2-1 图像处理工具箱中的代数运算函数能够接受uint8和uint16数据,并返回相同格式的图像结果。
虽然在函数执行过程中元素是以双精度进行计算的,但是MATLAB工作平台并不会将图像转换为双精度类型。
代数运算的结果很容易超出数据类型允许的围。
例如,uint8数据能够存储的最大数值是255,各种代数运算尤其是乘法运算的结果很容易超过这个数值,有时代数操作(主要是除法运算)也会产生不能用整数描述的分数结果。
图像的代数运算函数使用以下截取规则使运算结果符合数据围的要求:超出数据围的整型数据将被截取为数据围的极值,分数结果将被四舍五入。
实验三图像运算本实验是综合性实验,涵盖Matlab程序设计、代数运算、几何运算等多章基本知识及其应用。
一、实验目的与要求1、理解图像代数运算、几何运算的基本定义和常见方法。
2、掌握在MTLAB中对图像进行代数运算、几何运算的方法。
3、掌握在MATLAB中进行插值的方法。
4、运用MATLAB语言实现图像的插值缩放和插值旋转.二、实验原理代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。
对于相加和相乘的情形,可能不止有两幅图像参加运算。
在一般情况下,输入情况之一可能为常数。
四种图像处理代数运算的数学表达式如下:C(x,y)=A(x,y)+B(x,y)C(x,y)=A(x,y)-B(x,y)C(x,y)=A(x,y)*B(x,y)C(x,y)=A(x,y)/B(x,y)其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。
还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。
在MATLAB中,我们可以用函数简单的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些矩阵后我们只要适当的设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y))图像相加的一个重要应用是对同一场景的多幅图像求平均值。
这点被经常用来有效的降低加性随机噪声的影响。
如果把B(x,y)换成一个常数,通过加、减、乘、除运算可实现图像亮度的调整。
几何运算可改变图像中各物体之间的空间关系。
这种运算可以被看成是将物体在图像内移动。
一个几何运算需要两个独立的算法。
首先,需要一个算法来定义空间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”。
同时,还需要一个用于灰度插值的算法,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。
因此插值就是对变换之后的整数坐标位置的像素值进行估计。
图像的代数运算一、设计目的图像代数运算设计目的如下:一是运用图像代数运算的相关知识降低同一场景的多幅图像中所含叠加性质的随机噪声。
二是掌握检测多幅图像间的变化及运动的物体的方法。
三是知道如何屏蔽掉图像的某些部分。
由图像算术运算的运算结果,思考图像减法运算在什么场合上发挥优势?二、设计要求1、自己编程实现所有算法,不得直接运用matlab函数,并与imadd、imsubtract、imdivide等函数进行效果比较。
2、在处理过程中请考虑:处理结果图像的像素值很可能超过图像数据类型所支持的最大值,尤其对于uint8类型的图像,溢出的情况。
三、设计内容1、降低同一场景的多幅图像中所含叠加性质的随机噪声。
2、检测多幅图像间的变化及运动的物体。
3、屏蔽掉图像的某些部分。
4、由图像算术运算的运算结果,思考图像减法运算在什么场合上发挥优势?四、设计方案图像代数运算设计,根据已知的设计内容和要求我的方案如下:根据内容一我的方案是:首先读入一幅图像并对图像添加多种不同的随机噪声来生成同一场景多幅含随机噪声的图像。
其次将得到噪声图像累加起来得到同一场景的多幅含叠加性质的随机噪声图像。
最后通过对多幅图像求平均值的方法来降低同一场景的多幅图像中所含叠加性质的随机噪声(这里可将编程得到的图像求平均处理效果与调用imlincomp函数得到的处理效果比较)。
根据内容二我的方案是:先读入一幅图像并做运动模糊以及添加随机噪声处理来生成多幅运动和变化的图像。
然后将得到的多幅运动变化图像与原图像相减来检测多幅图像间的变化及运动的物体。
最后将编程得到的处理效果与调用imsubtract函数得到的处理效果进行比较。
根据内容三。
五、实验结果1)降低同一场景的多幅图像中所含叠加性质的随机噪声源代码如下:%%降低同一场景的多幅图像中所含叠加性质的的随机噪声I=imread('1YZ`}4G}1A]07OF$TDW0)C2.jpg');noise1=0.1*randn(size(I));%添加随机噪声m1=I+im2uint8(noise1);m2=imnoise(I,'gaussian',0.02);%添加高斯噪声m3=imnoise(I,'salt & pepper', 0.02);% 添加椒盐噪声noise2=fspecial('motion',20,45);%添加运动模糊噪声m4=imfilter(I,noise2,'circular','conv');k=0.25*(m1+m2+m3+m4);%将加有噪声的四幅图像求平均k1=imlincomb(0.25,m1,0.25,m2,0.25,m3,0.25,m4);% 将加有噪声的四幅图像线性组合(求平均)figure(1)subplot(231);imshow(I);title('原始图像')subplot(232);imshow(m1);title('添加随机噪声的图像')subplot(233);imshow(m2);title('添加高斯噪声的图像')subplot(234);imshow(m3);title('添加椒盐噪声的图像')subplot(235);imshow(m4);title('添加运动模糊噪声的图像')figure(2)imshow(k);title('自己编程均值去噪后的图像')figure(3)imshow(k1);title('调用imlincomb去噪后的图像')运行结果如下:图一说明:对原始图像添加四种噪声后得到加噪后的四幅图像及原始图像。
图像代数运算在Matlab中的实现作者:谢新文来源:《环球市场信息导报》2014年第11期图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。
该文介绍了图像的加、减、乘、除代数运算在Matlab的实现方法。
1.什么是图像的代数运算图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。
如果输入图像为A(x,y)和B(x,y),输出图像为C(x,y),则图像的代数运算有如下四种形式:C(x,y) = A(x,y) + B(x,y)C(x,y) = A(x,y) - B(x,y)C(x,y) = A(x,y) * B(x,y)C(x,y) = A(x,y) / B(x,y)图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算术操作,还能为许多复杂的图像处理提供准备。
例如,图像减法就可以用来检测同一场景或物体生产的两幅或多幅图像的误差。
2.图像的加法运算图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。
直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通讯方式传送的图像(如卫星图像),这种处理是必不可少的。
在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。
imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。
imadd函数的调用格式如下:Z = imadd(X,Y)其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。
例如,以下代码使用加法操作将图rice.tif和图cameraman.tif两幅图像叠加在一起:I = imread(‘rice.tif’);J = imread(‘cameraman.tif’);K = imadd(I,J);imshow(K);3.图像的减法运算图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。
实验⼆数字图像Matlab基本操作实验⼆数字图像的基本操作⼀.实验⽬的1.掌握图像数据的格式;2.掌握MATLAB语⾔中图象数据与信息的读取⽅法;3.掌握在图像基本运算的⽅法及操作原理。
⼆.实验内容1.图像⽂件的读、写和显⽰参照2.2和2.4的内容,熟练掌握imread、imwrite、imshow、imfinfo、imagesc的使⽤。
(1)任意读⼊⼀个.bmp格式的彩⾊图像⽂件(数据要少),查看⽂件的数据形式。
(2)写⼀个m⽂件,包含上述五个命令的使⽤,并包含⼆值图像的显⽰和添加⾊条;(3)由⼆维数组创建灰度图像,并显⽰和保存。
⾃⼰创建⼀个⼆维数组,然后⽤图像显⽰命令显⽰出来。
(4)将⼀幅256灰度级的原始图像,显⽰为64灰度级图像;(5)分别列出⼀幅索引图像的数据和调⾊板,改动部分调⾊板内容后,显⽰图像,观察图像有何变化,改动部分数据,显⽰图像,观察图像有何变化;Height: 512BitDepth: 8ColorType: 'indexed'FormatSignature: 'GIF89a' BackgroundColor: 0AspectRatio: 0ColorTable: [256x3 double]Interlaced: 'no'DelayTime: 50DisposalMethod: 'DoNotspecify'(3)A=ones(100,300);A(1:20,20:40)=0.5;i=mat2gray(A);imshow(i);(4)I=imread('harbour.tif');imshow(I,[0,63]);2.图像阅览器的使⽤按照2.3操作,熟悉imview打开的图像阅览器。
操作结果略:3.常⽤图像操作(1)参照4.1的内容,重点掌握ind2rgb、mat2gray、rgb2gray、im2bw命令。
1.imresize函数可将图像调整为指定的大小,语法格式为A=imresize(B,[m,n]),将B图像调整为m行n列的像素大小,A为输出图片。
J=imread('C:\Users\Yang\Desktop\1.jpg');J=imresize(J,[200,100]); %将图像调整为200行乘以100列个像素大小imshow(J)----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------图像的代数运算一.图像相加(imadd 函数)图像是矩阵,图像与图像相加也就是矩阵的相加,两个矩阵对应元素相加,故图像大小和类型必须保持一致。
图像与常数相加,是图像矩阵每个元素与该常数相加,相加之和(255为截断阈值)作为返回值。
格式:K=imadd(I,J); I,J是读入的两幅图像,二者中也可有一个是常数,K为相加之和。
I=imread('pears.png'); %读取图像I=imresize(I,[300,300]);%调整图像尺寸subplot(221),imshow(I);title('图1');J=imread('peppers.png'); %读取图像J=imresize(J,[300,300]);%调整图像尺寸subplot(222),imshow(J);title('图2');K1=imadd(I,J);subplot(223),imshow(K1);title('图像与图像相加')K2=imadd(J,100);title('图像与常数相加')图1与图2相加后,整体亮度变大,叠加效果较为明显,而图像与常数相加相当于在原始图像中每个像素上增加了常数个像素值。
实验报告课程名称医学图像处理实验名称图像运算专业班级姓名学号实验日期实验地点2015—2016学年度第 2 学期一、实验目的MATLAB的图像处理工具箱提供了图像运算函数。
本实验将具体介绍Matlab中的图像点运算、代数运算、几何和邻域操作运算。
二、实验环境1、硬件配置:处理器:Intel(R)Core(TM) i7-3770 CPU @3.40GHz 3.40GHz安装内存(RAM):4.00GB 系统类型:64位操作系统2、软件环境:MATLAB R2013b软件三、实验内容利用Matlab对图像进行点运算、加法运算、减法运算、乘法运算、除法运算、改变图像的大小、旋转图像、图像的剪切、图像的邻域操作。
四、实验结果与分析(包括实验原理、数据的准备、运行过程分析、源程序(代码)、图形图象界面等)注:本项可以增加页数例1图像点运算skull=imread('skull.tif'); %读取图像subplot(131),imshow(skull) %生成一行三列三块区域,并在第一块区域绘制图像I=double(skull); %转换为双精度类型J=I*0.43+60; %利用该函数对输出图像进行压缩,使其对比度减小,图像变暗skull2=uint8(J); %转换为uint8subplot(132),imshow(skull2) %在第二块区域绘制图像J=I*1.5-60; %利用该函数对输出图像进行对比度级数拓展,使其对比度增强,图像变亮skull3=uint8(J); %转换为uint8subplot(133),imshow(skull3) %在第三块区域绘制图像运行结果:图1 原图像图2 对比度减小的图像图3 对比度增强的图像分析:1)subplot是用于将多个图像画到一个平面上的函数。
subplot(m,n,p,)中的m表示m行,n 表示n列,p表示从左到右的第几块区域;2)uint8表示8位无符号的整型数据类型,以此方式存储的图像称作8位图像;而Matlab中数值一般采用double型的存储和运算,因此在进行本题的灰度变换运算时,应先把skull图像转化为double格式;3)线性灰度变换函数当a=1,b=0时,输出图像像素不发生变化;当a=1,0b时,输≠出图像所有灰度值上移或下移;当1<a时,输出图像灰度级压缩,对比度减小,0<如图2所示;当1<aa时,输出图像灰度级拓展,对比度增强,如图3所示;当0>时,输出图像暗区域变亮,亮区域变暗,图像求反。
1.
1).ind2rgb 函数
>> [X,map]=imread('trees.tif');
>> imshow(X),imshow(map)
>> figure,imshow(X,map)
>> figure,imshow(X,jet(32));
2).mat2gray 函数
>> I=imread('rice.png');
>> J=filter2(fspecial('sobel'),I); >> K=mat2gray(J); >> imshow(I);
>> imshow(K)
>> figure,imshow(K)
3).grayslice 函数
>> I=imread('snowflakes.png');
>> X=grayslice(I,16); >> imview(I)
> In imview at 16
>> imview(X,jet(16)) In imview at 16
4)rgb2gray 函数
>> RGB=imread('peppers.png'); >> I=rgb2gray(RGB);
>> figure,imshow(I);
5)rgb2ind 函数
>> RGB=imread('peppers.png'); >> imshow(RGB);
>> [X,map]=rgb2ind(RGB,128); >>figure,imshow(X,map)
6)im2bw 函数
>> load trees
>> BW=im2bw(X,map,0.4);
>> imshow(X,map)
>> figure,imshow(BW)
7)ind2gray 函数
>> load trees
>> I=ind2gray(X,map);
>> imshow(X,map) >> figure,imshow(I)
8)Dither 函数
RGB=imread('peppers.png'); [X,map]=rgb2ind(RGB,256); >> I=dither(RGB,map); >> BW=dither(I);
>> imshow(RGB,map);
imshow(BW)
2.
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,[])
2)图像亮度整体增强
I=imread('lena.bmp'); I2=imadd(I,50); figure(1),imshow(I)
figure(2),imshow(I2)
3)减法运算 I=imread('rice.png');
>> I2=imread('cameraman.tif')
I3=imsubtract(I,I2); >> imview(I3)
4)乘法运算
I=imread('lena.bmp'); >> I2=immultiply(I,0.5);
>> figure,imshow(I);
figure,imshow(I2);
5)除法运算
I=imread('lena.bmp'); >> I2=imdivide(I ,0.5);
I2=imdivide(I,0.5); >> figure,imshow(I);
figure,imshow(I2)
3.
(1)图像平移变换的MATLAB
实现
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);
>> imshow(uint8(I_movesult));
(2)图像比例变换的MATLAB 实现
J=imread('trees.tif'); imshow(J);
X1=imresize(J,2)
X2=imresize(J,0.5) figure,imshow(X1);
X1=imresize(J,2) X2=imresize(J,0.5) figure,imshow(X1);
(3)图像切割的MATLAB实现
I=imread('peppers.png');
I1=imread('peppers.png');
I2=imcrop(I1,[75 68 220 100]);
imview(I1),imview(I2);。