关于鱼眼镜头展图开的一些研究

前言:前段时间在做鱼眼展开的的程序,本来以为超简单,毕竟好多人都已经做过了不是,肯定有许多资料和参考。然而,做什么事情之前都不能眼高手低。我做了好久,还得不出想要的结果,是很烦。前两天导师没办法了给我安排了其他的工作,但我这个还没有得出想要的结果,强迫症的我心里好难受。花两天时间把能想到的全部整理如下,理一理思路,看能不能有所突破。

鱼眼镜头参数是:f=1.5mm,fov=240度

1、常见的三种鱼眼图像

(1)圆形鱼眼图                                                                           (2)全帧鱼眼图                                                          (3)鼓形鱼眼图

对于圆形鱼眼图像来说,由于它在各个方向上都能达到视域180度(其实说这个也不完全正确,因为我拿到的鱼眼图是超过180度的),所以仅需要水平拍摄两到三张就可用于全景图生成,并且拍摄技术简单。全帧鱼眼图需要水平拍摄一圈四张外加朝天朝地两张共六张图片才能生成全景图,操作很复杂。至于鼓形鱼眼图,由于它在垂直方向上可以达到视域180度,所以需要水平一圈拍摄四张图像才能生成一张全景图。

2、鱼眼图像的畸变形式

径向畸变(Radial Distortion),即从圆心开始各个放射方向上,在图像点到圆心的距离上所产生的偏差。(主要是针对径向畸变的)

偏心畸变(Decentering Distortion),图像的中心不在鱼眼镜头的光轴上所引发的图像畸变。

切向畸变(Tangential Distortion),从圆心到图像点的向量在其切向上发生的偏离,也就是向量的角度偏差引起的畸变。

3、摄像机镜头模型

常见的模型有:透视投影模型(perspective projection)、立体投影模型(stereographic projection)、等距投影(equidistant projection)、正弦投影(sine-law projection)以及等立体角投影(equi-solid angle projection)。

我查到的资料是:在鱼眼镜头的生产商中,大部分采用等距映射模型。

投影模型如下:鱼眼图到单位视球面之间的转换

具体的解释在下面矫正的部分。

下面正式开始对图片的处理:

4、鱼眼有效区域的提取:目的是为了得到圆心坐标和半径。(老师说学习人工智能任何一种算法,首先要明确它的objective和optimistic。这里虽不是人工智能上的算法,但这种理念是通用的不是么)

对鱼眼有效区域的提取,我得到的最有效的方法是变角度先扫描法。原理很简单,是从线扫描法改进而来的。线扫描法就是从上下左右四个方向用扫描线的方式逼近圆,当扫描线上的像素差大于一个阈值时 ,我们认为该扫描线是鱼眼镜头有效区域的切线。改进的变角度扫描线法就是从多个角度逼近,而不单单是上下左右四条线了。

剔除无效切点的办法是:

对所有切点对计算出的半径取平均值,然后把那些半径大于均值的切点对坐标剔除。

这时我们得到许多切点对。根据这些切点对来拟合圆。

Kasa圆拟合法:

假设 是用于圆拟合的切点坐标数据,对其进行列填充扩展,构造下面的两个矩阵:

vector<Point3i> extendA;
	vector<int> extendB;
	vector<Point>::iterator iter = validPoints.begin();
	while (iter != validPoints.end())
	{
		extendA.push_back(Point3i((*iter).x, (*iter).y, 1));
		extendB.push_back((pow((*iter).x, 2) + pow((*iter).y, 2)));
		iter++;
	}
	Mat A = Mat(extendA).reshape(1);
	Mat	B = Mat(extendB).reshape(1);

	Mat_<double> dA, dB;
	Mat_<double> P(3, 1, CV_64F);
	A.convertTo(dA, CV_64F);
	B.convertTo(dB, CV_64F);
	P = dA.inv(CV_SVD)*dB;
	double p1, p2, p3;
	p1 = P.at<double>(0, 0);
	p2 = P.at<double>(1, 0);
	p3 = P.at<double>(2, 0);

	center.x = p1 / 2;
	center.y = p2 / 2;
	radius = sqrt((pow(p1, 2.0) + pow(p2, 2.0)) / 4 + p3);

