问个电脑问题,宏碁威武骑士a715咋样781怎样

SURF算法和RANSAC算法相结合的遥感图像匹配方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SURF算法和RANSAC算法相结合的遥感图像匹配方法
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢结合SURF特征和RANSAC算法的图像配准方法--《传感器世界》2013年10期
结合SURF特征和RANSAC算法的图像配准方法
【摘要】:提出了一种基于SURF特征和RANSAC算法的图像配准方法。首先通过SURF算法对图像进行特征点检测,将欧式距离作为相似性测度进行特征点粗匹配,并通过RANSAC算法剔除误匹配点对;然后利用正确的匹配点对求解仿射变换模型从而实现图像的精确配准。实验结果表明了该方法的精确性和有效性。
【作者单位】:
【关键词】:
【分类号】:TP391.41【正文快照】:
一、引言图像配准是将在不同时间、不同传感器或不同条件下获取的关于同一场景的两幅或多幅图像进行匹配、叠加的过程,是计算机视觉、模式识别、图像融合、医学图像处理等领域的一项关键技术[1,2]。目前图像配准算法大致分为两类:基于灰度的配准方法和基于特征的配准方法[2]。
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【参考文献】
中国期刊全文数据库
纪利娥;杨风暴;王志社;陈磊;;[J];红外技术;2012年11期
中国博士学位论文全文数据库
丁南南;[D];中国科学院研究生院(长春光学精密机械与物理研究所);2012年
【共引文献】
中国期刊全文数据库
韩强;;[J];安徽电子信息职业技术学院学报;2011年05期
程刚;郑小华;阳锋;徐祖舰;;[J];安徽农业科学;2010年34期
何海燕;施培蓓;;[J];安庆师范学院学报(自然科学版);2009年03期
吴慧兰;刘国栋;刘炳国;胡涛;浦昭邦;;[J];半导体光电;2008年05期
陈京;袁保宗;刘渭滨;;[J];北京交通大学学报;2012年02期
周峰;刘辉;李超峰;;[J];办公自动化;2009年22期
刘彬;叶丽娜;;[J];兵工自动化;2009年06期
刘焕敏;王华;段慧芬;;[J];兵工自动化;2009年06期
彭勃;周文晖;刘济林;;[J];兵工学报;2007年12期
陈冰;赵亦工;李欣;;[J];兵工学报;2009年05期
中国重要会议论文全文数据库
刘善磊;张亮;;[A];江苏省测绘学会2011年学术年会论文集[C];2011年
隋树林;孙立宏;姚文龙;袁健;;[A];第二十六届中国控制会议论文集[C];2007年
汪力;叶桦;夏良正;;[A];第二十六届中国控制会议论文集[C];2007年
;[A];第二十六届中国控制会议论文集[C];2007年
周凯;范瑞霞;李位星;;[A];第二十九届中国控制会议论文集[C];2010年
;[A];第二十九届中国控制会议论文集[C];2010年
;[A];第二十九届中国控制会议论文集[C];2010年
邹丽晖;陈杰;张娟;窦丽华;;[A];第二十九届中国控制会议论文集[C];2010年
;[A];第二十九届中国控制会议论文集[C];2010年
孙明竹;赵新;程小燕;孙程;卢桂章;;[A];第二十九届中国控制会议论文集[C];2010年
中国博士学位论文全文数据库
王玉全;[D];哈尔滨工程大学;2010年
梁洪;[D];哈尔滨工程大学;2010年
任桢;[D];哈尔滨工程大学;2010年
孔凡芝;[D];哈尔滨工程大学;2009年
王作为;[D];哈尔滨工程大学;2010年
肖洁;[D];华中科技大学;2010年
朱清波;[D];华中科技大学;2010年
田文;[D];华中科技大学;2010年
涂虬;[D];华中科技大学;2010年
章鹏;[D];中国科学技术大学;2010年
中国硕士学位论文全文数据库
宋抗;[D];河南理工大学;2010年
陈忠翔;[D];南昌航空大学;2010年
雒燕飞;[D];山东科技大学;2010年
唐红梅;[D];山东科技大学;2010年
倪希亮;[D];山东科技大学;2010年
贾伟洁;[D];山东科技大学;2010年
任天宇;[D];长春理工大学;2010年
李跃;[D];浙江理工大学;2010年
娄铮铮;[D];郑州大学;2010年
王博;[D];哈尔滨工程大学;2010年
【二级参考文献】
中国期刊全文数据库
陈裕;刘庆元;;[J];测绘与空间地理信息;2009年06期
刘贵喜;周亚平;刘冬梅;朱东波;;[J];弹箭与制导学报;2008年06期
倪国强,刘琼;[J];光电工程;2004年09期
王鲲鹏;徐一丹;于起峰;;[J];红外技术;2009年05期
张锐娟;张建奇;杨翠;;[J];红外与激光工程;2009年01期
张二虎,卞正中;[J];计算机研究与发展;2004年07期
杨迪;孙劲光;何巍;刘旸;;[J];计算机工程与应用;2010年35期
文杨天;李征;吴仲光;;[J];计算机应用;2006年10期
阮芹;彭刚;李瑞;;[J];计算机与数字工程;2011年02期
中国硕士学位论文全文数据库
杨翠;[D];西安电子科技大学;2006年
孙雅琳;[D];西安电子科技大学;2010年
【相似文献】
中国期刊全文数据库
黄有群;付裕;马广焜;;[J];沈阳工业大学学报;2008年04期
王锐;王悦;;[J];数学学习与研究(教研版);2008年07期
郭翠锋;;[J];晋城职业技术学院学报;2010年02期
张倩;朱虹;郑丽敏;王奇文;;[J];计算机应用;2011年S1期
王忆锋,张海联,李灿文,李茜;[J];红外与激光工程;1998年01期
郑文龙,张涌,汤心溢,吴常泳;[J];红外与毫米波学报;2001年06期
严利民,储开颜,王朔中;[J];上海大学学报(自然科学版);2001年02期
周鹏,谭勇,徐守时;[J];中国科学技术大学学报;2002年04期
赵明昌,田捷,薛健,朱珣,何晖光,吕科;[J];软件学报;2005年04期
耿建玲;陈纯;陈耀武;黄轶伦;;[J];计算机工程与应用;2006年01期
中国重要会议论文全文数据库
高炳像;刘俊;;[A];浙江省信号处理学会2011学术年会论文集[C];2011年
孟强;王艳阳;张蔚;付慧君;龚建舟;陆惠忠;;[A];中华医学会放射肿瘤治疗学分会六届二次暨中国抗癌协会肿瘤放疗专业委员会二届二次学术会议论文集[C];2009年
翟胜军;姜晖;张鑫;;[A];武汉(南方九省)电工理论学会第22届学术年会、河南省电工技术学会年会论文集[C];2010年
董继扬;邱智勇;陈忠;;[A];第十四届全国波谱学学术会议论文摘要集[C];2006年
李红波;倪国强;;[A];第三届全国嵌入式技术和信息处理联合学术会议论文集[C];2009年
杨红喆;刘连芳;;[A];2007北京地区高校研究生学术交流会通信与信息技术会议论文集(上册)[C];2008年
闫利;郭勤;;[A];2007年光电探测与制导技术的发展与应用研讨会论文集[C];2007年
张翼;宋志坚;;[A];2008年医疗仪器学术年会暨理事会论文汇编[C];2008年
赵云丰;付冬梅;尹怡欣;王嘉;;[A];2008'中国信息技术与应用学术论坛论文集(二)[C];2008年
付宇光;唐焕文;唐一源;;[A];第二十届中国控制会议论文集(上)[C];2001年
中国重要报纸全文数据库
卫星;[N];中国气象报;2004年
冉瑞奎 杨斗立 洪宇;[N];中国气象报;2006年
本报记者 陈磊;[N];科技日报;2005年
李丹;[N];中国气象报;2004年
游雪晴;[N];科技日报;2003年
本报记者 陈磊;[N];科技日报;2005年
本报记者 任荃;[N];文汇报;2005年
中国博士学位论文全文数据库
时永刚;[D];中国科学院研究生院(电子学研究所);2004年
王彪;[D];南京航空航天大学;2005年
赵振兵;[D];华北电力大学(河北);2009年
周武;[D];华南理工大学;2012年
宋智礼;[D];复旦大学;2010年
朱宪伟;[D];国防科学技术大学;2009年
徐玉华;[D];合肥工业大学;2011年
刘朝霞;[D];大连海事大学;2011年
高峰;[D];国防科学技术大学;2011年
丁南南;[D];中国科学院研究生院(长春光学精密机械与物理研究所);2012年
中国硕士学位论文全文数据库
李洪;[D];暨南大学;2005年
王海峰;[D];西北大学;2011年
刘钰菲;[D];西安电子科技大学;2011年
冯卫平;[D];杭州电子科技大学;2010年
陈燕文;[D];武汉理工大学;2011年
叶耘恺;[D];重庆大学;2004年
黄淑英;[D];西安理工大学;2005年
吴毅良;[D];暨南大学;2011年
梅小明;[D];中南大学;2004年
曾琦;[D];上海交通大学;2010年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 大众知识服务
出版物经营许可证 新出发京批字第直0595号
订购热线:400-819-82499
服务热线:010--
在线咨询:
传真:010-
京公网安备75号3092人阅读
matlab(10)
原文地址:
计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理和计算机视觉的许多功能,但是术业有专攻,在进行深入的视觉算法研究的时候Matlab的自带功能难免会不够用。本文收集了一些比较优秀的Matlab计算机视觉工具箱,希望能对国内的研究者有所帮助。
VLFeat:著名而常用
项目网站:
许可证:BSD
著名的计算机视觉/图像处理开源项目,知名度应该不必OpenCV低太多,曾获ACM Open Source Software Competition 2010一等奖。使用C语言编写,提供C语言和Matlab两种接口。实现了大量计算机视觉算法,包括:
常用图像处理功能,包括颜色空间变换、几何变换(作为Matlab的补充),常用机器学习算法,包括GMM、SVM、KMeans等,常用的图像处理的plot工具。特征提取,包括&,&,&,等。VLFeat提供了一个vl_covdet()&函数作为框架,可以方便的统一所谓“co-variant
feature detectors”,包括了DoG, Harris-Affine, Harris-Laplace并且可以提取SIFT或raw patches描述子。超像素(Superpixel)分割,包括常用的,&算法等高级聚类算法,比如整数KMeans:Integer k-means (IKM)、hierarchical version of integer k-means (HIKM),基于互信息自动判定聚类类数的算法Agglomerative Information Bottleneck (AIB)&algorithm等高维特曾匹配算法,随机KD树Randomized kd-trees
可以在查看VLFeat完整的功能列表。
MexOpenCV:让Matlab支持调用的OpenCV
项目网站:
作者Kota Yamaguchi桑是石溪大学()的PhD,早些时候自己搞了一套东西把OpenCV的代码编译成Matlab可用的mex接口,然后这个东西迅速火了。今年夏天这个项目被OpenCV吸收为一个模块,貌似是搞了一个Google
Summer of Code(GSoC)的项目,最近(大概是9、10月)已经merge到了OpenCV主包,有兴趣的可以到Github的去玩一下,应该会在10月份的OpenCV
3 alpha里正式发布。现在OpenCV就同时有了Python和Maltab的binding(好强大)。具体的功能就不细说了,既然是OpenCV的binding,当然是可以使用OpenCV的绝大多数算法了。比如这样:
%loadanimage(Matlab)&
I=imread('cameraman.tif');&
%computetheDFT(OpenCV)&
If=cv.dft(I,cv.DFT_COMPLEX_OUTPUT);
的工具箱:轻量好用,侧重图像处理
项目网站:
这位Peter大哥目前在工作,他自己写了一套Matlab计算机视觉算法,所谓工具箱其实就是许多m文件的集合,全部Matlab实现,无需编译安装,支持Octave(如果没有Matlab的话,有了这个工具箱也可以在Octave下进行图像处理了)。别看这位大哥单枪匹马,人家的工具箱可是相当有名,研究时候需要哪个Matlab的计算机视觉小功能,直接到他家主页上下几个m文件放在自己文件夹就好了。这个工具箱主要以图像处理算法为主,附带一些三维视觉的基本算法,列一些包括的功能:
,求达人解释这个是啥,Harris、Canny之类的特征算法,边缘特征和线特征的各种操作,图像降噪,从法向量积分出表面,求达人解释这个是啥,著名的保边缘平滑算法,傅立叶变换,透视几何、三维视觉的一些算法、特征匹配、RANSAC,指纹图像增强,一些好玩儿的图像生成算法,图像融合,颜色空间算法
可以在网站上看到全部功能的介绍和下载,非常推荐试一下,也可以学到不少算法。
Machine Vision Toolbox:侧重机器视觉、三维视觉
项目网站:
许可证:LGPL
以前没有用过这个工具箱,最近发现竟然非常强大,而且和我自己的工作还很相关。这个工具箱侧重机器视觉,作者是另一个Peter,Peter Corke在机器人界很有名,他在2011年写了一本书《》介绍了机器视觉相关的颜色、相机模型、三维视觉、控制等研究,并配套这个工具箱。算法包括了大量常用的视觉和图像处理小函数,,这些就不提了,提几个别的工具箱一般没有的功能
Bag of words的Matlab实现各种相机模型的实现,包括普通相机、鱼眼相机、Catadioptric相机模型等等。如果你做机器人视觉、挂在各种广角相机的话,这些模型实现会很有用自带简单的相机标定功能对极几何(Epipolar Geomtry)的相关算法函数Plucker坐标的实现,做广义相机模型(Generalized camera model)很有用
DIPUM Toolbox:经典教材配套
项目地址:
冈萨雷斯著名的图像处理教材《数字图像处理》的配套工具包,主要是书中图像处理算法的实现,名气自然是不必说了,网上可以免费下到加密后的p文件放在Matlab下面用,作为图像处理入门的上手玩具。
MATLAB Functions for Multiple View Geometry:又一个经典教材配套
项目网站:
许可证:MIT
又是一本大名鼎鼎的教材《计算机视觉中的多图几何》(Multiple View Geometry in Computer Vision),值得所有做三维视觉的研究者好好研究的书,国内很早就翻译了中文版。作者Zisserman提供了部分书中算法的Matlab实现,是深入理解书中理论的非常好的辅助材料。
其他的工具箱
,提供Matlab和C接口的图像处理功能,比较早,现在估计很少有人用或者知道了吧?,计算机视觉和模式识别相关的Matlab功能,好像没什么人用。相关领域的工具箱,比如做机器学习的、做Markov随机场的等等,以后有机会写一下。特定功能的工具箱,比如相机标定工具箱,这个可推荐的还阵挺多,以后有机会写一下。里可以找到一些Matlab的开源工具箱。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:75192次
积分:1047
积分:1047
排名:千里之外
原创:22篇
转载:45篇
评论:13条
(1)(1)(1)(2)(1)(1)(1)(3)(1)(1)(3)(6)(2)(1)(3)(1)(2)(1)(5)(2)(2)(2)(2)(15)(4)(3)(2)SURF算法中的ransac算法 - 博客频道 - CSDN.NET
小李的专栏
努力由制造变成创造
分类:计算机视觉
1.RANSAC 原理
  就是首先随机抽取观测数据子集,我们假设视为这子集就是“内点”(局内点或者局内数据)。然后用这子集进行相关的拟合来计算模型参数(或者估计函数)。找到这模型(或者函数)以后,利用观测点(数据)进行是否正确,如果求出来的模型能够满足足够多的数据,我们视为很正确的数据。最后我们采纳。但是,如果不适合,也就是说求出来的模型(或者函数,也可以是模型参数)满足的数据点很少,我们就放弃,从新随机抽取观测数据子集,再进行上述的操作。这样的运算进行N次,然后进行比较,如果第M(M&N)次运算求出来的模型满足的观测数据足够多的话,我们视为最终正确的模型(或者称之为正确地拟合函数)。可见,所谓的随机抽样一致性算法很适合对包含很多局外点(噪声,干扰等)的观测数据的拟合以及模型参数估计。当然最小二乘法也是不错的算法,但是,最小二乘法虽然功能强大,不过,它所适合的范围没有RANSAC那么广。
