博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab练习程序(全景图到穹顶图)
阅读量:6836 次
发布时间:2019-06-26

本文共 1055 字,大约阅读时间需要 3 分钟。

这个程序我最初是用FreeImage写的,这两天改成了matlab,再不贴上来,我就要忘了。

看到一篇文章有这样的变换,挺有意思的,就拿来试了一下,。

全景图到穹顶图变换,通俗的说就是将全景图首尾相接做成一个圆环的样子。

先看下面这张图:

下面的矩形就是我们要处理的全景图,上面的矩形是变换后的图像。下面图像的底边对应穹顶图的内圆,顶边对应穹顶图的外圆,当然,反过来也是可以的。

程序流程:

1.定义穹顶图内圆和外圆的半径,变换后的像素就填充在这个内外半径的圆环中。

2.遍历穹顶图,当所处理当前像素位于圆环内,则通过极坐标反变换去全景图中寻找相应位置的像素进行填充。

3.遍历完图像就行了。

用的技巧和图像旋转或放大缩小都是类似的。

处理结果:

原图:

结果:

matlab代码如下:

clear all;close all;clc;img=imread('pan.jpg');imshow(img);[m,n]=size(img);r1=100;     %内环半径r2=r1+m;    %外环半径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
=1 && yy<=m && xx>=1 && xx<=n imgn(y,x)=img(yy,xx); end end endendfigure;imshow(imgn,[])

最后要说的是,一般我们要是有一张全景图,通常会用cubic映射,将图像变换为立方体的六个面,然后通过图形学方法贴到立方体上,就能做出类似谷歌街景的样子。cubic映射应该才是全景图最常用的处理方法,不过那又是另一类变换了。

 

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

你可能感兴趣的文章
Java-GC-标记清除算法
查看>>
(转载)Java多线程入门(一)
查看>>
[C#]中获取当前程序运行路径的方法
查看>>
我的第一天
查看>>
SGU 164.Airline(结论题)
查看>>
findlibrary returned null
查看>>
scala学习手记28 - Execute Around模式
查看>>
Filebeat的工作原理
查看>>
Elasticsearch配置文件详解
查看>>
Java虚拟机学习 - 查看JVM参数及值的命令行工具
查看>>
Ubiquitous Religions(friends变形)
查看>>
机器学习——聚类分析和主成分分析
查看>>
Win10上 visual studio设置为本地IIS运行网站时 必须以管理员身份加载项目的解决方法...
查看>>
记录常见的HTTP请求错误
查看>>
Java字符串替换函数replace、replaceFirst、replaceAll
查看>>
Ubuntu下搭建Android开发环境
查看>>
汇编指令
查看>>
yum安装mysql后root用户的临时密码
查看>>
mysql 原理~ 乐观锁和悲观锁
查看>>
策略模式
查看>>