我没有去推这个拟合算法具体的过程,实现部分见上面这一段圆拟合代码。

到这里我们就已经得到了鱼眼图片的圆心坐标和半径。(这部分非常重要,因为如果圆心和半径求得不对的话,严重影响后面的矫正部分)

5、对鱼眼图片进行矫正(目标是求出 鱼眼镜头图片和展开的图片像素坐标之间一一映射的关系)

矫正分成两个部分:

(1)利用鱼眼镜头的成像模型将畸变的图像还原到单位视球面上;

(2)  将单位视球面通过特定的映射关系,变换成为我们通常所见的二维图像。映射关系有以下几种:

其中采用的是等距投影模型。。。。。。

5.1、鱼眼镜头图到视球面的转化

(1)图像坐标uv和笛卡尔集坐标系(直角坐标系xy)之间的转换: (a)中o(u0,v0)是鱼眼镜头图有效区域的圆心图像坐标

x=u-u0

y=-(v-v0)

(2)笛卡尔(直角坐标系)转化成平面极坐标

根据等距映射模型:加上鱼眼镜头区域半径R和半视场角,可以求出f(镜头光心到图像主点的距离)

所以

由此我们就得到了单位半球面上任意一点的球面坐标参数(,其中是平面某一点与x轴正向之间的夹角,是平面上一点与镜头光心之间的夹角,也是镜头光轴与入射光线之间的夹角。

//双线性插值
			int iu = (floor(u)>0 ? floor(u) : 0);			//左上点x
			int iv = (floor(v)>0 ? floor(v) : 0);         //左上点y
			pt = Point(iu + 1, iv + 1);//为了防止指针越界
			if (!pt.inside(imgArea))
			{
				continue;
			}
			Vec3b temp1, temp2;
			temp1 = _imgOrg.ptr<Vec3b>(iv)[iu] * (1 - abs(u - iu)) + _imgOrg.ptr<Vec3b>(iv)[iu + 1] * (1 - abs(u - (iu + 1)));
			temp2 = _imgOrg.ptr<Vec3b>(iv + 1)[iu] * (1 - abs(u - iu)) + _imgOrg.ptr<Vec3b>(iv + 1)[iu + 1] * (1 - abs(u - (iu + 1)));
			_retImg.ptr<Vec3b>(j)[i] = temp1*(1 - abs(v - iv)) + temp2*(abs(v - iv));
时间: 2024-10-15 09:04:00

关于鱼眼镜头展图开的一些研究的相关文章

jquery甘特图开发包免费下载地址

Silverlight Gantt甘特图是一款非常丰富,可定制,轻量级和高性能的控件. 项目甘特图: 可视化层次的任务列表. 可移动和拖拽调整条形图 可视化时间编辑器 编辑任务依赖关系 调整任务进度条 关键路径.自定义外观.自定义行列.自定义任务颜色等 高质量打印甘特图 资源甘特图: 实现资源利用视图. 重叠渲染任务 FlexyGantt与依赖连线 可折叠的任务汇总信息 资源分配阈值的可视化界面 服务器状态的可视化界面 Virtualized Redering使您随时显示数千条记录. 一个完全兼

黄聪:手机移动端建站Jquery+CSS3+HTML5触屏滑动特效插件、实现触屏焦点图、图片轮展图

前言 TouchSlide 可以说是 SuperSlide 手机简化版,不同的地方在于:1.TouchSlide是纯javascript开发的,不依赖任何js库,鉴于此,TouchSlide调用方法和SuperSlide有点不同.调用方法为:TouchSlide({slideCell:"#slider",effect:"leftLoop"});(slideCell必须为id对象);同样效果,SuperSlide调用方法为:jQuery("#slider&q

电商干货!1000万烧出来的高点击率钻展创意图十大原则(营销&amp;人性)

梦想凯歌:创意图的钻展的灵魂,没有创意图你什么都不是.无论是日常推广还是做大促活动,创意图是测试的重中之重,一定要提前测试好每一个资源位的创意图.今天这篇好文是一个资深电商设计师在操作钻展烧了1000多万后总结的经验,不少技巧可以用在Banner设计上. 创意图是你获取流量的入口,由创意图延升到落地页,进而是整一个活动项目. 所以,这节课很关键,也是我这系列课程的重点.到目前操作钻展也至少烧了1000多万了. 很多朋友常常发图片给梦想凯歌,问如何优化?这十大原则是我梦想凯歌做创意图的总结! 虽然

blender 带贴图与颜色材质的模型,导入到Unity中

Blender初学环境:win10 x64blender 2.79unity 5.6.2 之前不论是用导出fbx,还是把 .blend文件拽入u3d中,原先的贴图就没有了研究了很多天,才发现一个我这里可用的方法 目前只是简单以cube为例,复杂的多材质模型还没试 打开blender注意,用的是blender渲染一.新建一个cube 二.展UV1.开出一个UV图像编辑器窗口2.在三维视图按Tab进入编辑模式确保选上所有,如果没有用A键3.按U键调出菜单,选第二项点确定 三.加贴图1.打开一张图(我

纪念概率学界最后一位集大成者——钟开莱

转载自:https://www.douban.com/note/151765976/?type=like 头一次看到这样的华人科学家,很有趣,也很奇怪,是什么动力让一个搞科研的家伙学术上如此出色,生活如此幸福.也许这样的人有很多,但他们都还没over,所以我还无法看到别人对他们一生的评价.历史周而复始,生于战火纷乱,死于良辰美景是一个不错的故事,而我们这个时代的同龄人,生于并不平静和平年代,是否会死在一个资源消耗殆尽的乱世,如果活的足够长,还真得很难说~ http://www.math.org.

冷静审视人工智能技术的本质 | 一图看懂新一代人工智能知识体系大全

冷静审视人工智能技术的本质 吴妙芸 来源:图灵人工智能(ID:TuringAI01) 人工智能的发展离不开基础支持层和技术层,基础支持层包括大数据.计算力和算法:技术层包括计算机视觉.语音识别和自然语言处理.在过去的2016年人工智能风风火火了一把,到目前为止,还在大力向前发展,研究机构.企业.投资机构和政府都对人工智能投入了很多关注,并陆续出台了一些政策.人工智能的技术本质是什么,本文会详细分析. 总览人工智能技术图谱 基础支撑层的算法创新发生在20世纪80年代末,是大数据和计算力将人工智能推

开学季,几何画板降到冰点

2018春节过完了,也意味着开学季即将到来,广大学子们又要返回校园里面了.为了迎接开学季,老师必备的课件制作工具几何画板也推出了降价活动,所以说不要错过,下面就来看看具体活动. 活动详情:开学季几何画板直降150,买即送海量课件模板! 活动地址:http://www.jihehuaban.com.cn/goumai.html 软件获取地址:http://wm.makeding.com/iclk/?zoneid=17783 图1:开学季活动图 开学季已经到了,为了回馈广大师生和新老用户,几何画板中

如何做研究?(From: MIT AI LAB)

简评: 这是一篇关于如何做研究的经验总结,全面阐述了研究过程中可能遇到的诸多问题,并给出了切实可行的建议!对于刚进入研究生阶段的研究生来说,我觉得可以为他们未来的研究生活提供很多有益的指导! 摘要: 本文的主旨是解释如何做研究.我们提供的这些建议,对做研究本身(阅读.写作和程序设计),理解研究过程以及开始热爱研究(方法论.选题.选导师和情感因素),都是极 具价值的. 本文背景: 麻省理工学院 人工智能实验室 AI Working Paper 316 1988年10月来自MIT人工智能实验室:如何

live555源码研究(四)------UserAuthenticationDatabase类

一.UserAuthenticationDatabase类作用 1,用户/密码管理 2,鉴权管理 二.类UserAuthenticationDatabase继承关系图                         live555源码研究(四)------UserAuthenticationDatabase类,布布扣,bubuko.com