matlab实现图像的放大及旋转
更新时间:2024-01-16 18:17:01 阅读量: 教育文库 文档下载
- matlab安装教程推荐度:
- 相关推荐
实验三 图像的几何操作
一、 图像的基本运算
1、 加法运算
图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通信方式传送的图像(如卫星图像),这种处理是必不可少的。
在MATLAB7.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);
图3 2、 减法运算
图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图
像减法可以作为许多图像处理过程的准备步骤。例如,可以使用图像减法来检测一系列相同场景图像的差异。图像减法与阈值化处理的综合使用通常是建立机器视觉系统最有效的方法之一。当然,在利用图像减法处理图像时,往往需要考虑背景的更新机制,尽量补偿因天气、光线等因素对图像显示效果造成的影响。
在MATLAB7.0中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将相应的像素值之差作为输出图像相应的像素值。以下的程序代码示例首先根据原始图像生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去,从而生成如图4所示的图像。
I=imread('rice.png');
blocks=blkproc(I,[32 32],'min(x(:))');%背景
background=imresize(blocks,[256 256],'bilinear'); Ip=imsubtract(I,background); imshow(Ip,[])
图4
3、 乘法运算
两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放,这是一种常见的图像处理操作。如果使用的缩放因数大于1,那么将增强图像的亮度,如果因数小于1则会使图像变暗。缩放操作通常将产生比简单添加像素便宜量自然得多的明暗效果。这是因为该操作能够更好的维持图像的相关对比度。此外,由于时域的卷积或相关运算与频域的乘积运算对应,因此乘法运算有时也作为一种技巧来实现卷积或相关处理。
在MATLAB7.0中,可以使用immultiply函数实现两幅图像的乘法。immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作,并将乘法的运算结果作为输出图像相应的像素值。例如,以下程序示例将使用给定的缩放因数对图5所示的图像进行缩放,从而得到如图6所示的较为明亮的图像。
I=imread('moon.tif'); I16=uint16(I);
J=immultiply(I16,I16);
imshow(I),figure,imshow(J)
图5 缩放前 图6 缩放后
4、 除法运算
除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中经常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法操作也称为比率变换。
在MATLAB7.0中,可以使用imdivide函数进行两幅图像的除法。imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值。以下程序代码示例将图7的两幅图进行除法操作,得到如图8所示的效果图。
I=imread('rice.png');
blocks=blkproc(I,[32 32],'min(x(:))');
background=imresize(blocks,[256 256],'bilinear'); Ip=imdivide(I,background);
imshow(Ip,[]) %相除后 figure
I=imread('rice.png'); I16=uint16(I);
J=immultiply(I16,I16); subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(J);%两张相除
a 图像一 b 图像二
图7 两幅待相除的图像 图8 相除后的图像 二、图像的插值运算
MATLAB7.0中的imresize函数和imrotate函数用于二维图像的差值运算,MATLAB7.0的图像处理工具箱提供了3种插补方法:
近邻(nearest neighbor)插值 双线性(bilinear)插值 双立方(bicubic)插值
这三种插补方法的运算方式基本类似。对于每种插补方法,为了确定插值像素点的数据值,用户必须在输入图像中查找到与输出像素相应的点。但是上述三种插值方法的主要区别在于其对像素点赋值内容的不同:
对于近邻插值来说,输出像素的赋值为当前点的像素点。
对于双线性插值来说,输出像素的赋值为2*2矩阵所包含的有效点的加权平均值。 对于双立方插值来说,输出像素的赋值为4*4矩阵所包含的有效点的加权平均值。 三、调整图像的大小
改变图像的大小可用imresize函数来调整。imresize函数主要特点有:
可以指定输出图像的大小。 可以指定插值方法。
可以指定滤波器来阻止混淆。 1、 指定输出图像的大小
指定输出图像大小的方法有两种:一是指定放大因子,二是指定输出图像的维数。以下程序代码示例用指定放大因子的方法说明imresize函数的使用用法,并将原图像放大了1.25倍,其效果如图9所示。
a 改变前 b 改变后 图9 图像大小改变前、后的效果对比
2、 指定插值方法
在默认的情况下,imresize函数可用最近邻插值法来指定输出图像的像素值。当然,也可以指定其他的插值方法,以下命令行用imresize函数指定了双线性插值方法。
Y=imresize(X,[100 150],’bilinear’)
四、图像的旋转
可通过imrotate函数来旋转图像。imrotate函数主要包括两个参数:需要旋转的图像和旋转的角度。如果指定一个正的旋转角度,那么imrotate函数将使用指定的插值方法和旋转角度将图像逆时针旋转;如果指定一个负值,那么将按顺时针方向旋转。如果命令中没有指定插补方法,则函数采用默认的最近邻插补方法。例如以下的程序代码示例将ic.tif图像旋转35°,其旋转效果如图10所示。
I=imread('circuit.tif'); J=imrotate(I,35,'bilinear'); imshow(I);
figure,imshow(J);
a 旋转前 b 旋转后 图10 图像旋转前、后的显示效果比较
五、实验报告要求:
1、 说明利用MATLAB图像处理工具箱进行图像的加、减、乘、除处理的方法; 2、 (作业)不调用函数,自行编写代码实现二维图像的放大与旋转并记录结果图像。 提交:
① 放大(基于像素放大原理)
A=imread('C:\\Documents and Settings\\Administrator\\桌面\\matlab\\logo.tif') B=zeros(320,320) x=1.2
>> for i=1:1:round(x*107); for j=1:1:round(x*122);
B(i,j)=A(round(i/x),round(j/x)); end end
>> imshow(B)
② 旋转
A=imread('C:\\Documents and Settings\\Administrator\\桌面\\matlab\\logo.tif') y=pi/6%角度
a=zeros(107,122)%矩阵i for i=1:1:107; for j=1:1:122; a(i,j)=i;
end end
aa=zeros(107,122)%i` for i=1:1:107; for j=1:1:122;
aa(i,j)=round(i*cos(y)-j*sin(y)); end end
aa=aa+61%调整
b=zeros(107,122)%矩阵j for i=1:1:107; for j=1:1:122; b(i,j)=j; end end
bb=zeros(107,122)%j` for i=1:1:107; for j=1:1:122;
bb(i,j)=round(i*sin(y)+j*cos(y)); end end
G=zeros(153,159)%扩展画布 for i=1:1:107; for j=1:1:122; m=aa(i,j); n=bb(i,j);
G(m,n)=A(i,j); end end
%去空穴
>> for m=2:1:152; for n=2:1:158; if(G(m,n)==0)
G(m,n)=(G(m-1,n)+G(m+1,n)+G(m,n-1)+G(m,n+1))/4; end
end end
>> figure,imshow(G)
%写入:
>> imwrite(G,'C:\\Documents and Settings\\Administrator\\桌面\\matlab\\g','tif') imshow('C:\\Documents and Settings\\Administrator\\桌面\\matlab\\g.tif')
正在阅读:
matlab实现图像的放大及旋转01-16
墙缝有颗快乐的种子作文800字06-26
领导科学与艺术作业04-16
英语倒装句(最全面 - 最简洁)11-26
许昌市人民政府办公室关于印发2014年许昌市节能减排工作安排的通知11-29
第二章 赋范线性空间-黎永锦06-16
生态链上没有旁观者(精选合集)08-22
我的家乡长春作文700字06-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 旋转
- 放大
- 图像
- 实现
- matlab
- 病理生理学第十一章休克
- 国家电网公司表彰奖励工作管理办法
- 24金钱的魔力练习
- 石河子大学2016年攻读硕士学位研究生招生简章
- 广东惠来电厂一期3、4号21000MW超超临界燃煤机组
- 武义县环境功能区规划 - 图文
- 大学生优衣库实习报告范本参阅
- 2012幼儿教育学试题幼儿园部分
- 专项整治检查表 - 图文
- 彭州市的资源 - 图文
- 口才思维训练
- 加、减法的意义和各部分间的关系
- 模电应知应会
- 第五章熟悉而陌生的力检测题 - 图文
- 芝加哥学派早期几个代表人物对传播研究的思想贡献 - - 以库利、米德、帕克、杜威为例
- 欧盟对华反倾销贸易保护政策的话语分析
- 高一地理复习纲要新课标人教版-李严
- 关于市县乡人员编制精简的意见
- 北京体育休闲产业发展报告
- 电力系统继电保护课后习题解析(第二版)