Matlab 实现图像的直角坐标系和极坐标系的相互转化

这篇具有很好参考价值的文章主要介绍了Matlab 实现图像的直角坐标系和极坐标系的相互转化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

某日需要在matlab进行图像的的极直互化,发现并没有介绍相应内容的文章,所以有了自己调研一下并写一写的想法。果然只要想就能做到,所以有了下面这篇文章。

根据直角坐标系(笛卡尔系)内数值和极坐标系关系

Matlab 实现图像的直角坐标系和极坐标系的相互转化
Matlab 实现图像的直角坐标系和极坐标系的相互转化

根据上述公式不难想出,在直角坐标系中的圆会在极坐标中转化为一条直线(画图太麻烦了,脑补吧)。

Matlab 实现图像的直角坐标系和极坐标系的相互转化

还是画一下吧便于理解,就图上这样XY代表的大坐标系,即最后生成图像的坐标系,里面小的坐标系呢,上面图表示的是直角系,下面图表示的是极坐标系,即求二者之间的互相转化。

直角系到极坐标系的转化步骤是,算出极坐标系点位在直角系中点位的映射(由于我都极坐标系尺寸更大,所以还需要进行插值,这里用到的双线性插值)(这里映射是指的外部的大坐标系)

双线性插值的知识很多,很容易找到大家去找吧。

clear;
clc;
%自己命名的读取函数
% I=readOriginalImage('D:\MatlabWorkPlace\MatlabCode\PolarAndCartesian\512circle.txt',512,512);
I=readSingleRecon('E:\DeadMouse\5\OriginalImage\0015.txt',353,353);
imtool(I,[]);

[M,N]=size(I);
R=M/2;
X=353;
Y=353*2;
delta_r=R/X;
delta_theta=2*pi/Y;
Image=zeros(Y,X);
theta_1=zeros(1,Y);
for i=1:Y
    theta=i*delta_theta;
    theta_1(1,i)=theta;
    sin_theta=sin(theta);
    cos_theta=cos(theta);
    for j=1:X
        temp_r=j*delta_r;
        x= R+temp_r*cos_theta;
        xf=floor(x);
        xc=ceil(x);
        if xf<1
            xf=1;
        end
        if xc<1
            xc=1;
        end
        if xc>M
            xc=M;
        end
        y= R+temp_r*sin_theta;
        yf=floor(y);
        yc=ceil(y);
         if yf<1
            yf=1;
         end
        if yc<1
            yc=1;
        end
        if yc>N
            yc=N;
        end
        Aaa=interp_bilinear(I,xf,xc,x,yf,yc,y);
        Image(i,j)=interp_bilinear(I,xf,xc,x,yf,yc,y);
    end
end
imtool(Image,[]);
% I=xRemoveStripesVertical(Image,6,'db25',7);
I=Image;
imtool(I,[]);
%自己命名的保存函数
saveFile('D:\MatlabWorkPlace\MatlabCode\PolarAndCartesian.txt',I);


%双线性插值代码
function value=interp_bilinear(I,x1,x2,x,y1,y2,y)
    if x2==x1&&y2==y1
        value=I(x1,y1);
    elseif x2==x1
        value=I(x1,y1)*(y2-y)/(y2-y1)+I(x1,y2)*(y-y1)/(y2-y1);
    elseif y1==y2
        value=I(x1,y1)*(x2-x)/(x2-x1)+I(x2,y1)*(x-x1)/(x2-x1);
    else
         h=(x2-x1)*(y2-y1);
        value=I(x1,y1)*(x2-x)*(y2-y)/h+I(x2,y1)*(x-x1)*(y2-y)/h+I(x1,y2)*(x2-x)*(y-y1)/h+I(x2,y2)*(x-x1)*(y-y1)/h;
    end
end

极坐标系到直角系同样的,算出直角系中的点位在极坐标系中的映射(映射指的是外部的大坐标系)

clear;
%自己命名的读取
I=readSingleRecon('D:\MatlabWorkPlace\MatlabCode\PolarAndCartesian.txt',353*2,353);
imtool(I,[]);
[Y,X]=size(I);
R=353/2;
M=2*R;
N=2*R;
delta_r=R/X; 
delta_theta=2*pi/Y;
Image=zeros(M,N);
theta_1=zeros(M,N);
for i=1:M
    for j=1:N
        xx=i-R;
        yy=j-R;
        temp_r=sqrt((xx)^2+(yy)^2);
        r=temp_r/delta_r;
        r=round(r);
        if xx==0
            xx=0.0001;
        end
        if xx>0 && yy>0
            theta=atan(yy/xx);
        elseif xx<0 &&yy>0
            theta =atan(yy/xx)+pi;
        elseif xx<0 &&yy<0
            theta=atan(yy/xx)+pi;
        elseif xx>0 &&yy<0
            theta=atan(yy/xx)+2*pi;
        end
        theta=theta/delta_theta;
        theta=round(theta);
        if theta==0
            theta=1;
        end
        if theta>Y
            theta=Y;
        end
         if r>X
            r=X;
        end
        Image(i,j)=I(theta,r);
        
    end
