在matlab环境下实现常见的图像几何变换(平移、剪切、缩放、旋转、镜像、错切)
括号中仅为参考,可根据自身情况灵活选题。附源代码。
源代码如下:
%定义四个点的坐标
A=[10,20,30];
B=[20,40,20];
C=[30,25,20];
D=[15,25,10];
figure;
plot3([-50,50],[0,0],[0,0],'--r');
grid on;
hold on;
plot3([0,0],[-50,50],[0,0],'--r');
plot3([0,0],[0,0],[-50,50],'--r');
axis('equal');
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
view([1,-1,1]); %视角方向
simianti(A,B,C,D); %四面体
%调用平移函数
A1=zqstrans(A,10,10,10); %后面三个参数代表移动的距离
B1=zqstrans(B,10,10,10);
C1=zqstrans(C,10,10,10);
D1=zqstrans(D,10,10,10);
simianti(A1,B1,C1,D1);%调用函数
%调用镜像函数
A2=re(A,-1,-1,-1);
B2=re(B,-1,-1,-1);
C2=re(C,-1,-1,-1);
D2=re(D,-1,-1,-1);
simianti(A2,B2,C2,D2);%调用函数形成四面体
function n=zqstrans(F,L,M,N)%平移
P=[1 0 0 L;
0 1 0 M;
0 0 1 N;
0 0 0 1];
%经过对课本第18页内容分析可知,此矩阵是平移所需要的矩阵,见P18
F=[F,1]; %原来要变化的矩阵变化为相应的形式
F=F'; %转置处理
n=P*F; %求得新的矩阵
n=n';%最终的矩阵
end
function q=re(N,m1,m2,m3)
%课本P19介绍了镜像Reflection的矩阵方法,细读便可知
L=[m1 0 0;
0 m2 0;
0 0 m3];%镜像所需矩阵
N=N';
q=L*N;
q=q';
end
function m=simianti(A,B,C,D) %连线形成四面体
T=[A;B;C;D;B;C;A;D]; %连线顺序
plot3(T(:,1),T(:,2),T(:,3));
%格式 A(:,c)访问A的c的指定列上全部元素构成的子数组;
%此处的冒号:表示全部行;而c可以取任意多元行(或列)数组
%分别代表了x,y,z的坐标
end