⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topolar.m

📁 在matlab上实现图像同二维直角坐标系转化为极坐标秒的算法.
💻 M
字号:
function [rmax,polarv]=topolar(v,x0,y0,np)
%本函数旨在实现将hsv中的v分量从直角坐标下转化为极坐标下的polarv,其中v为直角坐标系下的v分量,x0,y0为要指定极坐标原点,
%N为一周等间距相位数
[pic_ysize,pic_xsize]=size(v);np=360;
M=pic_ysize;N=pic_xsize;
%x0=round(pic_xsize/2);y0=round(pic_ysize/2);%%极坐标原点,图像的中心点
for i=1:pic_ysize 
    for j=1:pic_xsize
        dis(i,j)=sqrt((i-y0)^2+(j-x0)^2);
    end 
end
Rmax=round(max(dis(:)));%%半径最大值
pmax=2*pi;%相位最大值,一个周期
dp=pmax/np;%相位间距,分360份
p1=atan((M-y0)/(N-x0));p2=-atan((M-y0)/(x0-1))+pi;p3=atan((y0-1)/(x0-1))+pi;p4=-atan((y0-1)/(N-x0))+2*pi;
%图像中四个顶点对应弧度,其中p1,p2,p3,p4分别表示右下角,左下角,左上角,右上角对应值
polarv=zeros(np,Rmax);
for i=0:np-1
    p=dp*i;
    %polarv(i+1,1)=v(x0,y0);
    if(p>=p1&p<p2)
        rmax(i+1)=floor((M-y0)/abs(sin(p)));
    elseif(p>=p3&p<p4)
        rmax(i+1)=floor((y0-1)/abs(sin(p)));
    elseif(p>=p2&p<p3)
        rmax(i+1)=floor((x0-1)/abs(cos(p)));
    else
        rmax(i+1)=floor((N-x0)/abs(cos(p)));
    end
    for j=1:rmax(i+1)
        x=x0+j*cos(p);
        y=y0+j*sin(p);
        x1=floor(x);x2=x1+1;y1=floor(y);y2=y1+1;
        if(x1~=0&x1~=pic_xsize&y1~=0&y1~=pic_ysize)
            e=(x-x1)*(v(y1,x2)-v(y1,x1))+v(y1,x1);
            f=(x-x1)*(v(y2,x2)-v(y2,x1))+v(y2,x1);
            polarv(i+1,j+1)=(y-y1)*(f-e)+e;%polarv为极坐标下的新图像,从直角坐标转化为极坐标时用的是双线性插值
        elseif(x1==pic_xsize|y1==pic_ysize)
            polarv(i+1,j+1)=v(floor(y1),floor(x1));
        else
            polarv(i+1,j+1)=v(y2,x2); 
        end 
    end
end
%imshow(polarv);   %显示极坐标下的图像

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -