关于图像的球面投影,是全景应用中比较常见的技术,而现有的一些资源大多写的不太好,比较晦涩。在经过一段时间的摸索之后,发现了这个博客写的相对可以,本文的实现也将其作为重要的参考,如果看过本文之后有什么不明白或者觉得不好的地方可以去看看。

在展开本文之前,先来看看下面的两张图片:

左边的图像被投影到球面上后,其正视图为右边的图像。而我们要研究的是,如何去投影的过程。

可以想象,左边的图像是一张极薄的纱,将其蒙到一个大小正好的球面上(薄纱过中点的横轴正好覆盖球赤道的半周),然后正看过去会怎么样。我们将看到一个接近于上面右边图像的图像。为什么说接近而不说相同呢,因为大小是不一样的。左边图像的赤道如果刚刚好覆盖掉球的半个平面,则球的周长将为左边图像的宽度的两倍。假定左边图像的宽度为W,而球的半径为R,则有

πR=W

所以球的正视图的球直径应该为

2R=2*W/π

即球的正视图不会触碰到图像边缘,而为了我们看起来舒服一点,我们希望球的正视图刚刚好就触碰到图像边缘,是故球做完投影之后其正视图需要做一个等比例的放大,该放大系数为π/2。经过放大,我们就得到了右边的图像。之后,我们把放大系数设为k。

下面我们正式进入图像投影的研究,还是遵循上面的设想,把左边图像设想成一张极薄的纱,然后将其蒙到一个大小正好的球面上。那么,左边图像的中点将是右边图像的中点,也就是球正面顶点的位置。

接着,我们将图像的中心点记为点0,然后在左图像上随便取一个点即为点A,假设点A是落在过中点的横轴上的,很容易想象经过投影后A也将落在右图过中心点的赤道上。进一步想,左图绕中心旋转一个角度之后,原来不在过中点的横轴上的点可能变为其上的点,相应的该点的投影也会落在右图过中心点的赤道上。也就是说,图像上的任意一点经过投影之后,将落在原图与中心点连线的线上。接着我们沿着连线切下将得到下面的切面:

这便是这篇文章推导的关键,其中最为关键的是弧长等于OA*k这句话(由上面的薄纱模型很容易得出该弧为左图中的OA经过弯曲而来,长度自然相同,而*k是因为图像经过了放大),有了上面这些条件,我们可以列出以下这些公式:

推导到最后我们可以看到原图像坐标(X,Y)和投影后图像坐标(X',Y')的换算关系,其跟上面提到的博客最大不同的地方是将X,Y写在左边而X',Y'写在右边。在本人看来,这样才是合理的,因为后面我们需要去原图像找到对应的像素点取像素值,而映射后图像遍历时坐标是知道的,应该为已知条件。详细的可参考我之前写过的

OK,到这里推导过程就全部结束了,按照上面的公式便可完成图像的映射。经过本人的测试,如果每次直接这样算效率是比较低的,所以后来本人改由查表法来完成上面的工作,这份工程和可执行程序都已经打包在一起上传了(由于是X64编译的,需要电脑是64位操作系统才可以运行,如果是32位的则可通过修改工程解决,工程利用OpenCV进行解码,需要自行配置,否则无法运行),如果有兴趣的可以去下载。

下面放出一张处理结果图

