メインコンテンツ

特徴マッチング アルゴリズム用の GPU コードの生成

この例では、2 つのイメージ間の特徴を照合する CUDA® MEX 関数を生成する方法を示します。この例では、matchFeatures (Computer Vision Toolbox)関数を使用して、互いに回転およびスケーリングされた 2 つのイメージ間の特徴記述子を照合します。エントリポイント関数は、Speeded-Up Robust Features (SURF) アルゴリズムを使用して、2 つのイメージの特徴記述子を検出および抽出します。

サードパーティの前提条件

必要

この例では CUDA MEX ファイルを生成するため、CUDA 対応の NVIDIA® GPU および互換性のあるドライバーが必要です。

オプション

スタティック ライブラリ、ダイナミック ライブラリ、または実行可能ファイルなどの MEX 以外のビルドについて、この例では以下の要件も適用されます。

GPU 環境の検証

この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証するために、関数coder.checkGpuInstallを使用します。

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

特徴の検出と抽出

この例では、互いに回転およびスケーリングされた 2 つのイメージに対して特徴マッチングを実行します。2 つのイメージをマッチングする前に、各イメージの特徴点を検出および抽出しなければなりません。以下の 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 は 2 つのイメージから抽出された特徴点および特徴記述子を受け取り、それらの間でマッチする点を見つけます。

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);

特徴マッチの表示

showMatchedFeatures 関数を実行して、参照イメージとクエリ イメージ内の一致する特徴点を表示します。結果には、一致した特徴の間に線が引かれているクエリ イメージが参照イメージの上に重ねて表示されます。

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

参考

関数

オブジェクト

トピック