概述
版本: MATLAB R2019a
目录
- (一)图像平移
- (二)图像旋转
- 1、图像尺寸不变
- 2、图像信息不丢失
- (三)图像缩放
- (四)图像裁剪
(一)图像平移
使用MATLAB自带函数 translate(SE, [y x])
功能:
在结构元素SE上进行y和x方向的位移 正数对应右移和下移
%图像平移
A=imread('1.jpg');
se=translate(strel(1),[50 50]);
%向右向下平移50,50像素坐标
B=imdilate(A,se);%形态学膨胀
figure;
subplot(1,2,1),subimage(A);
title('原图像')
subplot(1,2,2),subimage(B);
title('图像平移')
仿真结果:
(二)图像旋转
1、图像尺寸不变
使用MATLAB自带函数 imrotate(img,30);
功能:
将图像img逆时针旋转30°
注:为什么需要插值?
答:MATLAB在进行图像操作时,是将其存放在数组中,而数组坐标必须为整数,若对图像进行旋转、缩放等操作,计算得到的坐标不一定为整数,这时候就需要进行插值。MATLAB常用插值方法有三种:
(1)最近邻插值 ‘nearest’
(2)双线性插值 ‘bilinear’
(3)三次卷积插值 ‘bicubic’
A=imread('1.jpg');
B=imrotate(A,30); %旋转30°
C=imrotate(A,30,'crop'); %旋转30°,并剪切图像,使得到的图像和原图像大小一致
%若不说明插值方法,默认为最近邻插值
D=imrotate(A,30,'bilinear','crop');
%双线性插值法旋转30°,并剪切图像,使得到的图像和原图像大小一致
figure;
subplot(2,2,1),imshow(A);
title('原图像')
subplot(2,2,2),imshow(B);
title('图像旋转(保留全部图像信息)')
subplot(2,2,3),imshow(C);
title('图像旋转(大小不变)')
subplot(2,2,4),imshow(D);
title('图像旋转(双线性插值)')
仿真结果:
2、图像信息不丢失
在进行图像旋转时,不对图像进行缩放,但仍想保留全部图像信息。需要在旋转之后,计算所需要的背景尺寸,具体程序如下:
% 读入图片
A = imread('1.jpg');
% 求出旋转矩阵
theta = 30 / 180 * pi;
R = [cos(theta), -sin(theta); sin(theta), cos(theta)]';
%欧拉角旋转矩阵公式
%利用size函数读取原始图像A尺寸
sizeA = size(A);
length = sizeA(1);
width = sizeA(2);
h = sizeA(3);
c1 = [length; width] / 2;
% 计算所需背景尺寸
length2 = floor(width*sin(a)+length*cos(a))+1;
%floor 向上取整函数,保证图像信息完整
width2 = floor(width*cos(a)+length*sin(a))+1;
c2 = [length2; width2] / 2;
% 初始化背景,将旋转后的图像坐标赋给该背景
B = uint8(ones(length2, width2, 3)*128);
for k = 1:h
for i = 1:length2
for j = 1:width2
p = [i; j];
pp = (R*(p-c2)+c1);
mn = floor(pp);
ab = pp - mn;
a = ab(1);
b = ab(2);
m = mn(1);
n = mn(2);
% 线性插值方法
if (pp(1) >= 2 && pp(1) <= length-1 && pp(2) >= 2 && pp(2) <= width-1)
B(i, j, k) = (1-a)*(1-b)*A(m, n, k) + a*(1-b)*A(m+1, n, k)...
+(1-a)*b*A(m, n, k)+a*b*A(m, n, k);
end
end
end
end
figure;
imshow(A);
title('原图像')
figure;
imshow(B);
title('图像旋转(扩大背景)')
仿真结果:
(三)图像缩放
使用MATLAB自带函数 imresize(img,a,‘method’)
功能:
对图像img进行系数为a的缩放。
A = imread('1.jpg');
a = 2;
aa = 0.5;
B=imresize(A,a,'nearest');
C=imresize(A,aa,'nearest');
figure;
imshow(A);
title('原图像')
figure;
imshow(B);
title('放大2倍图像')
figure;
imshow(C);
title('放大0.5倍图像')
仿真结果:
(四)图像裁剪
使用MATLAB自带函数 imcrop(img,[x y height length])
功能:在原始图像img 坐标位置(x,y)开始,向下向右进行裁剪
A=imread('1.jpg'); %读入图像
rect = [20 20 150 150];
B=imcrop(A,rect); %进行图像剪切
subplot(121),imshow(A);
title('原图像')
rectangle('Position',rect,'LineWidth',2,'EdgeColor','r') %显示图像剪切区域
subplot(122),imshow(B);
title('裁剪图像')
“每天给自己一个希望,试着不为明天而烦恼,不为昨天而叹息,只为今天更美好。”加油!
最后
以上就是耍酷飞鸟为你收集整理的MATLAB图像平移、旋转、缩放、裁剪的全部内容,希望文章能够帮你解决MATLAB图像平移、旋转、缩放、裁剪所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复