首先,正常的图像都是在直角坐标系下的,可以看做一个二维平面。我们要对图像进行坐标变换,首先要把位置转换到新的坐标系,然后将值赋过去。下面是百度到的一个MATLAB代码,实现了这个转换。
close all; clear all;
A=imread('1.jpg'); %读取图像(已经存到当前文件夹)
A1=double(A(:,:,1));
A2=double(A(:,:,2));
A3=double(A(:,:,3)); %rgb3通道转为double类型
[m n]=size(A1);
[t r]=meshgrid(linspace(-pi,pi,n),1:m); %原图坐标
M=2*m;
N=2*n;
[NN MM]=meshgrid((1:N)-n-0.5,(1:M)-m-0.5);
T=atan2(NN,MM);
R=sqrt(MM.^2+NN.^2); %变换图坐标
B1=interp2(t,r,A1,T,R,'linear',0);
B2=interp2(t,r,A2,T,R,'linear',0);
B3=interp2(t,r,A3,T,R,'linear',0); %rgb3通道插值
B=uint8(cat(3,B1,B2,B3)); %合拼转换回uint8类型
subplot(121),imshow(A); %画原图
subplot(122),imshow(B); %画变换图
可以看到其思路是先构建极坐标系,然后将直角坐标通过公式转换到极坐标下,再利用interp2函数插值,将像素值赋值过去。重点在于坐标的对应。
但是我在尝试将极坐标的图像转换到直角坐标的时候,位置变换总是不对,不知道问题出在哪,等以后解决了再更新这部分。
版权声明:本文为CSDN博主「dzkd1768」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dzkd1768/article/details/64122635