计算机视觉 实验五 用SIFT算法和暴力匹配器拼接图像

本文介绍了使用SIFT算法提取关键点和特征向量,结合暴力匹配器寻找匹配点进行图像拼接的过程。在实验中,通过detectAndCompute()获取关键点和描述符,使用暴力匹配器的knnMatch()找到最佳匹配,设定距离比值阈值筛选匹配点。当匹配点数量满足条件时,生成视角变换矩阵,实现图像拼接。实验结果显示了关键点匹配和最终的图像拼接效果,可用于解决场景图像拼接问题。过程中遇到SIFT算法无法使用的问题,通过调整opencv库版本得以解决。
摘要由CSDN通过智能技术生成

实验原理

  • SIFT算法:提取不容易受光照尺度等因素影响的关键点,并确定特征方向。通过关键点的特征向量,对关键点进行比较找出相互匹配的特征点,建立图像上物体的对应关系。
  • 暴力匹配器:在第一幅图像选取一个特征点,然后依次与第二个图像中的特征点进行距离测试,最后返回距离最近的特征点。

实验过程

首先用detectAndCompute ()求出图像的关键点和描述符
在这里插入图片描述
创建暴力匹配器
在这里插入图片描述
用Matcher.knnMatch()获得两幅图像的K个最佳匹配,此时K=2
在这里插入图片描述
当匹配中的每一组匹配对距离比值小于0.75时,将该匹配对加入数组matches中。
在这里插入图片描述
当matches中元素超过四个时,生成视角变换矩阵,否则返回none
在这里插入图片描述
将两张图片的关键点进行可视化连接
在这里插入图片描述
将img1进行视角变换,并把img2插入到result图片最左端。
在这里插入图片描述

附完整代码

# -*- coding: utf-8 -*-
"""
Created on Sat Nov 14 15:14:13 2020

@author: 张若昀的对象
"""
import cv2
import numpy as np
## 输入拼接的图片
image1 = cv2.imread("left_01.png")
image2 = cv2.imread("right_01.png")

def stitch( images, ratio = 0.75, reprojThresh = 4.0, showMatches = False):
    #获取输入图片
    (image2, image1) = images
    #检测image1,image2图片的SIFT关键特征点,并计算特征描述子
    (keypoint1, features1) = detectAndDescribe(image1)
    (keypoint2, features2) = detectAndDescribe(image2)
    
    #匹配两张图片的所有特征点,并返回匹配结果
    M = matchKeypoints(keypoint1, keypoint2, features1, features2, ratio, reprojThresh)
    
    #如果返回的结果为空,就是没有匹配成功的点,退出算法
    if M is None:
        return None
    
    #当结果不为空时,提取匹配结果
    #H是3*3的视觉变换矩阵
    (matches
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拔牙不打麻药

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值