RANSAC

Python实现图像全景拼接

目标:将数张有重叠部分的图像通过特征点检测,匹配,图像变换拼成一幅无缝的全景图或高分辨率图像 在图像拼接中首先利用SIFT算法提取图像特征进而进行特征匹配,继而使用RANSAC算法对特征匹配的结果进行优化,接着利用图像变换结构进行图像映射,最终进行图像融合。 在图像拼接过程中,运用SIFT局部描述算子检测图像中的关键点和特征,SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高,所以用来检测要拼接图像的特征及关键点就很有优势。而接下来即步骤三是找到重叠的图片部分,连接所有图片之后就可以形成一个基本的全景图了。匹配图片最常用的方式是采用RANSAC(RANdom SAmple Consensus, 随机抽样一致),用此排除掉不符合大部分几何变换的匹配。之后利用这些匹配的点来估算单应矩阵”(Homography Estimation),也就是将其中一张图像通过关联性和另一张匹配。 使用的算法: RANSAC SIFT 1. 利用SIFT方法检测特征点 def detectAndDescribe(image): # 将彩色图片转换成灰度图 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 建立SIFT生成器 descriptor = cv2.xfeatures2d.SIFT_create() # 检测SIFT特征点,并计算描述子 (kps, features) = descriptor.

图像分割(Segmentation)——K-Means, 最小割, 归一化图割

图像分割是将图片将相似的部分分割成相同的块 Gestalt理论 解释物体分割的底层原理 将同一个东西群组在一起,集合中的元素可以具有由关系产生的属性 Gestalt中常见的一些分组的情况 现实生活中的分组现象 将这种思想转化为算法 K-Means聚类 主要思想:相似的像素应该属于同一类 像素表达:每个像素可以使用一个多维向量来表示,如(R, G, B)的三维向量,(R, G, B, x, y)的五维向量 K-Means算法: “物以类聚、人以群分”: 首先输入k的值,即我们希望将数据集经过聚类得到k个分组。 从数据集中随机选择k个数据点作为初始大哥(质心,Centroid) 对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。 这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通>过算法选出新的质心)。

拟合(Fitting)

提取完边缘后如何使用数学模型来描述边缘? 例如:在桌子上有几枚硬币,在经过边缘提取后,需要描述出硬币的圆心坐标和圆的大小 难点 噪声:噪声的存在使拟合的模型偏离真实的线 外点:在目标图形以外的线,如上图中的目标图形为“车”,左边的“栅栏”就是外点 目标图形部分被遮挡,使部分图形消失 最小二乘(Least Square) 针对点都在线上的一些简单模型 最小二乘 能量函数$E$描述的是所有的点与拟合的线在$y$方向上的差值的和,最后的目标是求出差值最小时的$(m,b)$即矩阵$B$作为这个模型的解 权最小二乘 当拟合的直线是平行$y$轴时就无法按照上面的公式计算$E$(最小二乘对旋转没有效果) 权最小二乘将点在$y$方向的距离改为对直线距离的平方,就可以避免旋转产生的问题 ,它的几何描述就是所有的向量$(x_i-\bar x,y_i-\bar y)$在向量$(a,b)$的投影的值最小 极大似然估计 使用概率分布的思想来理解权最小二乘,概率越大拟合效果越好,极大似然估计,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值,它提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。 如果通过极大似然估计,得到模型中参数$\mu$和$\sigma$的值,那么这个模型的均值和方差以及其它所有的信息我们就知道了。