matlab練習程序(Log Polar變換)


Log Polar就是所謂的極坐標變換,通過變換能將笛卡爾坐標系中的圖像映射到極坐標系中。

確切的來說我這里不算是Log Polar,因為Log Polar是將圖像從(x,y)映射到(log(r),theta),而我是將圖像從(x,y)映射到(r,theta)。

原理是一樣的。

變換公式是:

x=r*cos(theta);

y=r*sin(theta);

其中r代表極徑,theta代表極角。這些應該學過高中的都會的。

下圖能形象的表示變換:

似乎有通過此變換求圖像特征的算法,不過具體操作我也不清楚。

我這里只是實現了變換的操作。

原圖如下:

以圖像中心作為極坐標原點進行極坐標變換:

matlab代碼如下:

clear all; close all; clc;

img=double(imread('lena.jpg'));
imshow(img,[]);
[m n]=size(img);

[ox oy]=ginput();   %獲得極坐標變換的原點
oy=round(oy);
ox=round(ox);

%求中心點到圖像四個角的距離
up_left=sqrt((oy-0)^2+(ox-0)^2);
up_right=sqrt((oy-0)^2+(ox-n)^2);
down_left=sqrt((oy-m)^2+(ox-0)^2);
down_right=sqrt((oy-m)^2+(ox-n)^2);

%求中心點距離四角距離的最大值,作為變換后圖像的高。
%這個最大值也是極坐標變換的極徑
radius=round(max([up_left up_right down_left down_right]));
angle=360;      %變換后圖像的寬
imgn=zeros(radius,angle);
for i=1:radius          %縱坐標代表極徑,不同情況不一樣
    for j=1:angle       %橫坐標代表極角,恆為360
        
        %oy,ox作為極坐標變換中心坐標,需要作為偏移量相加
        h=oy+round(i*sin(j*pi/180));
        w=ox+round(i*cos(j*pi/180));

        if h>0 && w> 0&& h<=m && w<=n  %超出原圖像的像素忽略
            imgn(i,j)=img(h,w);     %最鄰近插值,因為前面求h,w用了round();
        end
    end
end

figure;
imshow(imgn,[]);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM