matlab練習程序(圖像球面化)


十一沒什么事干,接着看圖像算法。

這個球面化算法最初是在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,[])

 


免責聲明!

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



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