如何在Matlab中将图像从笛卡尔坐标更改为极坐标?
image-processing
matlab
4
0

我正在尝试将图像的像素从xy坐标转换为极坐标,但是我有问题,因为我想自己编写函数。这是我到目前为止所做的代码:

function [ newImage ] = PolarCartRot
% read and show the image
image= imread('1.jpg');
%%imshow(image);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%change to polar coordinate
[x y z]= size(image);
r = sqrt(x*x+y*y);
theta = atan2(y,x);
for i =0:r
    for j= 0:theta
newpixel = [i; j];
newImage(newpixel(1), newpixel(2),:) = image(i,j,:);
    end
end
figure;
imshow (newImage);
参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

不清楚您要做什么,这就是为什么我要做出自己的榜样...

因此,给定图像,我正在使用CART2POL将像素x / y坐标从笛卡尔坐标转换为极坐标

在第一个图中,我显示了点的位置,在第二个图中,我既绘制了原始图像,又绘制了具有极坐标的图像。

请注意,我正在使用“图像处理工具箱”中的WARP功能。在引擎盖下,它使用SURF / SURFACE功能显示纹理映射的图像。

% load image 
load clown;
img = ind2rgb(X,map);
%img = imread(...);   % or use any other image

% convert pixel coordinates from cartesian to polar
[h,w,~] = size(img);
[X,Y] = meshgrid(1:w,1:h);
[theta,rho] = cart2pol(X, Y);
Z = zeros(size(theta));

% show pixel locations (subsample to get less dense points)
XX = X(1:8:end,1:4:end);
YY = Y(1:8:end,1:4:end);
tt = theta(1:8:end,1:4:end);
rr = rho(1:8:end,1:4:end);
subplot(121), scatter(XX(:),YY(:),3,'filled'), axis ij image
subplot(122), scatter(tt(:),rr(:),3,'filled'), axis ij square tight

% show images
figure
subplot(121), imshow(img), axis on
subplot(122), warp(theta, rho, Z, img), view(2), axis square

pixel_coordsimage_warped


编辑

正如我最初所说,这个问题尚不清楚。您必须以明确定义的方式描述所需的映射。

首先,您需要在转换为极坐标之前考虑原点的位置。前面的示例假定原点为以(0,0)为轴的轴。假设您要以图像的中心(w/2,h/2)作为原点,则应改为:

[X,Y] = meshgrid((1:w)-floor(w/2), (1:h)-floor(h/2));

其余代码保持不变。为了更好地说明效果,请考虑使用在笛卡尔坐标绘制同心圆的源图像,并注意在将圆心用作原点时它们如何映射到极坐标中的直线:

同心圆


编辑

这是如何按照注释中的要求以极坐标显示图像的另一个示例。请注意,我们在反方向pol2cart执行映射:

[h,w,~] = size(img);
s = min(h,w)/2;
[rho,theta] = meshgrid(linspace(0,s-1,s), linspace(0,2*pi));
[x,y] = pol2cart(theta, rho);
z = zeros(size(x));
subplot(121), imshow(img)
subplot(122), warp(x, y, z, img), view(2), axis square tight off

image_polar

再一次,可以更好地显示效果,如果使用直线输入输入图像,并查看它们在极坐标中的映射方式(垂直线变为圆,水平线变为从原点发出的光线):

直线

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号