Евклидово преобразование: Евклидово преобразование сохраняет длину и угол вектора, что эквивалентно перемещению и вращению твердого тела без изменения его внешнего вида.
Аналогичное преобразование: оно эквивалентно комбинации изометрического преобразования и равномерного масштабирования, используя S для представления матрицы преобразования, S представляет собой матрицу 3 × 3, которая имеет на одну степень свободы больше, чем евклидово преобразование, что позволяет равномерно масштабировать объекты. S={{sr11,sr12,tx},{sr21,sr22,ty},{0,0,1}} Матрица 2×2 в левом верхнем углу — это часть вращения, tx и ty — коэффициенты перемещения, она имеет 4 степени свободы, а именно вращение, перемещение в направлении x, перенос в направлении y и коэффициент масштабирования s. Отношение длин, включенный угол и точки виртуальной окружности I и J остаются неизменными до и после преобразования подобия.
Аффинное преобразование и проективное преобразование: проективное преобразование образует группу, которая называется группой проективного преобразования, а обратимая вещественная матрица n × n называется общей линейной группой GL (n), Учитывая то же время, проективное отображение получается группа, которую обозначают PL(n). На плоскости проективное преобразование есть PL(3). Проективное преобразование в виде матрицы преобразования на плоскости, то есть матрицы 3х3. Среди них преобразование, когда последняя строка приведенной выше матрицы равна (0, 0, 1), является аффинным преобразованием, В соответствии с предпосылкой аффинности, когда верхний левый угол матрицы 2 × 2 ортогонален, это евклидово преобразование, а определитель матрицы верхнего левого угла. Когда он равен 1, это направленное евклидово преобразование. Таким образом, проективные преобразования включают аффинные преобразования, а аффинные преобразования включают евклидовы преобразования. Пока мы получили связь между проективным преобразованием и аффинным преобразованием. Мы разделим приведенную выше матрицу на несколько частей следующим образом: все, состоящее из 4 элементов в большом прямоугольнике, представляет собой линейное преобразование, такое как масштабирование (масштаб), сдвиг (сдвиг) и отношение (вращение); часть эллипса представляет параметры перемещения, один определяет перемещение в направлении x, а другой определяет перемещение в направлении y; небольшая прямоугольная часть используется для создания перспективного преобразования. Отсюда можно понять, что аффинное — это особая форма преобразования перспективы. Композиция трансляционного преобразования (t) и неравномерного преобразования (A), где A — обратимая матрица, не обязательно должна быть ортогональной матрицей. Инвариантами аффинного преобразования являются: параллельные прямые, отношение длин параллельных прямых и пропорциональная степень свободы площади 12 (9+3) Видно, что аффинное преобразование есть вращение + перенос + масштабирование + сдвиг изображения (shear ), форма преобразованного изображения изменилась по сравнению с первыми двумя, но параллельные линии в исходном изображении остаются параллельными. Проективное преобразование (перспективное преобразование) При общем неособом линейном преобразовании однородных координат точек изображения инвариантами проективного преобразования являются: отношение совпадения, отношение пересечения длины 15 степеней свободы (вся матрица делится на v нижний правый угол равен 1) Наконец, когда строка равна 0 0 0 1, это аффинное преобразование.
im = imread('D:/cvpr/作业1/实验一/test.jpeg');%读入一幅图
degree=30;%degree为要旋转的角度
[r,c,d]=size(im);
I=im2double(im);%获取输入图像B的行r、列c和通道数d,为了旋转彩色图像所以有必要得到通道数d
nH=round(r*abs(cosd(degree))+c*abs(sind(degree))); %旋转图像后得到的新高度,“round()函数四舍五入“
nW=round(c*abs(cosd(degree))+r*abs(sind(degree))); %旋转图像后得到的新宽度
A=zeros(nH,nW,d);
%定义生成目标图像的行列以及通道数
delX = 50; % 平移量X
delY = 100; % 平移量Y
beis=1.5;
deis=2
tras = [beis 0 0; 0 deis 0; delX delY 1];
M1=[1 0 0;0 -1 0;-0.5*nW 0.5*nH 1 ]; %坐标系变换矩阵M1
M2=[cosd(degree) -sind(degree) 0;sind(degree) cosd(degree) 0;0 0 1]; %角度旋转变换矩阵M2,我用的是顺时针方向
M3=[1 0 0;0 -1 0;0.5*c 0.5*r 1]; %坐标系变换矩阵M3
for i=1:nW
for j=1:nH
temp=[i j 1]*M1*M2*M3*tras; %得到旋转后的矩阵temp
y=temp(1,2); %y取矩阵temp的第一行第二列,y对应j,为高度
x=temp(1,1); %x取矩阵temp的第一行第一列,x对应i,为宽度
y=round(y); %y四舍五入取整
x=round(x); %x四舍五入取整
if(x>=1&&x<=c)&&(y>=1&&y<=r) %判断的得到的(x,y)点是否在原图像上
A(j,i,:)=I(y,x,:); %将原图像的像素点赋值给对应的旋转后图像上的点
end %(”有人疑惑为啥不是A(i,j,:)=B(x,y,:);因为i,x对应的是列,即宽,而j,y对应的是行,即高“),我这里以x为横坐标,y为竖向纵坐标
end
end
set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
figure;%打开一个窗口,用来显示(多幅)图像
subplot(1,2,1), imshow(I),axis on ;%显示图片,一行两列,第一幅
subplot(1,2,2), imshow(A),axis on;%显示图片,一行两列,第二幅