凡亿专栏 | 技术干货:用MATLAB实现图像镜像变换
技术干货:用MATLAB实现图像镜像变换

对于电子工程师来说,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、公式法

镜像变换的原理如图所示:

29ac209f79d28509ac010e0c07c911.png

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('水平垂直镜像');

运行代码,即可实现图像镜像变换。

6c923b120e28e7aa83f924984020fd.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论