十一沒什麼事幹,接著看影象演算法。
這個球面化演算法最初是在ps上的球面化濾鏡中看到的,感覺挺有意思,就研究了一下。
演算法的詳細推導可以在這篇部落格中找到,我比較懶,只在紙上推了一遍,就不在部落格上編輯了。
不過這裡還是要把逆變換公式寫一下。
公式如下:
其中R為球的半徑,x,y為目標影象畫素座標,xx,yy為源影象畫素座標。
原圖:
球面化後:
matlab程式碼如下:
clear all;close all;clc; img=imread('lena.jpg'); [h w]=size(img); imshow(img); imgn=zeros(h,w); R=h/2; cenX=w/2; cenY=h/2; theta=pi; for y=1-cenY:h-cenY for x=1-cenX:w-cenX disX=1.3*x; %係數為1則半徑為h/2 disY=1.3*y; dis=disX^2+disY^2; r=sqrt(disX^2+disY^2); if r<=R xx=2*R*disX*acos(sqrt(R^2-dis)/R)/(theta*r)+cenX; yy=2*R*disY*acos(sqrt(R^2-dis)/R)/(theta*r)+cenY; xx=round(xx); yy=round(yy); if xx>=1 && xx<=w && yy>=1 && yy<=h imgn(y+cenY,x+cenX)=img(yy,xx); end else imgn(y+cenY,x+cenX)=img(y+cenY,x+cenX); end end end figure; imshow(imgn,[])