2.SURF算法与ransac算法相结合
  (1)从SURF 算法预匹配数据集中随机取出一些匹配点对,计算出变换矩阵H,记为模型M。理论上只需要4对点。
  (2)计算数据集中所有数据与模型M的投影误差,若误差小于阈值,加入内点集 I ;
  (3)如果当前内点集 I 元素个数大于最优内点集 I_best , 则更新 I_best = I,同时更新迭代次数
  (4) 如果迭代次数大于k,则退出 ; 否则迭代次数加1,并重复上述步骤;
  注:在OpenCV中迭代次数k在不大于最大迭代次数的情况下,是在不断更新而不是固定的;
  其中,p为置信度,一般取0.995;w为”内点”的比例 ; m为计算模型所需要的最少样本数=4;
  在opencv里,findFundamentalMat函数来得到变换模型。
3.RANSAC源码解析 
(1)cv::findFundamentalMat()返回一个基础矩阵。
_points1:图像1的坐标点
_points2:图像2的坐标点
cv::Mat cv::findFundamentalMat( InputArray _points1, InputArray _points2,
int method, double param1, double param2,
OutputArray _mask )
int n = cvFindFundamentalMat( &_pt1, &_pt2, &matF, method, param1, param2, p_mask );
if( n &= 0 )
F = Scalar(0);
if( n == 1 )
F = F.rowRange(0, 3);
(2)cvFindFundamentalMat()返回一个整数值
CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,
CvMat* fmatrix, int method,
double param1, double param2, CvMat* mask )
int result = 0;
Ptr&CvMat& m1, m2, tempM
double F[3*9];
CvMat _F3x3 = cvMat( 3, 3, CV_64FC1, F ), _F9x3 = cvMat( 9, 3, CV_64FC1, F );
CV_Assert( CV_IS_MAT(points1) && CV_IS_MAT(points2) && CV_ARE_SIZES_EQ(points1, points2) );
CV_Assert( CV_IS_MAT(fmatrix) && fmatrix-&cols == 3 &&
(fmatrix-&rows == 3 || (fmatrix-&rows == 9 && method == CV_FM_7POINT)) );
count = MAX(points1-&cols, points1-&rows);
if( count & 7 )
m1 = cvCreateMat( 1, count, CV_64FC2 );
cvConvertPointsHomogeneous( points1, m1 );
m2 = cvCreateMat( 1, count, CV_64FC2 );
cvConvertPointsHomogeneous( points2, m2 );
if( mask )
CV_Assert( CV_IS_MASK_ARR(mask) && CV_IS_MAT_CONT(mask-&type) &&
(mask-&rows == 1 || mask-&cols == 1) &&
mask-&rows*mask-&cols == count );
if( mask || count &= 8 )
tempMask = cvCreateMat( 1, count, CV_8U );
if( !tempMask.empty() )
cvSet( tempMask, cvScalarAll(1.) );
CvFMEstimator estimator(7);
if( count == 7 )
result = estimator.run7Point(m1, m2, &_F9x3);
else if( method == CV_FM_8POINT )
result = estimator.run8Point(m1, m2, &_F3x3);
if( param1 &= 0 )
param1 = 3;
if( param2 & DBL_EPSILON || param2 & 1 - DBL_EPSILON )
param2 = 0.99;
if( (method & ~3) == CV_RANSAC && count &= 15 )
result = estimator.runRANSAC(m1, m2, &_F3x3, tempMask, param1, param2 );//在数据点数大于15个时才调用ransac方法见(3)
result = estimator.runLMeDS(m1, m2, &_F3x3, tempMask, param2 );
if( result &= 0 )
/*icvCompressPoints( (CvPoint2D64f*)m1-&data.ptr, tempMask-&data.ptr, 1, count );
count = icvCompressPoints( (CvPoint2D64f*)m2-&data.ptr, tempMask-&data.ptr, 1, count );
assert( count &= 8 );
m1-&cols = m2-&cols =
estimator.run8Point(m1, m2, &_F3x3);*/
if( result )
cvConvert( fmatrix-&rows == 3 ? &_F3x3 : &_F9x3, fmatrix );
if( mask && tempMask )
if( CV_ARE_SIZES_EQ(mask, tempMask) )
cvCopy( tempMask, mask );
cvTranspose( tempMask, mask );
maxIters:最大迭代次数
m1,m2 :数据样本
model:变换矩阵
reprojThreshold:投影误差阈值 3
confidence:置信度
bool CvModelEstimator2::runRANSAC( const CvMat* m1, const CvMat* m2, CvMat* model,
CvMat* mask0, double reprojThreshold,
double confidence, int maxIters )
bool result = false;
cv::Ptr&CvMat& mask = cvCloneMat(mask0);
cv::Ptr&CvMat& models, err,
cv::Ptr&CvMat& ms1, ms2;
int iter, niters = maxI
int count = m1-&rows*m1-&cols, maxGoodCount = 0;
CV_Assert( CV_ARE_SIZES_EQ(m1, m2) && CV_ARE_SIZES_EQ(m1, mask) );
if( count & modelPoints )
return false;
models = cvCreateMat( modelSize.height*maxBasicSolutions, modelSize.width, CV_64FC1 );
err = cvCreateMat( 1, count, CV_32FC1 );
tmask = cvCreateMat( 1, count, CV_8UC1 );
if( count & modelPoints )
ms1 = cvCreateMat( 1, modelPoints, m1-&type );
ms2 = cvCreateMat( 1, modelPoints, m2-&type );
niters = 1;
ms1 = cvCloneMat(m1);
ms2 = cvCloneMat(m2);
for( iter = 0; iter & iter++ )
int i, goodCount,
if( count & modelPoints )
bool found = getSubset( m1, m2, ms1, ms2, 300 );
if( !found )
if( iter == 0 )
return false;
nmodels = runKernel( ms1, ms2, models );
if( nmodels &= 0 )
for( i = 0; i & i++ )
CvMat model_i;
cvGetRows( models, &model_i, i*modelSize.height, (i+1)*modelSize.height );
goodCount = findInliers( m1, m2, &model_i, err, tmask, reprojThreshold );
if( goodCount & MAX(maxGoodCount, modelPoints-1) )
std::swap(tmask, mask);
cvCopy( &model_i, model );
maxGoodCount = goodC
niters = cvRANSACUpdateNumIters( confidence,
(double)(count - goodCount)/count, modelPoints, niters );
if( maxGoodCount & 0 )
if( mask != mask0 )
cvCopy( mask, mask0 );
result = true;
(4)getSubset()得到子集
bool CvModelEstimator2::getSubset( const CvMat* m1, const CvMat* m2,
CvMat* ms1, CvMat* ms2, int maxAttempts )
cv::AutoBuffer&int& _idx(modelPoints);
int* idx = _
int i = 0, j, k, idx_i, iters = 0;
int type = CV_MAT_TYPE(m1-&type), elemSize = CV_ELEM_SIZE(type);
const int *m1ptr = m1-&data.i, *m2ptr = m2-&data.i;
int *ms1ptr = ms1-&data.i, *ms2ptr = ms2-&data.i;
int count = m1-&cols*m1-&
assert( CV_IS_MAT_CONT(m1-&type & m2-&type) && (elemSize % sizeof(int) == 0) );
elemSize /= sizeof(int);
for(; iters & maxA iters++)
for( i = 0; i & modelPoints && iters & maxA )
idx[i] = idx_i = cvRandInt(&rng) %
for( j = 0; j & j++ )
if( idx_i == idx[j] )
if( j & i )
for( k = 0; k & elemS k++ )
ms1ptr[i*elemSize + k] = m1ptr[idx_i*elemSize + k];
ms2ptr[i*elemSize + k] = m2ptr[idx_i*elemSize + k];
if( checkPartialSubsets && (!checkSubset( ms1, i+1 ) || !checkSubset( ms2, i+1 )))
if( !checkPartialSubsets && i == modelPoints &&
(!checkSubset( ms1, i ) || !checkSubset( ms2, i )))
return i == modelPoints && iters & maxA
(5)findInliers()找内点
int CvModelEstimator2::findInliers( const CvMat* m1, const CvMat* m2,
const CvMat* model, CvMat* _err,
CvMat* _mask, double threshold )
int i, count = _err-&rows*_err-&cols, goodCount = 0;
const float* err = _err-&data.
uchar* mask = _mask-&data.
computeReprojError( m1, m2, model, _err );
threshold *=
for( i = 0; i & i++ )
goodCount += mask[i] = err[i] &=
return goodC
void CvHomographyEstimator::computeReprojError( const CvMat* m1, const CvMat* m2,const CvMat* model, CvMat* _err )
int i, count = m1-&rows*m1-&
const CvPoint2D64f* M = (const CvPoint2D64f*)m1-&data.
const CvPoint2D64f* m = (const CvPoint2D64f*)m2-&data.
const double* H = model-&data.
float* err = _err-&data.
for( i = 0; i & i++ )
double ww = 1./(H[6]*M[i].x + H[7]*M[i].y + 1.);
double dx = (H[0]*M[i].x + H[1]*M[i].y + H[2])*ww - m[i].x;
double dy = (H[3]*M[i].x + H[4]*M[i].y + H[5])*ww - m[i].y;
err[i] = (float)(dx*dx + dy*dy);
(6)cvRANSACUpdateNumIters
对应上述k的计算公式
ep:外点比例
cvRANSACUpdateNumIters( double p, double ep,
int model_points, int max_iters )
if( model_points &= 0 )
CV_Error( CV_StsOutOfRange, "the number of model points should be positive" );
p = MAX(p, 0.);
p = MIN(p, 1.);
ep = MAX(ep, 0.);
ep = MIN(ep, 1.);
double num = MAX(1. - p, DBL_MIN);
double denom = 1. - pow(1. - ep,model_points);
if( denom & DBL_MIN )
num = log(num);
denom = log(denom);
return denom &= 0 || -num &= max_iters*(-denom) ?
max_iters : cvRound(num/denom);
int cv::Affine3DEstimator::runKernel( const CvMat* m1, const CvMat* m2, CvMat* model )
const Point3d* from = reinterpret_cast&const Point3d*&(m1-&data.ptr);
const Point3d* to
= reinterpret_cast&const Point3d*&(m2-&data.ptr);
Mat A(12, 12, CV_64F);
Mat B(12, 1, CV_64F);
A = Scalar(0.0);
for(int i = 0; i & modelP ++i)
*B.ptr&Point3d&(3*i) = to[i];
double *aptr = A.ptr&double&(3*i);
for(int k = 0; k & 3; ++k)
aptr[3] = 1.0;
*reinterpret_cast&Point3d*&(aptr) = from[i];
aptr += 16;
CvMat cvA = A;
CvMat cvB = B;
CvMat cvX;
cvReshape(model, &cvX, 1, 12);
cvSolve(&cvA, &cvB, &cvX, CV_SVD );
排名:千里之外
(9)(5)(38)(6)(5)(3)(8)(6)(17)(5)(8)(2)(5)(2)(1)(1)(2)(9)

我要回帖

更多关于 宏碁笔记本电脑怎么样 的文章

 

随机推荐