python实现SIFT和SURF并输出匹配点坐标

本文介绍了如何使用Python实现SIFT和SURF算法进行特征点匹配,并获取匹配点的坐标。该方法旨在将匹配点作为先验信息应用于计算机视觉任务中,特别是需要准确视差计算的场景。同时,作者思考了将大规模数据集中的这些信息整合到神经网络中可能面临的计算效率挑战。
摘要由CSDN通过智能技术生成

想法:想使用SIFT和SURF匹配的特征点来当做先验信息加入网络。
需求:需要极可靠的匹配点以及相应坐标以及计算视差
代码

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgname1 = 'path1'
imgname2 = 'path2'

MIN_MATCH_COUNT = 10 #设置最低特征点匹配数量为10
template = cv2.imread(imgname1,0) # queryImage
target = cv2.imread(imgname2,0) # trainImage
# Initiate SIFT and SIRF detector创建sift和surf检测器
surf = cv2.xfeatures2d.SURF_create()
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT or SURF
kp1, des1 = surf.detectAndCompute(template,None
  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要进行遥感影像同名匹配,可以使用OpenCV库中的SIFT算法SURF算法。以下是一个示例代码,其中使用SIFT算法进行匹配: ```python import cv2 import numpy as np # 读入两张遥感影像 img1 = cv2.imread('img1.tif', 0) img2 = cv2.imread('img2.tif', 0) # 初始化SIFT对象 sift = cv2.xfeatures2d.SIFT_create() # 检测关键和描述符 kp1, des1 = sift.detectAndCompute(img1, None) kp2, des2 = sift.detectAndCompute(img2, None) # 初始化暴力匹配器 bf = cv2.BFMatcher() # 进行匹配 matches = bf.knnMatch(des1, des2, k=2) # 储存所有匹配对 good = [] for m, n in matches: if m.distance < 0.75 * n.distance: good.append(m) # 输出匹配结果 img3 = cv2.drawMatches(img1, kp1, img2, kp2, good, None, flags=2) # 显示匹配结果 cv2.imshow('Matched Points', img3) cv2.waitKey(0) cv2.destroyAllWindows() ``` 要输出结果,可以用滑动窗口的方式截取匹配周围的区域,并将其保存为新的图片。以下是代码示例: ```python # 迭代输出所有匹配的周围小窗口图像 window_size = 50 for m in good: # 得到匹配坐标 img1_x, img1_y = kp1[m.queryIdx].pt img2_x, img2_y = kp2[m.trainIdx].pt # 在第一张图片中截取小窗口 x1, y1 = int(img1_x - window_size/2), int(img1_y - window_size/2) x2, y2 = int(img1_x + window_size/2), int(img1_y + window_size/2) img1_window = img1[y1:y2, x1:x2] # 在第二张图片中截取小窗口 x1, y1 = int(img2_x - window_size/2), int(img2_y - window_size/2) x2, y2 = int(img2_x + window_size/2), int(img2_y + window_size/2) img2_window = img2[y1:y2, x1:x2] # 储存小窗口图像 cv2.imwrite(f'match_{m.queryIdx}.tif', img1_window) cv2.imwrite(f'match_{m.trainIdx}.tif', img2_window) ``` 这样就可以输出所有匹配周围50x50大小的小窗口图像了。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值