之前碰到了一个问题,是如何将图像变换到极坐标下。查了一些资料,这里作一总结。
首先,正常的图像都是在直角坐标系下的,可以看做一个二维平面。我们要对图像进行坐标变换,首先要把位置转换到新的坐标系,然后将值赋过去。下面是百度到的一个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); %画变换图