计算机视觉:利用RANSAC算法优化关键点匹配

这篇具有很好参考价值的文章主要介绍了计算机视觉:利用RANSAC算法优化关键点匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

计算机视觉:利用RANSAC算法优化关键点匹配

1.ransac算法的简述

随机抽样一致算法(RANdom SAmple Consensus,RANSAC),采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。RANSAC算法被广泛应用在计算机视觉领域和数学领域,例如直线拟合、平面拟合、计算图像或点云间的变换矩阵、计算基础矩阵等方面。
    RANSAC算法假设数据中包含正确数据和异常数据(或称为噪声)。正确数据记为局内点(inliers),异常数据记为外点(outliers),也是异常值。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。该算法核心思想就是随机性和假设性,随机性是根据正确数据出现概率去随机选取抽样数据,根据大数定律,随机性模拟可以近似得到正确结果。假设性是假设选取出的抽样数据都是正确数据,然后用这些正确数据通过问题满足的模型,去计算其他点,然后对这次结果进行一个评分。

2.ransac流程

RANSAC算法的输入是一组观测数据(往往含有较大的噪声或无效点),一个用于解释观测数据的参数化模型以及一些可信的参数。假设观测数据中包含局内点和局外点,其中局内点近似的被直线所通过,而局外点远离于直线。简单的最小二乘法不能找适应于局内点的直线,原因是最小二乘法尽量去适应包括局外点在内的所有点,相反,RANSA能得出一个仅仅用局内点计算出模型,并且概率还足够高,但是不能保证结果一定正确。
    RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:①有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。②用上步得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。③如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。④然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。⑤最后,通过估计局内点与模型的错误率来评估模型。
上述过程被重复执行固定的迭代次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。
    RANSAC算法在消除图像误匹配中是寻找一个最佳单应性矩阵H,RANSAC算法从匹配数据集中随机抽出4个样本并保证这四个样本之间不共线。然后利用这个模型测试所有数据,并计算满足这个模型数据点的个数与投影误差(即代价函数)若此模型为最优模型。

3.利用RANSAC算法优化关键点匹配的实现

处理前图像:
ransac配准,计算机视觉,算法,计算机视觉,人工智能

ransac配准,计算机视觉,算法,计算机视觉,人工智能

1)基于SIFT特征匹配的图像拼接

import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image
import os
from pylab import *
# 加载图像
img_left = cv2.imread('F:\work\CV\ExmCode\ex3\img01.jpg')
img_right = cv2.imread('F:\work\CV\ExmCode\ex3\img02.jpg')

# 将图像转为灰度图
gray_left = cv2.cvtColor(img_left, cv2.COLOR_BGR2GRAY)
gray_right = cv2.cvtColor(img_right, cv2.COLOR_BGR2GRAY)

# 创建SIFT对象
sift = cv2.SIFT_create()

# 在图像中找到关键点和描述符
kp_left, des_left = sift.detectAndCompute(gray_left, None)
kp_right, des_right = sift.detectAndCompute(gray_right, None)

# 创建BFMatcher对象
bf = cv2.BFMatcher()

# 使用KNN匹配
matches = bf.knnMatch(des_left, des_right, k=2)

# 根据Lowe's ratio test筛选匹配点
good_matches = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        good_matches.append(m)

