对于电子工程师来说,MATLAB是一款非常好用的数字软件,可应用在信号处理、图像处理、数据分析等多种用处。今天本文将分享如何通过MATLAB实现图像镜像转、变换,希望对小伙伴们有所帮助。
镜像变换分为水平镜像和竖直镜像,水平镜像是指将图片左半部分和右半部分以图像竖直中轴线为中心轴进行兑换;竖直镜像是将图像上半部分和下半部分以图像水平中轴线为中心轴进行兑换。
如何用MATLAB实现图像镜像变换?
1、函数法
clc;
clear all;
RGB = imread('monkey.jpg'); %读取图像
[ROW,COL,N] = size(RGB);
tform1 = maketform('affine',[-1 0 0;0 1 0;COL 0 1]); %定义水平镜像变换矩阵
tform2 = maketform('affine',[1 0 0;0 -1 0;0 ROW 1]); %定义垂直镜像变换矩阵
tform3 = maketform('affine',[-1 0 0;0 -1 0;COL ROW 1]); %定义水平垂直镜像变换矩阵
H_mirror = imtransform(RGB,tform1,'nearest');
V_mirror = imtransform(RGB,tform2,'nearest');
HV_mirror = imtransform(RGB,tform3,'nearest');
subplot(2,2,1),imshow(RGB); title('原图');
subplot(2,2,2),imshow(H_mirror); title('水平镜像');
subplot(2,2,3),imshow(V_mirror); title('垂直镜像');
subplot(2,2,4),imshow(HV_mirror);title('水平垂直镜像');
参数transformtype指定了变换的类型,如常见的‘affine’为二维或多位仿射变换,包括平移、旋转、比例、拉伸和错切等。
2、公式法
镜像变换的原理如图所示:
Q为输出,I为输入,Xt和Yt为像素坐标,width和height为图像宽度。
MATLAB代码如下:
clc;
clear all;
RGB = imread('monkey.jpg'); %读取图像
[ROW,COL,N] = size(RGB);
H_mirror = uint8(zeros(ROW, COL,N)); %Horizontal mirror
V_mirror = uint8(zeros(ROW, COL,N)); %Vertical mirror
HV_mirror = uint8(zeros(ROW, COL,N)); %H&V miirror
%水平镜像for i =1:ROW
for j=1:COL
for k=1:N
x = i;
y = COL-j+1;
z = k;
H_mirror(x,y,z) =RGB(i,j,k);
end
endend
%垂直镜像for i =1:ROW
for j=1:COL
for k=1:N
x = ROW-i+1;
y = j;
z = k;
V_mirror(x,y,z) =RGB(i,j,k);
end
endend
%水平垂直镜像for i =1:ROW
for j=1:COL
for k=1:N
x = ROW-i+1;
y = COL-j+1;
z = k;
HV_mirror(x,y,z) =RGB(i,j,k);
end
endend
subplot(2,2,1),imshow(RGB); title('原图');
subplot(2,2,2),imshow(H_mirror); title('水平镜像');
subplot(2,2,3),imshow(V_mirror); title('垂直镜像');
subplot(2,2,4),imshow(HV_mirror);title('水平垂直镜像');
运行代码,即可实现图像镜像变换。