특징 매칭
이 예제에서는 MATLAB® 코드에서 CUDA® MEX를 생성하고 두 영상 간에 특징 매칭을 수행하는 방법을 보여줍니다. 이 예제에서는 Image Processing Toolbox™의 matchFeatures
(Computer Vision Toolbox) 함수를 사용하여 서로에 대해 회전되고 스케일링된 두 영상 간의 특징 설명자를 매칭합니다. 두 영상의 특징 설명자는 SURF(Speeded-Up Robust Features) 알고리즘을 사용하여 검출 및 추출됩니다.
타사 선행 조건
필수
이 예제는 CUDA MEX를 생성하며, 다음과 같은 타사 요구 사항이 있습니다.
CUDA 지원 NVIDIA® GPU 및 호환되는 드라이버.
선택 사항
정적, 동적 라이브러리 또는 실행 파일과 같은 비 MEX 빌드의 경우, 이 예제에는 다음과 같은 추가 요구 사항이 있습니다.
NVIDIA 툴킷.
컴파일러 및 라이브러리 환경 변수. 자세한 내용은 타사 하드웨어 항목과 필수 제품 준비하기 항목을 참조하십시오.
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)');
참고 항목
함수
codegen
|coder.gpu.kernel
|coder.gpu.kernelfun
|gpucoder.matrixMatrixKernel
|coder.gpu.constantMemory
|gpucoder.stencilKernel
|coder.checkGpuInstall