首页 > 编程知识 正文

erdas拼接图像黑边解决方法,拼接

时间:2023-05-06 15:27:22 阅读:143597 作者:4317

我最近在做视频的实时拼接。 然后,一步一步,先进行图像拼接,然后简要总结了图像拼接的一般步骤。

1.特征点提取

主要算法: FAST、ORB、SURF、SIFT等算法。

SURF受SIFT的启发,比SIFT快,健壮性好

ORB基于FAST特征点和BREIF特征描述符,比SURF快10倍左右,比SIFT快100倍左右,综合效果最好。

FAST主要进行角点检测,速度最快,但进行特征描述和计算特征向量需要采用SURF或ORB方法。

主要通过以下两个小步骤完成特征点提取的工作。

1).特征点描述,计算特征向量

//提取特征点的int minHessian=700; //阈值ptrsurfdetector=surf :3360 create (min hessian ); vectorKeyPoint keyPoint1、keyPoint2; 检测器-检测(image1,keyPoint1); 检测器-检测(image2,keyPoint2); //特征点描述、ptrsurfextractor=surf : create (; Mat descriptors1、descriptors2; extractor-compute (图像1,密钥点1,描述1 ); 扩展计算(image2,keyPoint2,descriptors2); http://www.Sina.com/http://www.Sina.com /

Opencv有两种匹配方法: BFMatcher和FlannBasedMatcher。

不同的是,BFMatcher总是尝试所有可能的匹配,它总是能找到最佳的匹配,而FlannBasedMatcher算法更快,但找到了最接近的相似匹配,所以我们

BFMatcher有match,knnMatch

FlannBasedMatcher包括match、knnMatch和radiusMatch

FlannBasedMatcher matcher; vectorvectorDMatch matchePoints; vectorDMatch GoodMatchePoints; vectormattrain_desc(1,descriptors1); Matcher.add(train_desc; matcher.train (; Matcher.KNNmatch(descriptors2,matchePoints,2 ); 然后,剔除筛选出的匹配点,获得优良的匹配点

//Lowe's algorithm,获取优秀的匹配点for (inti=0; i matchePoints.size (; I ) (/过滤条件,即匹配点距离if (matche points [ I ] [0].distance 0.4 * matche points [ I ] [1].distance ) goodmation for(intI=0; iGoodMatchePoints.size (; I ) image points2. push _ back (key point2[ goodmatchepoints [ I ].queryidx ].pt ); image points1. push _ back (key point1[ goodmatchepoints [ I ].train idx ].pt ); } 2).特征匹配

Findhomography ()单应矩阵: method (ran sac/0/l meds/rho ) ) ) ) )。

findFundamentalMat ()基础矩阵: method (cv _ FM _7point/cv _ FM _8point/cv _ ran sac/cv _ FM _ l meds ) )

通过对一组图像数据集中的两幅图像,寻找一个空间变换将一幅图像映射到另一幅图像上,使两幅图中空间相同位置对应的点一一对应,达到信息融合的目的

//从图像1获取图像2投影映射矩阵大小为3 *3mat homo=findhomography (image points 1,imagePoints2,CV_RANSAC ); 也可以使用getPerspectiveTransform方法获取透视变换矩阵,但需要只有四个点,效果稍差///mat homo=getperspectivetransform (image cout '变换矩阵是n' homo endl endl; //输出映射矩阵calccorners(homo,newright,corners2); //图像配准//warpPerspective函数对图像进行透视变换。 变形Mat imageTransform1、imageTransform2; WARPperspective(newright,imageTransform1,homo,size ) max(Corners2.right_top.x,corners2.right_bottom.x ) imshow('warp ',imageTransform1);(FlannBasedMatcher/knnMatch)

image transform1. copy to (rect (0,0,imageTransform1.cols,imageTransform1.rows ) ) new left.copy to (dst )

//优化图像融合边界函数优化(new left,imageTransform1,dst ); 总体来说,图像拼接的基本步骤是这样的。 完成这几步就完成了图像的一般拼接工作。 如果大家需要用图形拼接样本代码,也可以评论。 看到后给大家发代码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。