Main Content

특징 매칭

이 예제에서는 MATLAB® 코드에서 CUDA® MEX를 생성하고 두 영상 간에 특징 매칭을 수행하는 방법을 보여줍니다. 이 예제에서는 Image Processing Toolbox™의 matchFeatures (Computer Vision Toolbox) 함수를 사용하여 서로에 대해 회전되고 스케일링된 두 영상 간의 특징 설명자를 매칭합니다. 두 영상의 특징 설명자는 SURF(Speeded-Up Robust Features) 알고리즘을 사용하여 검출 및 추출됩니다.

타사 선행 조건

필수

이 예제는 CUDA MEX를 생성하며, 다음과 같은 타사 요구 사항이 있습니다.

  • CUDA 지원 NVIDIA® GPU 및 호환되는 드라이버.

선택 사항

정적, 동적 라이브러리 또는 실행 파일과 같은 비 MEX 빌드의 경우, 이 예제에는 다음과 같은 추가 요구 사항이 있습니다.

GPU 환경 확인하기

coder.checkGpuInstall 함수를 사용하여 이 예제를 실행하는 데 필요한 컴파일러와 라이브러리가 올바르게 설치되었는지 확인합니다.

envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);

특징 검출 및 추출

이 예제에서는 서로에 대해 회전되고 스케일링된 두 영상에 대해 특징 매칭을 수행합니다. 두 영상을 매칭하려면 먼저 각 영상의 특징점을 검출하고 추출해야 합니다. 다음 featureDetectionAndExtraction 함수는 SURF(detectSURFFeatures (Computer Vision Toolbox)) 국소 특징 검출기를 사용하여 특징점을 검출하고 extractFeatures (Computer Vision Toolbox)를 사용하여 특징을 추출합니다.

함수 featureDetectionAndExtraction은 참조 영상의 특징 좌표를 포함하는 refPoints, 쿼리 영상의 특징 좌표를 포함하는 qryPoints, 참조 영상 특징 설명자를 포함하는 refDesc 행렬 및 쿼리 영상 특징 설명자를 포함하는 qryDesc 행렬을 반환합니다.

  • refPoints = 참조 영상 특징 좌표.

  • qryPoints = 쿼리 영상 특징 좌표.

  • refDescFeat = 참조 영상 특징 설명자.

  • qryDescFeat = 쿼리 영상 특징 설명자.

K = imread('cameraman.tif'); 
refImage = imresize(K,3);
scale = 0.7;                  
J = imresize(refImage,scale);
theta = 30.0;                 
qryImage = imrotate(J,theta); 
[refPoints,refDescFeat,qryPoints,qryDescFeat] = featureDetectionAndExtraction(refImage,...
    qryImage);

feature_matching 진입점 함수

feature_matching 함수는 두 영상에서 추출한 특징점과 특징 설명자를 가져와서 두 영상 간에 매칭되는 특징을 찾습니다.

type feature_matching
function [matchedRefPoints,matchedQryPoints] = feature_matching(refPoints,...
    refDesc,qryPoints,qryDesc) 
%#codegen
% Copyright 2018-2021 The MathWorks, Inc.

coder.gpu.kernelfun;
%% Feature Matching
[indexPairs,matchMetric] = matchFeatures(refDesc, qryDesc);
matchedRefPoints = refPoints(indexPairs(:,1),:);
matchedQryPoints = qryPoints(indexPairs(:,2),:);

특징 매칭 코드 생성

이 예제는 호스트 시스템에서 실행되므로 디폴트 파라미터를 사용하여 MEX 호출 구성 객체를 만듭니다. 생성 코드에 런타임 오류가 있는 경우 MATLAB이 비정상적으로 종료되는 것을 방지하기 위해 안전한 빌드 옵션을 선택합니다.

cfg = coder.gpuConfig;
cfg.GpuConfig.SafeBuild = 1;
inputs = {refPoints,refDescFeat,qryPoints,qryDescFeat};
codegen -config cfg -args inputs feature_matching
Code generation successful.
[matchedRefPoints_gpu,matchedQryPoints_gpu] = feature_matching_mex(refPoints,...
    refDescFeat,qryPoints,qryDescFeat);

특징 매칭 표시하기

figure;
showMatchedFeatures(refImage, qryImage, matchedRefPoints_gpu, matchedQryPoints_gpu);
title('Putatively Matched Points (Including Outliers)');

참고 항목

함수

객체

관련 항목