end
imtool(Image,[]);

无论是直角系转化为极坐标系,还是极坐标系转化为直角系,最重要的就是映射关系的对应

结果贴上

Matlab 实现图像的直角坐标系和极坐标系的相互转化

原图

Matlab 实现图像的直角坐标系和极坐标系的相互转化

转化成极坐标系

Matlab 实现图像的直角坐标系和极坐标系的相互转化

极坐标系转化为直角系

结论如下

可以看到经过转化,内切圆内区域并没有发生什么变化,内切圆外区域又没什么用(差别是因为两次转化造成的),证明这个计算过程是可行的。代码水平一般将就看吧。文章来源地址https://www.toymoban.com/news/detail-510549.html

到了这里,关于Matlab 实现图像的直角坐标系和极坐标系的相互转化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • global mapper手动添加网格线平面直角坐标系及简易3D地形演示

    global mapper手动添加网格线平面直角坐标系及简易3D地形演示

    在网格配置中,如下图,可以设置背景网格间距大小。但是在卫星图中,由于是灰色的线条,难以被识别出来,尤其是在需要判读格子内距离时带来不便。例如上图中的灰色线条就不容易判读。 添加其他图层后更变的不容易识别。 可以利用线工具重新绘制网格,达到显眼醒

    2024年02月05日
    浏览(8)
  • 坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    一般情况下我们所涉及到的坐标包括四个,即相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系。我们本文的讲解思路是在讲解每个坐标转换之前先讲清楚每个坐标系所表示的含义。本文主要参考由高翔主编的视觉SLAM十四讲第五章相机模型。 相机将三维世界的坐

    2024年02月09日
    浏览(14)
  • 世界坐标系、相机坐标系、图像坐标系、像素坐标系

    世界坐标系、相机坐标系、图像坐标系、像素坐标系

    四个坐标系都是什么? 1.世界坐标系-相机坐标系-图像坐标系-像素坐标系 2.像素坐标系-图像坐标系-相机坐标系-世界坐标系 图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系                     构建世界坐标系只是

    2024年01月21日
    浏览(14)
  • 关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解

    关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解

    在项目中,研究标定时,像素坐标与轴位置的关系时,需要用到关于坐标系的转换。在此也就是找到世界坐标系与像素坐标系的转换关系。想理清楚故做如下记录。 四坐标关系图如下: 图中: 世界坐标系(O W —X W Y W Z W ): 一个三维直角坐标系,以其为基准可以描述相机

    2024年02月09日
    浏览(9)
  • 世界坐标系、相机坐标系和图像坐标系的转换

    世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(14)
  • 图像坐标系如何转换到相机坐标系。

    图像坐标系如何转换到相机坐标系。

    问题描述:图像坐标系如何转换到相机坐标系。 问题解答: 图像坐标系的定义: 图像坐标系是用于描述数字图像中像素位置的坐标系。图像坐标系的原点是相机光轴与成像平面的交点。X轴沿着成像平面的水平方向正向,Y轴沿着成像平面的垂直方向正向。 相机坐标系的定义

    2024年02月04日
    浏览(9)
  • 标准DH坐标系,改进DH坐标系转换矩阵matlab函数代码2.0

    标准DH坐标系,改进DH坐标系转换矩阵matlab函数代码2.0

    1.标准DH坐标系(Standard DH) 2.改进DH坐标(modified DH)

    2024年02月13日
    浏览(12)
  • MATLAB 相机标定中标定板角点像素坐标系到世界坐标系的转换

    MATLAB 相机标定中标定板角点像素坐标系到世界坐标系的转换

    matlab 做相机标定后,想将第一张(任意一张都行)标定板角点所对应的像素坐标转换到世界坐标系下,标定板角点的像素坐标真值与世界坐标真值都非常容易获得,但是我通过内外参矩阵将像素坐标转换到世界坐标有很大的误差,如下 像素坐标到世界坐标之间的转换可参考

    2024年02月10日
    浏览(10)
  • 4.18每日一题(极坐标累次积分到直角坐标累次积分的转换)
  • MATLAB可视化(四)如何设置图形的坐标范围、坐标系、刻度和网格控制

    MATLAB可视化(四)如何设置图形的坐标范围、坐标系、刻度和网格控制

    一、坐标控制 坐标轴的设置 其中\\\'-ro\\\'是用来设置曲线形状 绘制出的图形如下: 接下来设置坐标轴  x轴0—pi/2,y轴0—5 二、刻度、网格、坐标的开启与封闭 1 设置坐标轴的刻度 #set (gca,\\\'Xtick\\\',xs,Ytick,ys):二维坐标轴的刻度设置 #set (gca,\\\'Xtick\\\',xs,Ytick,ys,Ztick,zs):三维坐标轴的刻度设

    2024年02月11日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包