DIA实验——匹配几何校验

该博客介绍了如何进行匹配几何校验,利用SIFT特征和距离阈值确定图像间的匹配关系。实验步骤包括寻找匹配对、生成空间映射、计算不一致性矩阵,最终识别并消除几何不一致的匹配。实验结果显示了蓝色和红色标记的几何一致与不一致匹配。
摘要由CSDN通过智能技术生成

匹配几何校验

一、 任务描述

  1. 给定一对图像,利用提取好的SIFT特征文件,根据距离阈值准则(跨图像的局部SIFT特征距离小于0.4),得到图像间的初始局部特征匹配关系;
  2. 基于上述初步匹配结果,实现spatial coding方法,进行匹配校验,确定几何不一致的匹配;
  3. 将几何一致的匹配和不一致的匹配在图像上画出来,分别用蓝色和红色进行区分。

二、 实验步骤

  1. 寻找匹配对:寻找并提取第1张图与第2张图的SIFT描述子匹配对的(x,y)坐标点集,分别放进维数为(2*对应点数)的矩阵Map1,Map2中。
  2. 生成空间映射:根据Map1,Map2每个点相对其他点坐标的左右上下位置关系,以及k种(本实验中取k=4)旋转角度,生成由0、1构成的维数为(对应点数对应点数k)的空间编码矩阵GX1,GY1,GX2,GY2中。
  3. 计算不一致性矩阵:将空间编码矩阵GX1与GX2,GY1与GY2进行逻辑异或操作得到不一致性矩阵Vx,Vy。
  4. 计算不一致性总和Sx,Sy: 矩阵Vx,Vy各行元素求和,再对k个方向各行元素和求总和,得到Sx,Sy,维数为(匹配点数*1)
  5. 检查Sx,Sy,识别错误匹配项:首先基于Vx,计算Sx,找到对应的i*, 然后从Vx和Vy中把对应的第i行、第i列全部删掉(或者mask掉,本实验中以置零方式进行mask),随后立即更新红蓝连线;然后基于更新后的Vy,计算Sy,找到对应的j*, 然后从Vx和Vy中把对应的第j行、第j列全部删掉(或者mask掉,本实验中以置零方式进行mask),随后立即更新红蓝连线。 对更新后的Vx和Vy重复上面两步,直到收敛(本实验取不一致性总和的阈值为(0.8*匹配对数)取整)。

三、 实验效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、 实验代码

其中本实验对图像特征描述子的读取通过已准备好的“.sift”文件直接读进matlab中,也可以自己在matlab中读取“.jpg”图片后转为SIFT格式的描述子数据,matlab代码如下:

%% Set path and parameters
clear;
close all;
clc;

src_1 = './test images/37967br1.jpg';  
src_2 = './test images/791.jpg';

% src_1 = './test images/4.jpg';  
% src_2 = './test images/Apollo-266.jpg';

% src_1 = './test images/771.jpg';  
% src_2 = './test images/305.jpg';

% src_1 = './test images/Apollo-49.jpg';
% src_2 = './test images/Apollo-266.jpg';

ext = '.sift'; % extension name of SIFT file
siftDim = 128;
maxAxis = 400;


%%  Load image
im_1 = imread(src_1);
if max(size(im_1)) > maxAxis
    im_1 = imresize(im_1, maxAxis / max(size(im_1)));
end

im_2 = imread(src_2);
if max(size(im_2)) > maxAxis
    im_2 = imresize(im_2, maxAxis / max(size(im_2)));
end


%%  Load SIFT feature from file
featPath_1 = [src_1, ext];
featPath_2 = [src_2, ext];

fid_1 = fopen(featPath_1, 'rb');
featNum_1 = fread(fid_1, 1, 'int32');
SiftFeat_1 = zeros(siftDim, featNum_1);
paraFeat_1 = zeros(4, featNum_1);
for i = 1 : featNum_1
    SiftFeat_1(:, i) = fread(fid_1, siftDim, 'uchar');
    paraFeat_1(:, i) = fread(fid_1, 4, 'float32');
end
fclose(fid_1);

fid_2 = fopen(featPath_2, 'rb');
featNum_2 = fread(fid_2, 1, 'int32');
SiftFeat_2 = zeros(siftDim, featNum_2);
paraFeat_2 = zeros(4, featNum_2);
for i = 1 : featNum_2
    SiftFeat_2(:, i) = fread(fid_2, siftDim, 'uchar');
    paraFeat_2(:, i) = 
NI Vision Builder for Automated Inspection (NI Vision Builder for AI)2011年8月最新释放的软件系统。National Instruments视觉软件产品具有机器视觉应用的众多优势。若您的机器视觉应用需要强大的程序库,视觉开发模块可为您缩短的开发周期,节省您的时间和金钱。 IEEE 1394接口的NI-IMAQ是一个驱动软件,可用于从火线(Firewire)接口相机采集图像并将其应用到LabVIEW、LabWindows/CVI或Measurement Studio程序中。 现在,有了National Instruments (简称NI) 公司的Vision Builder for Automated Inspection软件,生产测试工程师们只需一个独立的软件方案就能够建立完整的机器视觉应用系统,并拥有一个能将图像采集、机器视觉检测、决策判断及I/O控制同时集成到生产测试应用系统中的开发环境。   "NI Vision Builder for Automated Inspection软件使机器视觉系统的开发变得前所未有的简单,"National Instruments 的视觉与测量平台部门经理John Hanks说,"现在,工程们可以互动地创建机器视觉系统,并且轻松地用内置数字I/O和串口功能控制各种不同的自动化设备。"   有了这个简单易用的软件,从未有过编程经验的工程师们也可以使用直观的检测工具创建机器视觉应用程序,与图像进行直接的交流。现在,工程师们能够轻松、快捷地建立生产线上的应用方案了,例如生产线上的部品检测和质量监控等。NI Vision Builder for Automated Inspection还是一个交互式的图像处理和分析环境,带有高级决策判断功能、支持输入/输出。内置的I/O功能让用户能够轻易地控制串口线和静态数字I/O模块,或与诸如阀门、摄像头与PLC等一系列外部设备连接。这一新软件还具有高级的决策判断和数据记录功能,使得工程师们可以指定存储符合预置条件的图像和检测数据。   此外,LabVIEW代码生成功能给工程师们提供了编程的灵活性与自主性。尽管NI Vision Builder For Automated Inspection运行不需要额外的软件,但是如果将其代码生成功能与LabVIEW结合使用,工程师们将越加能够充分利用虚拟仪器平台的强大功能。当开发视觉应用系统时,工程师们可以用LabVIEW设计用户界面,并将机器视觉系统与运动控制和数据采集(DAQ)集成使用。为了满足那些需要使用光学字符识别(OCR)功能的工程师的要求,NI Vision Builder for Automated Inspection提供一个有学习能力的高速OCR引擎,藉此用户可以"教会"他们的程序读取标在胶片、玻璃和电子元件或医疗设备上的序列号或识别码。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值