# 获取匹配点的坐标
pts_left = np.float32([kp_left[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
pts_right = np.float32([kp_right[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)

# 利用匹配点进行透视变换
M, _ = cv2.findHomography(pts_right, pts_left, cv2.RANSAC, 5.0)

# 对右侧图像进行透视变换
result = cv2.warpPerspective(img_right, M, (img_left.shape[1] + img_right.shape[1], img_left.shape[0]))

# 拼接图像
result[0:img_left.shape[0], 0:img_left.shape[1]] = img_left

# 显示结果
print(result.shape)
figure()
imshow(result)
show()
cv2.waitKey()

cv2.destroyAllWindows()

ransac配准,计算机视觉,算法,计算机视觉,人工智能

2)利用RANSAC算法优化关键点匹配的图像拼接

唯一不同的是在利用cv2.findHomography()函数计算变换矩阵时,添加了cv2.RANSAC参数以启用RANSAC算法进行优化

import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image
import os
from pylab import *


# 读取待拼接的两张图像
img1 = cv2.imread('F:\work\CV\ExmCode\ex3\img01.jpg')
img2 = cv2.imread('F:\work\CV\ExmCode\ex3\img02.jpg')
# SIFT特征点检测器
sift = cv2.SIFT_create()

# 检测关键点并计算描述符
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)

# 特征点匹配器
matcher = cv2.BFMatcher()

# KNN匹配结果
knn_matches = matcher.knnMatch(des1, des2, k=2)

# 过滤不满足条件的匹配
good_matches = []
for m, n in knn_matches:
    if m.distance < 0.5 * n.distance:
        good_matches.append(m)

# 获取匹配关键点的坐标
src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)

# 利用RANSAC算法优化关键点匹配
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)

# 获取第一张图像的高度和宽度
h1, w1 = img1.shape[:2]

# 将第二张图像进行透视变换,得到配准后的图像
aligned_img = cv2.warpPerspective(img2, M, (w1 + w1, h1))

# 将两张图像进行拼接
aligned_img[:h1, :w1] = img1

# 显示拼接结果
print(aligned_img.shape)
figure()
imshow(aligned_img)
show()

ransac配准,计算机视觉,算法,计算机视觉,人工智能

总结:这里单对这两张图片的优化前的拼接结果与优化后的拼接结果对比。可以看出,使用RANSAC算法优化关键点匹配后,拼接效果视觉上变差了,这个实验结果受实验数据影响比较大,下图是优化前后的匹配点对比,可见原因是过滤不满足条件的匹配点过多,导致匹配点变得很少。

ransac配准,计算机视觉,算法,计算机视觉,人工智能

ransac配准,计算机视觉,算法,计算机视觉,人工智能文章来源地址https://www.toymoban.com/news/detail-737376.html

到了这里,关于计算机视觉:利用RANSAC算法优化关键点匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用C++进行图像处理与计算机视觉

    在C++中进行图像处理与计算机视觉是一个有趣且具有挑战性的任务。C++是一种高效的编程语言,能够提供足够的灵活性和性能,以处理复杂的图像处理和计算机视觉算法。在本文中,我们将介绍如何使用C++进行图像处理和计算机视觉,以及一些常见的技术和库。 图像处理基础

    2024年01月16日
    浏览(42)
  • 计算机视觉--利用HSV和YIQ颜色空间处理图像噪声

    前言: Hello大家好,我是Dream。 今天我们将 利用HSV和YIQ颜色空间处理图像噪声 。在本次实验中,我们使用任意一张图片,通过 RGB转HSV和YIQ 的操作,加入了 椒盐噪声 并将其转 换回RGB 格式,最终实现对 图像的噪声处理 。一起来看看吧~ 首先,我们导入需要的库。包括numpy用

    2024年02月15日
    浏览(60)
  • 模型剪枝:如何利用剪枝技术提高计算机视觉模型的准确性

    作者:禅与计算机程序设计艺术 模型剪枝(pruning)是一种技术,它通过删除不重要的权重参数,从而减少神经网络中的参数数量,并保持其准确率,同时降低计算量、占用内存空间。这个过程称之为模型压缩(compression)。 模型剪枝的目的是为了改善神经网络在实际环境下

    2024年02月07日
    浏览(35)
  • 【计算机视觉】如何利用 CLIP 做简单的人脸任务?(含源代码)

    CELEBA 数据集( CelebFaces Attributes Dataset )是一个大规模的人脸图像数据集,旨在用于训练和评估人脸相关的计算机视觉模型。该数据集由众多名人的脸部图像组成,提供了丰富的人脸属性标注信息。 以下是 CELEBA 数据集的一些详细信息: 规模: CELEBA 数据集包含超过 20 万张名

    2024年02月04日
    浏览(44)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型,本文将介绍如何使用主成分分析(PCA)实现简易的人脸识别模型。首先,我们将简要介绍PCA的原理及其在人脸识别中的应用。接着,我们将通过实例演示如何使用Python实现

    2024年02月03日
    浏览(34)
  • 【计算机视觉】如何利用 CLIP 做简单的图像分类任务?(含源代码)

    要使用 CLIP 模型进行预测,您可以按照以下步骤进行操作: 安装依赖:首先,您需要安装相应的依赖项。您可以使用 Python 包管理器(如 pip )安装 OpenAI 的 CLIP 库。 导入所需的库,包括 clip (用于加载和使用 CLIP 模型)、 torch ( PyTorch 框架)和 PIL (用于图像处理)。 设置

    2024年02月16日
    浏览(39)
  • 图像处理与计算机视觉算法

    图像处理与计算机视觉算法是实现对图像和视频内容分析、理解和操作的一系列技术。这些算法可以分为多个类别,包括但不限于以下几个主要方面: 预处理 : 像素操作:灰度化、二值化、直方图均衡化等,用于改善图像的对比度和亮度分布。 去噪:高斯滤波、中值滤波、

    2024年02月22日
    浏览(47)
  • 计算机视觉的应用7-利用YOLOv5模型启动电脑摄像头进行目标检测

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用7-利用YOLOv5模型启动电脑摄像头进行目标检测,本文将详细介绍YOLOv5模型的原理,YOLOv5模型的结构,并展示如何利用电脑摄像头进行目标检测。文章将提供样例代码,以帮助读者更好地理解和实践YOLOv5模型。 目录 引

    2024年02月10日
    浏览(49)
  • 计算机视觉&多模态算法实习面试记录

    一面(12.20) 自我介绍:第一次面有点瓢嘴 介绍科研项目 如何使用的CLIP Open-vocab和zero-shot 介绍比赛项目——多模态行车数据视频 介绍任务是什么 自定义数据集? Yolo v8 介绍CLIP: 对比学习训练:一个batch的N张图片和文本进行对比;首先分别进行编码-再投影到相同特征维度

    2024年03月25日
    浏览(46)
  • 计算机视觉--距离变换算法的实战应用

    前言: Hello大家好,我是Dream。 计算机视觉CV是人工智能一个非常重要的领域 。 在本次的距离变换任务中,我们将使用 D4距离度量方法 来对图像进行处理。通过这次实验,我们可以更好地理解距离度量在计算机视觉中的应用。希望大家对计算机视觉和图像处理有了更深入的

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包