图像坐标球面投影_C/C++ 图像处理(7)------图像の球面投影算法相关推荐

  1. python dataset[trans_python gdal根据图像坐标生成矢量框(含图像坐标转地理坐标)...

    要生成矢量框需要将图像坐标转换为地理坐标或者投影坐标,以下代码是生成了满足条件的1000*1000区域对应的矢量框,关键在于红色字体部分. # -*- coding: utf-8 -*- import ...

  2. python图像腐蚀处理_[Python图像处理]八.图像腐蚀和图像膨胀

    图像腐蚀 1.基础理论 形态学转换主要针对的是二值图像(0/1)图像类似于领域被蚕食,将图像中的高亮区域白色部分进行缩减细化,其运行结果图比原图的高亮区域更小.主要包括两个输入对对象: 二值图像,卷积 ...

  3. 图像处理--鱼眼图像

    鱼眼镜头--最开始(1919)是源于摄影的需求--因为鱼眼图像存在几何畸变>>>鱼眼校正的需求 发展: 装满水的针孔摄像机>>>半球形玻璃>>>在 ...

  4. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  5. 卷积滤波 英文_3. 数码相机内的图像处理基本图像滤波

    [转载请注明来源和作者] 在第一篇文章里面,我提到计算摄影学是计算机图形学,计算机视觉,光学和传感器等领域的交叉学科,在这个领域我们可以用强大的图像算法,对传感器所获取的信息做任意的处理,得到丰富多彩 ...

  6. matlab实现图像放大两倍,matlab图像处理基础知识0(双线性插值matlab实现--调整水平和垂直放大倍数)...

    需求说明:图像处理FPGA实现前期算法准备 当前算法:已通过matlab验证成功 function scaler_bilinear() %-----------------------------0: ...

  7. 数字图像处理课设图像的锐化_数字图像处理图像锐化处理.ppt

    数字图像处理图像锐化处理 4.7.2 灰度级到彩色转换 灰度级到彩色转换(例) 在HSI彩色空间的直方图均衡强度均衡处理没有改变图像的色调和饱和度值,但它的确影响了整体图像的彩色感观. 向量分量可以用 ...

  8. 图像模式识别与计算机视觉的,图像处理、计算机视觉和模式识别领域有哪些区别和联系...

    一.区别 1.数字图像处理(Digital Image Processing) 数字图像处理是对已有的图像进行变换.分析.重构,得到的仍是图像. Digital Image Processing,简称 ...

  9. 图像处理之图像的像素运算

    一.图像点运算 点运算又称为对比度增强.对比度拉伸或灰度变换,是一种通过图像中的每一个像素值(即像素点上的灰度值)进行运算的图像处理方式.它将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应 ...

  10. 图像处理之图像的几何变换

    一.前言 图像的几何变换是将一幅图像中的坐标映射到另外一幅图像中的新坐标位置,它不改变图像的像素值,只是改变像素所在的几何位置,使原始图像按照需要产生位置.形状和大小的变化.本文主要介绍图像的基本几何 ...

最新文章

  1. egret发布的HTML5项目怎么打开,Egret引擎开发指南之发布项目
  2. cordova sqlite
  3. 好架构是进化来的,不是设计来的
  4. 《庆余年》是爆了,但想打高分的阅文仍然没有公式可套
  5. Python实现二叉搜索树
  6. Mac录制屏幕:自带QuickTime软件和QQ
  7. 让代码不运行的快捷键html5,使用 vscode 实现写代码双手不用离开键盘
  8. mqtt判断设备是否在线_物联网的基石-mqtt 协议初识
  9. 2016年1月19日 video.js修改视频源后再调用
  10. mysql5.6二进制包_MySQL 5.6版本二进制包多实例安装
  11. CloudCompare 软件手册
  12. 灾害可视化:全国进入汛期,多地预警,全国多省进入暴雨洪灾状态、地图GIS数据可视化、雷达云图、等值线、等值面绘制
  13. linux 安装Python3 并安装Python Blog Wagtail
  14. 大数据知识的基本介绍,大数据的特点主要包含哪几个?
  15. #第二章 数理文化的起源2.1文化概述
  16. HTML5+WebGL打造的无插件纯Web 3D机房(第二季新增视频)
  17. 计算机领域模范,喜报 | 我院陆品燕教授获2020年上海市“劳动模范(先进工作者)”称号...
  18. 运用计算机思维可以解决什么问题,现在就开始读懂:什么是计算机思维?
  19. Flash Photography: Canon Speedlites 闪光摄影:佳能闪光灯 Lynda课程中文字幕
  20. 微信公众平台开发之模板消息(Java)

热门文章

  1. html如何变成xls格式文件怎么打开,XLSHTML 文件扩展名: 它是什么以及如何打开它?...
  2. 如何做好抖音?做抖音必学的上热门技巧
  3. [国家集训队]Tree I
  4. 机器人算法工程师入门指南(三)机器人算法工程师需要学习哪些知识?(及教材推荐)
  5. 静态路由使用下一跳和出接口的区别,我猜你不知道这一点!
  6. a与雪碧图在导航处的使用
  7. ceph 源代码分析 — peering 过程
  8. android多开原理和检测。
  9. 三大云厂商 ARM 架构服务器性能对比
  10. 判断四边形凹凸性及凹点