matlab练习程序(图像球面化)
2014-10-01 20:11
375 查看
十一没什么事干,接着看图像算法。
这个球面化算法最初是在ps上的球面化滤镜中看到的,感觉挺有意思,就研究了一下。
算法的详细推导可以在这篇博客中找到,我比较懒,只在纸上推了一遍,就不在博客上编辑了。
不过这里还是要把逆变换公式写一下。
公式如下:
其中R为球的半径,x,y为目标图像像素坐标,xx,yy为源图像像素坐标。
原图:
球面化后:
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,[])
相关文章推荐
- matlab练习程序(图像旋转,最邻近插值)
- matlab练习程序(奇异值分解压缩图像)
- matlab练习程序(图像自动聚焦)
- matlab练习程序(meanshift图像聚类)
- matlab练习程序(简单图像融合)
- matlab练习程序(图像错切)
- matlab练习程序(图像放大/缩小,放大没有进行插值操作)
- matlab练习程序(图像区域分裂)
- matlab练习程序(图像局部熵)
- matlab练习程序(模糊集图像增强)
- matlab练习程序(图像序列合成视频)
- matlab练习程序(图像旋转,双线性插值)
- matlab练习程序(图像滤波时的边界处理)
- matlab练习程序(灰度、二值图像腐蚀膨胀)
- matlab练习程序(图像傅里叶变换,幅度谱,相位谱)
- matlab练习程序(视频分解为图像序列)
- matlab练习程序(交互裁剪图像)
- matlab练习程序(图像放大/缩小,双线性插值)
- matlab练习程序(生成高斯图像)
- matlab练习程序(TV模型图像修复)