使用 Matlab 的视觉函数重新建立新的特征点

     2023-02-21     299

关键词:

【中文标题】使用 Matlab 的视觉函数重新建立新的特征点【英文标题】:Re-establishing new feature points using Matlab's vision functions 【发布时间】:2014-12-09 05:04:35 【问题描述】:

我正在使用 Matlab 的内置视觉函数和预制示例代码来跟踪特征点。在我的示例视频中,相机水平平移,将新的物体和风景引入视野,而之前的物体和风景移出视野。

我的问题是在相机平移场景时尝试识别新特征点时出现的。我在 video-step while 循环中使用“detectMinEigenFeatures”函数,以便在经过指定数量的帧后找到新的特征点。但是,以某种方式这样做对重新建立新的特征点没有任何帮助。

一些快速信息:使用 GoPro 视频,采样到 720p 并保存为 .avi

代码发布在下面,我很乐意提供更多信息来帮助理解或解决这个问题。

谢谢!

clc;clear all;close all;

videoFileReader = vision.VideoFileReader('GoProFlyingMidFlightResized.avi');

videoFrame = step(videoFileReader);

%Create Video writer
TrackingVideo = VideoWriter('TrackingVideo.avi');

open(TrackingVideo);

% Detect feature points
points = detectMinEigenFeatures(rgb2gray(videoFrame),'MinQuality',0.04,'FilterSize',3);
% points = detectMinEigenFeatures(rgb2gray(videoFrame));

% Create a point tracker
pointTracker = vision.PointTracker('NumPyramidLevels',7,'MaxBidirectionalError', 8, 'MaxIterations',70,'BlockSize',[5 5]);

% Initialize the tracker with the initial point locations and the initial
% video frame.
points = points.Location;
initialize(pointTracker, points, videoFrame);

videoPlayer  = vision.VideoPlayer('Position',[100 100 [size(videoFrame, 2), size(videoFrame, 1)]+30]);

% Make a copy of the points for transformation between the consecutive feature points
oldPoints = points;
FrameCount=0; %For identifying that new feature points must be obtain

while ~isDone(videoFileReader)
    % get the next frame
    FrameCount=FrameCount+1;
    videoFrame = step(videoFileReader);

    if FrameCount==30  %If 30 frame have stepped though, find new feature points
        disp('help')
        points = detectMinEigenFeatures(rgb2gray(videoFrame),'MinQuality',0.04,'FilterSize',3);
        points = points.Location;
        FrameCount=0;
    end

    % Track the points.
    [points, isFound] = step(pointTracker, videoFrame);
    visiblePoints = points(isFound, :);
    oldInliers = oldPoints(isFound, :);

    if size(visiblePoints, 1) >= 2 % need at least 2 points

        % Estimate the geometric transformation between the old points
        % and the new points and eliminate outliers
        [xform, oldInliers, visiblePoints] = estimateGeometricTransform(oldInliers,   visiblePoints, 'similarity', 'MaxDistance', 10);

        % Display tracked points
        videoFrame = insertMarker(videoFrame, visiblePoints, '+','Color', 'red');

        % Reset the points
        oldPoints = visiblePoints;
        setPoints(pointTracker, oldPoints);
    end

    % Display video frame using the video player
    writeVideo(TrackingVideo,videoFrame);
    step(videoPlayer, videoFrame);
end

% Clean up
release(videoFileReader);
release(videoPlayer);
release(pointTracker);
close(TrackingVideo);

【问题讨论】:

【参考方案1】:

在 if 语句中检测新点:

    if FrameCount==30  %If 30 frame have stepped though, find new feature points
        disp('help')
        points = detectMinEigenFeatures(rgb2gray(videoFrame),'MinQuality',0.04,'FilterSize',3);
        points = points.Location;
        FrameCount=0;
    end

现在,在同一个 if 中,您必须告诉点跟踪器这些新点:

setPoints(tracker, points);

否则,您的变量 points 会被下一行覆盖:

[points, isFound] = step(pointTracker, videoFrame);

这就是为什么您永远看不到新检测到的点。

【讨论】:

感谢 Dima,这确实是问题所在。感谢您的帮助! 不客气。我很好奇,对于点跟踪器的'MaxBidirectionalError' 参数,8 是一个合理的值吗?你这样不会得到很多坏道吗? 确实我做到了,但这只是为了测试目的,让自己对这个特定视频的属性敏感度有一个很好的了解。我使用 2 进行实际测试。

orb描述子提取

ORBSLAM2中使用ORB描述子的方法   经典的视觉SLAM系统大体分为两种:其一是基于特征点法的,其二是基于直接法的。那么本文主要就讲特征点法的SLAM。  基于特征点法的视觉SLAM系统典型的有PTAM,ORBSLAM等。本文主要围绕OR... 查看详情

使用matlab机器视觉工具箱实现人脸特征的检测和定位,识别并标注眉毛,眼睛,鼻子,嘴巴(代码片段)

