matlab练习程序(图像球面化)

本文深入探讨了一种图像处理中的球面化算法,该算法将平面图像转换为球形视角,增强了视觉效果。文章提供了详细的逆变换公式,并分享了在Matlab中的实现代码,展示了算法的应用效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

十一没什么事干,接着看图像算法。

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

 

转载于:https://www.cnblogs.com/tiandsp/p/4003524.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值