Func的1 2 3分别对应平移、旋转、缩放功能
function []=transition(func,I)
if func==1
delta_x=str2double(inputdlg('请输入向右平移量', 'INPUT scale factor', 1, {'-60'})); %负数为向左
delta_y=str2double(inputdlg('请输入向下平移量', 'INPUT scale factor', 1, {'-89'})); %负数为向上
img=imread(I);%读入图像
B=size(img); %获取原始图像的高和宽
imgn(:,:,:)=zeros(B(1)+abs(delta_y),B(2)+abs(delta_x));%创建平移图像输出矩阵
rot=[1 0 0;0 1 0;delta_y delta_x 1]; %寻求新坐标用到的平移矩阵
pix1=[1 1 1]*rot; %pix1(1),pix1(2)分别为变换后图像的左上角的y,x,分别为1+delta_y,1+delta_x,这种三维空间坐标被称为齐次坐标表示法
pix4=[B(1) B(2) 1]*rot; %pix4(1),pix4(2)分别为变换后图像的右下角的y,x,分别为v+delta_y,u+delta_x
for q=1:3 %为每个通道做相同处理
%%向右下方移动
if delta_x>=0 && delta_y>=0 %如果两个平移量都为正
for y=pix1(1):pix4(1) %新图像纵坐标从最开始到结束处
for x=pix1(2):pix4(2) %新图像横坐标从最开始到结束处
pix=[y x 1]/rot; %pix矩阵经计算后为[y-delta_y,x-delta_x,1] if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)%这里是判断是否有像素可进行平移,例如:若y-delta_y<0.5,则说明没有找到可平移的像素坐标
imgn(y,x,q)=img(round(pix(1)),round(pix(2)),q); %新的图像(x,y)点的像素值选取(x-delta_x,y-delta_y)处的像素值,则实现了平移
end
end
end
end
%%向左下方移动
if delta_x<0 && delta_y>=0
for y=pix1(1):pix4(1)
for x=pix1(2):pix4(2)
pix=[y x 1]/rot;
if pix(1)>=0.5 && pix(2)>=0.5 && pix(1)<=B(1) && pix(2)<=B(2)
imgn(y,x-delta_x,q)=img(round(pix(1)),round(pix(2)),q);
end
end
end
end
%%向左上方移动