В этом примере показано, как создать CUDA ® MEX из кода MATLAB ® и выполнить сопоставление функций между двумя изображениями. В этом примере используется matchFeatures Функция (Computer Vision Toolbox) из Toolbox™ обработки изображений позволяет сопоставить дескрипторы элементов между двумя изображениями, которые повернуты и масштабированы относительно друг друга. Дескрипторы элементов двух изображений обнаруживаются и извлекаются с помощью алгоритма ускоренных надежных элементов (SURF).
Необходимый
В этом примере создается CUDA MEX со следующими требованиями сторонних производителей.
Графический процессор NVIDIA ® с поддержкой CUDA и совместимый драйвер.
Дополнительный
Для построений, отличных от MEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.
Инструментарий NVIDIA.
Переменные среды для компиляторов и библиотек. Дополнительные сведения см. в разделах Аппаратное обеспечение сторонних производителей и Настройка необходимых продуктов.
Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте coder.checkGpuInstall функция.
envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);
В этом примере сопоставление элементов выполняется на двух изображениях, которые повернуты и масштабированы относительно друг друга. Перед сопоставлением двух изображений необходимо обнаружить и извлечь характерные точки для каждого изображения. Следующая функция FeatureDetection AndExtraction использует SURF (detectSURFFeatures (Computer Vision Toolbox)) локальный детектор признаков для обнаружения точек признаков и extractFeatures (Computer Vision Toolbox) для извлечения элементов.
Функция featureDetectionAndExtraction прибыль refPoints, который содержит характерные координаты опорного изображения, qryPoints, содержащий характерные координаты изображения запроса, refDesc матрица, содержащая дескрипторы признаков ссылочного изображения и qryDesc матрица, содержащая дескрипторы признаков изображения запроса.
refPoints = Ссылочные координаты элемента изображения.
qurePoints = Запрос координат элемента изображения.
refDescFeat = дескрипторы элементов ссылочного изображения.
qureDescFeat = запрос дескрипторов функций изображения.
% 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);
Code generation successful.
figure;
showMatchedFeatures(refImage, qryImage, matchedRefPoints_gpu, matchedQryPoints_gpu);
title('Putatively Matched Points (Including Outliers)');

codegen | coder.checkGpuInstall | coder.gpu.constantMemory | coder.gpu.kernel | coder.gpu.kernelfun | gpucoder.matrixMatrixKernel | gpucoder.stencilKernel