...算效率有强烈的感觉,那么你可以重写函数以提高效率,使用MATLAB编译器编译M-file,或者创建一个MEX版本;由于源代码是可用的,因此有利于理解和教学。2.仿真效果预览matlab2022 查看详情

特征检测和特征匹配方法

...我们可以认为就是这幅图像的特征,成为特征点。计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义和找出一幅图像中的特征点就非常重要。这篇文章我总结了视觉领域最常用的几种特征... 查看详情

视觉slam研究现状

...取特征点;2)根据特征点对不同图片进行匹配;3)根据视觉几何约束求出运动;4)通过最小化重投影误差优化结果。优点:1)可以在非常多的图片之间寻找到特征匹配。缺点:1)依赖特征点的效果,各个阈值需要很精巧地设... 查看详情

视觉里程计vo

视觉里程计的主要问题是如何根据图像来估计相机运动,VO的实现方法,按照是否需要提取特征,分为特征点法的前端以及不提取特征的直接法前端。基于特征点法的前端,长久以来被认为是视觉里程计的主流方法,它运行稳定... 查看详情

matlab中怎么定义结构体

1.使用直接引用方式定义结构与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x:x.real=0;%创建字段名为real,并为该字段赋值为0x.imag=0%为x创建一个新的字段imag... 查看详情

用于转换特征提取函数的 Matlab 编码器

】用于转换特征提取函数的Matlab编码器【英文标题】:Matlabcoderforconvertingfeatureextractionfunctions【发布时间】:2016-03-0704:40:04【问题描述】:目前我面临这个问题:我需要获取计算机视觉工具箱中存在的(extractHOGFeatures(x),extractLBPFeat... 查看详情

图像局部显著性—点特征

      基于古老的Marr视觉理论,视觉识别和场景重建的基础即第一阶段为局部显著性探测。探测到的主要特征为直觉上可刺激底层视觉的局部显著性——特征点、特征线、特征块。      ... 查看详情

计算机视觉局部图像描述子:sift算法

文章目录【计算机视觉】局部图像描述子:SIFT算法1.SIFT算法的原理1.1SIFT算法的目标与思想1.1.1算法目标1.1.2算法思想1.2尺度空间的思想和表示1.2.1尺度空间的思想1.2.2尺度空间的表示1.3高斯金字塔的构建1.4高斯差分金字塔和DOG... 查看详情

opencv探索之路(二十三):特征检测和特征匹配方法汇总(代码片段)

...我们可以认为就是这幅图像的特征,成为特征点。计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义和找出一幅图像中的特征点就非常重要。这篇文章我总结了视觉领域最常用的几种特征... 查看详情

opencv如何检测特定形状的物体

...#,Ch,Ruby的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。参考技术A你的思路可以,即将现有图像和样本图像的特征 查看详情

特征提取

...,才使得特征向量的识别性能越来越好。   在视觉SLAM中,特征主要还是用点特征。 >> 点特征主要分为两大类:1.基于手工设计的特征点:这类特征点主要是凭借人们对几何学以及数学上的一些认识,对图... 查看详情

如何在swift中使用视觉框架从其特征点中提取外唇

】如何在swift中使用视觉框架从其特征点中提取外唇【英文标题】:Howtoextractouterlipsfromitsfeaturepointusingvisionframeworkinswift【发布时间】:2020-03-1516:41:06【问题描述】:我实现了addFaceLandmarksToImage函数来裁剪图像的外唇。addFaceLandmarks... 查看详情

神经网络基础

...率返回前k个点出现频率最高的类别作为当前点预测分类使用k近邻会使得背景相同的分为同类,并不适合9-得 查看详情

离线使用数据库,然后在与 iPhone 建立新连接时更新

】离线使用数据库,然后在与iPhone建立新连接时更新【英文标题】:Usingdatabaseoffline,thenupdatingwhennewconnectionestablishedwithiPhone【发布时间】:2016-08-2311:03:05【问题描述】:我被要求让我的应用程序离线可用,这意味着存储通过Api收... 查看详情

matlab中的eig函数和eigs函数的异同点(代码片段)

Matlab中的eig()函数和eigs()函数的异同点1、相同点   都可以求解矩阵的特征值和特征向量2、不同点   eig函数主要是给出矩阵的特征值和特征向量   eigs函数主要是通过迭代法来求解矩阵特征... 查看详情

国科大人工智能学院《计算机视觉》课—底层视觉—特征点提取描述与匹配

一、二维图像变换图像变换:值域(亮度、对比度)、自变量域(几何:缩放、平移、旋转)什么类型的变换能表示为2×2矩阵(线性变换)?尺度缩放、旋转可以。平移不能写成2×2矩阵。为了... 查看详情

如何在 MATLAB 中使用 pca 函数来选择有效的特征? [复制]

】如何在MATLAB中使用pca函数来选择有效的特征?[复制]【英文标题】:HowtousepcafunctioninMATLABtoselecteffectivefeatures?[duplicate]【发布时间】:2019-09-1710:48:15【问题描述】:我是pca的新手,经过一些研究,我发现使用pca算法我们可以选择... 查看详情