图像空域运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二图像空域运算
实验内容:(1)选择两幅图像,一幅是物体图像,一幅是背景图像,采用正确的图像代数运算方法,分别实现图像叠加、混合图像的分离和图像的局部显示效果。
(2)对一幅图像实现按比例缩小和不按比例任意缩小的效果,以及图像的成倍放大和不按比例放大效果。
(3)将一幅图像分别旋转45度和90度,与原图像对比,观察它们的区别。
实验原理:(1)叠加:将两幅图像进行加法运算。
分离:将混合图像与背景图像做减法运算;
局部显示:设置掩模模板,对于需要保留下来的区域,掩模图像的值置为1,而在需要被抑制掉的区域,掩模图像的值置为0。
(2)比例缩放关系:x1=ax0, y1=ay0
(3)旋转变换关系:
cos sin0
sin cos0 10011 x x y y
ββ
ββ
⎛⎫⎛⎫⎛⎫ ⎪ ⎪⎪=-
⎪ ⎪⎪ ⎪ ⎪⎪⎝⎭⎝⎭⎝⎭
实验报告要求:给出实验代码,和实验结果图,并对实验结果进行分析。
所用函数:
imread从文件读取图像
imwrite把图像写成文件
调用格式:imwrite(A,filename,fmt)
其中,A是图像数据, filename是目标图像名字, fmt是要生成的图片的格式。图像格式有:bmp、gif、hdf、jpg(或jpeg)、jp2或jpx、pbm、pcx、pgm、png、pnm、ppm、ras、tif(或tiff)、xwd。
举例:
imgrgb = imread('flower.jpg');
imwrite(imgrgb, 'flower.bmp', 'bmp'); % jpg格式转换为bmp格式
imresize函数实现图像的缩放
调用格式
(1)B = imresize(A, m)
返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1,则放大图像; m小于1,缩小图像。
(2)B = imresize(A, [numrows numcols])
numrows和numcols分别指定目标图像的高度和宽度。显而易见,由于这种格式允许图像缩放后长宽比例和源图像长宽比例不相同,因此所产生的图像有可能发生畸变。
imrotate函数实现图像的旋转
调用格式:
(1)B = imrotate(A,angle)
将图像A(图像的数据矩阵)绕图像的中心点旋转angle度,正数表示逆时针旋转,负数表示顺时针旋转。返回旋转后的图像矩阵。以这种格式调用该函数,该函数默认采用最近邻线性插值(Nearest-neighbor interpolation)。旋转后的图像超出的部分填充0(黑色)。(2)B = imrotate(A,angle,method)
使用method参数可以改变插值算法,method参数可以为下面这三个值:
'nearest':最邻近线性插值(Nearest-neighbor interpolation)
'bilinear':双线性插值(Bilinear interpolation)
'bicubic':双三次插值(或叫做双立方插值)(Bicubic interpolation)
(3)B = imrotate(A,angle,method,bbox)
bbox参数用于指定输出图像属性:
'crop':通过对旋转后的图像B进行裁剪,保持旋转后输出图像B的尺寸和输入图像A
的尺寸一样。
'loose':使输出图像足够大,以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。一般上这种格式产生的图像的尺寸都要大于源图像的尺寸。
附录:
1.图像加减运算和局部显示
图像加减
clear all
I=imread('D:\matlab图片\lanse.jpg');
J=imread('D:\matlab图片\lena.jpg');
%图像相加
k=imadd(I,J);
%图像相减,还原原图像
I1=imsubtract(k,J);
J1=imsubtract(k,I);
subplot(2,3,1);imshow(I);xlabel('原始图像I');
subplot(2,3,2);imshow(J);xlabel('原始图像J');
subplot(2,3,3);imshow(k,[]);xlabel('相加后的图像k'); subplot(2,3,4),imshow(I1,[]);xlabel('相减得到原始图像I1'); subplot(2,3,5),imshow(J1,[]);xlabel('相减得到原始图像J1');运行结果:
图像局部显示
clear all
%图像的局部显示
I2=imread('D:\matlab图片\lena_gray.bmp');
subplot(1,2,1);imshow(I2);xlabel('原始图像I2');
%设置模板
[m,n]=size(I2);
for i=1:m
for j=1:n
h(i,j)=0;
end
end
for i=50:1:200
for j=50:1:200
h(i,j)=I2(i,j);
end
end
subplot(1,2,2);imshow(h,[]);xlabel('局部显示');运行结果:
2.图像缩放
源代码:
clear all
I=imread('D:\matlab图片\lena_gray.bmp'); figure;imshow(I);xlabel('原图像');
%按比例图像缩放
B = imresize(I, 1.5);
figure;imshow(B);xlabel('按比例放大');
C = imresize(I, 0.5);
figure;imshow(C);xlabel('按比例缩小');
%指定图像大小缩放
D = imresize(I, [350 300]);
figure;imshow(D);xlabel('指定放大');
E = imresize(I, [150 200]);
figure;imshow(E);xlabel('指定缩小');
运行结果: