MATLAB图像处理:平面卫星图转换成立体球形图
2016-02-28 17:35
447 查看
MATLAB图像处理:平面卫星图转换成立体球形图
过年期间回老家,一跟亲戚朋友们说起是搞计算机的,各种好奇的眼光就投过来了,“会手机贴膜不?”
“正好我家电脑坏了,可以帮我看看么?”
“”
有好气的也有好笑的,倒是大表弟提了个很有意思问题,让我想了很久
大概是说手机上的卫星地图都是平面的,但是家里的地球仪却是一个立体的图像,怎么把卫星拍到的平面图变成立体图贴在地球仪上面哦。
当时两眼一懵,手心一凉,心里波澜起伏
用语言表达当时的情况大概是:我去,这TM熊孩子,你不待在家里写作业就算了,干嘛跑我这来瞎提这些捣蛋问题。。
但是总不能说不知道吧,那多丢人啊,于是我还是正经的回答了他的问题“小朋友,等你长大了就知道了。(呵呵)”
闲下来细想,这还真是个问题哈,我们可以卫星拍成的照片通过图像拼接的方法变成一个平面的地图,但是想要得到一个三维的卫星地图还真不是一个随便想想就能得到的诶
之后受到了全景拍摄和鱼眼相机的启发突发奇想想要写这个程序
我们大可以把平面的卫星地图看做是一个手机从地球侧面拍摄的全景图
于是乎三维的地图就变成了鱼眼相机从地球顶部的角度拍摄的地图
全景图的上方的像素就等价于鱼眼相机中间的像素,同样的,全景图 下方的像素就变成了鱼眼相机四周的像素了,,,于是乎,只要在鱼眼图中找到全景图中像素对应的位置,就可以完成卫星图到球面图的转换了
接下来是无尽的改bug时间。。。。。
最后matlab函数如下
function [imgn,imgc] = rec2global(I,r1) %全景图转换成穹顶图片,输入img为全景图,输出imgn为穹顶图,r为穹顶内环半径 %% subplot(2,2,[1,2]); imshow(I); [m,n]=size(I); %r1=100; %内环半径 r2=r1+m;%外环半径 imgc=zeros(2*r2,2*r2,3,'uint8');%用于保存图像 %% imgn=zeros(2*r2,2*r2); [re_m,re_n]=size(imgn); for y=1:re_m for x=1:re_n dis_x=x-re_n/2; dis_y=y-re_m/2; l=sqrt(dis_x^2+dis_y^2); if l<=r2 && l>=r1 theta=0; if y>re_m/2 theta=atan2(dis_y,dis_x); end if y<re_m/2 theta=pi+atan2(-dis_y,-dis_x); end if y==re_m/2 theta=atan2(dis_y,dis_x)+0.0001; end xx=ceil(n*theta/(2*pi)); yy=ceil(l-r1); if yy>=1 && yy<=m && xx>=1 && xx<=n imgn(y,x)=I(yy,xx); XX=ceil(xx/3); imgc(y,x,:)=I(yy,XX,:);%此处要对计算出来的XX取整 end end end end %% subplot(2,2,3); imshow(imgn); subplot(2,2,4); imshow(imgc); end
运行如下
>>imread('earth.jpg'); >>[imgn,imgc]=rec2global(Ie,0);
结果如下:
(原图)
(效果图)
(matlab里面的尿性结果)
到这里,请容我问一句,
嗯哼,刚那熊孩子人呢?
之后我添加了第二个参数,为球形图的内径,修改它的值,然后发现还挺好玩的哈哈
相关文章推荐
- 最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)
- 【转】三种方式在C++中调用matlab
- 基于数学建模的数学实验学习笔记一 MATLAB软件基础
- 【转】C++调用Matlab的.m文件
- matlab安装配置VLFeat库
- MATLAB的crack安装小曲
- [matlab]copy image
- MATLAB信号处理仿真-基带脉冲成形的数字滤波器
- 关联规则浅谈以及Apriori算法matlab实现
- 制作nc文件(Matlab)
- Matlab JPEG详细介绍
- matlab imread函数全说明
- K均值聚类以及matlab实现
- IEEE font, matlab eps图片 font Helvetica, not embedded
- 浅谈决策树算法以及matlab实现ID3算法
- Matlab自己定义函数
- 如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口
- matlab 去掉字符串前后的空格
- matlab 按照某列以行为单位进行排序
- Matlab中取模(mod)与取余(rem)的区别