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,[]);