Покажите соответствие

В этом примере показано, как сгенерировать CUDA® MEX из кода MATLAB® и выполнить функцию, соответствующую между двумя изображениями. Этот пример использует matchFeatures Функция (Computer Vision Toolbox) от Image Processing Toolbox™, чтобы совпадать с дескрипторами функции между двумя изображениями, которые вращаются и масштабируются друг относительно друга. Дескрипторы функции двух изображений обнаружены и извлечены при помощи алгоритма Ускоренных устойчивых функций (SURF).

Сторонние необходимые условия

Необходимый

Этот пример генерирует MEX CUDA и имеет следующие сторонние требования.

  • CUDA включил NVIDIA® графический процессор и совместимый драйвер.

Дополнительный

Для сборок неMEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.

Проверьте среду графического процессора

Чтобы проверить, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно, используйте 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 = дескрипторы функции Запроса изображений.

% Read Image
K = imread('cameraman.tif'); % Reference image
refImage = imresize(K,3);

scale = 0.7;  % Scaling the image.
J = imresize(refImage, scale);
theta = 30.0;   % Rotating the image
qryImage = imrotate(J,theta); % Query image

[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 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;
codegen -config cfg -args {refPoints,refDescFeat,qryPoints,qryDescFeat} feature_matching -o feature_matching_gpu_mex
[matchedRefPoints_gpu,matchedQryPoints_gpu] = feature_matching_gpu_mex(refPoints,refDescFeat,qryPoints,qryDescFeat);

Отобразите соответствия функции

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

Для просмотра документации необходимо авторизоваться на сайте