В этом примере показано, как сгенерировать CUDA® MEX из кода MATLAB® и выполнить функцию, соответствующую между двумя изображениями. Этот пример использует matchFeatures
Функция (Computer Vision Toolbox) от Image Processing Toolbox™, чтобы совпадать с дескрипторами функции между двумя изображениями, которые вращаются и масштабируются друг относительно друга. Дескрипторы функции двух изображений обнаружены и извлечены при помощи алгоритма Ускоренных устойчивых функций (SURF).
Необходимый
Этот пример генерирует MEX CUDA и имеет следующие сторонние требования.
CUDA включил NVIDIA® графический процессор и совместимый драйвер.
Дополнительный
Для сборок неMEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.
Инструментарий NVIDIA.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Стороннее Оборудование и Подготовку Необходимых как условие продуктов.
Чтобы проверить, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно, используйте 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