基础矩阵和单应矩阵估计实验

1、实验任务

  • 根据归一化八点法求取基本矩阵

  • 根据四点法求取单应矩阵

2、数据集

以 images 文件夹里的 DSC_0480.JPGDSC_0481.JPG 两幅图片为例,这两张图像是用透视摄影机拍摄的不同视角下的两张视点图像。

3、实验代码解析

首先导入软件包。

#numoy是用于处理数组、矩阵等数据格式的库
import numpy as np
#Opencv是用来处理图像处理和计算机视觉任务的库
import cv2
#random是用于生成随机数的库
import random
#os是用于与计算机系统交互的库,如文件、路径操作
import os
#exifread是用于提取图像文件EXIF信息的库,EXIF信息是指图像拍摄设备和条件等信息的,如相机型号、光圈大小、拍摄时间等,用手机和数码相机拍照时都会将这些信息嵌入到图片文件的EXIF标签中,对图像处理和计算机视觉任务中后期修正、分析和处理图片有用
import exifread

sift特征点提取

#定义了一个名为FeatureProcess的类,用于提取sift特征点
class FeatureProcess:
    #构造函数__init__,用于构造类FeatureProcess,其接受的参数image是一个numpy数组,代表着一张RGB图像
    def __init__(self, image):
        #为类FeatureProcess的实例对象创造一系列的属性
        #第一个属性image是用来存储原始RGB图像的numpy数组的
        self.image = image
        #第二个属性gray是用来存储原始RGB图像的灰度图的numpy数组的,其中利用cv2.cvtColor将原始图像转为灰度图
        self.gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
        #第三个属性keypoints用于存储提取的sift特征点
        self.keypoints = None
        #第四个属性descriptors用于存储提取的sift特征点的描述符,所谓的描述符就是sift特征点的数量化描述的向量或者是矩阵
        self.descriptors = None

	#定义了类FeatureProcess中名为extract_features的方法,该方法用于提取sift特征点
    def extract_features(self):
        #利用cv2.SIFT_create()创建一个sift特征点对象
        sift = cv2.SIFT_create()
        #调用sift对象的detectAndCompute方法提取灰度图中的sift特征点以及描述符
        keypoints, descriptors = sift.detectAndCompute(self.gray, None)
		#如果特征点的个数小于20,则返回空,否则返回提取的特征点,以及它的描述符
        if len(keypoints) <= 20:
            return None, None
        else:
            self.keypoints = keypoints
            self.descriptors = descriptors
            return keypoints, descriptors

图像文件EXIF信息提取,主要用于计算相机的内参矩阵

#定义了一个名为PhotoExifInfo的类,用于提取图像文件EXIF信息
class PhotoExifInfo:
    #类PhotoExifInfo的构造函数,接受的参数photo_path是指定图片文件的路径
    def __init__(self, photo_path):
        #定义了类PhotoExifInfo实例对象的一系列属性
        #第一个属性是photo_path,用于存储指定图像文件的路径
        self.photo_path = photo_path
        #第二个属性是focal_length,用于存储指定相机的焦距
        self.focal_length = None
        #第三个属性是image_width,用于存储图像文件的宽度
        self.image_width = None
        #第四个属性是image_length,用于存储图像文件的长度
        self.image_length = None
        #第五个属性是sensor_pixel_size,用于存储传感器像素的大小
        self.sensor_pixel_size = None
	
	#定义类PhotoExifInfo的实例对象的方法 get_tags,用于获取指定图像文件的EXIF信息
    def get_tags(self):
    	#获取指定路径下的图像文件,存于image_content中
        image_content = open(self.photo_path, 'rb')
        #利用exifread.process_file从image_content中提取图像的EXIF信息
        tags = exifread.process_file(image_content)
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值