Этот пример показывает, как сгенерировать CUDA® MEX для функции MATLAB®, которая обнаруживает ребра в изображениях при помощи фильтров статистической величины порядка. Прикажите, чтобы статистические фильтры были нелинейными пространственными фильтрами, ответ которых основан на упорядоченном расположении (рейтинг) пикселей, содержавшихся в области изображения, охваченной фильтром, и затем заменяющий значение в центральном пикселе со значением, определенным занимающим место результатом. Различные типы фильтров статистики порядка включают медиану, максимум и минимальные фильтры. Пример берет интенсивность или двухуровневое изображение, как введено и использует функцию ordfilt2, которая является частью Image Processing Toolbox™, чтобы произвести обнаруженное изображение ребра.
CUDA включил NVIDIA®, графический процессор с вычисляет возможность 3.2 или выше.
NVIDIA инструментарий CUDA и драйвер.
Image Processing Toolbox
Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты. Для подготовки переменных окружения смотрите Переменные окружения.
Следующая строка кода создает папку в вашей текущей рабочей папке (pwd) и копирует все соответствующие файлы в эту папку. Если вы не хотите выполнять эту операцию или если вы не можете сгенерировать файлы в этой папке, изменить вашу текущую рабочую папку.
gpucoderdemo_setup('gpucoderdemo_edge_detection');
Используйте coder.checkGpuInstall, функционируют и проверяют, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно.
envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);
Функция edge_detection.m берет интенсивность или двухуровневое изображение, как введено и возвращается, ребро обнаружило двухуровневое изображение.
type edge_detection
function outImage = edge_detection(input)%#codegen % Copyright 2019 The MathWorks, Inc. coder.gpu.kernelfun(); % In this edge detection algorithm we used the "Max - Min" filter. % The "Max - Min" filter blurs the image by replacing each pixel with the % difference of the highest pixel and the lowest pixel (with respect to intensity) % within the specified windowsize. % Convert RGB image to gray scale image. if size(input,3)==3 inputImage = rgb2gray(input); else inputImage = input; end % Parameters to ordfilt2 for finding Maximum & Minimum filters. dom = ones(2); minOrder = 1; maxOrder = 4; padopt = 'zeros'; % Used ordfilt2 here MinImg = ordfilt2(inputImage,minOrder,dom,padopt); MaxImg = ordfilt2(inputImage,maxOrder,dom,padopt); % edge detected output outImage = MaxImg - MinImg; outImage = imbinarize(outImage); end
edge_detection
Чтобы сгенерировать MEX CUDA для функции edge_detection
, создайте код, настройка графического процессора кода возражает и использует функцию codegen
.
inputImage = imread('highway.png'); cfg = coder.gpuConfig('mex'); codegen -args {inputImage} -config cfg edge_detection -o edge_detection_gpu_mex
Запустите сгенерированный edge_detection_gpu_mex с входным изображением и постройте вход, и ребро обнаружило изображения.
[outputImage] = edge_detection_gpu_mex(inputImage); % plot images p1 = subplot(1, 2, 1); p2 = subplot(1, 2, 2); imshow(inputImage, 'Parent', p1); imshow(outputImage, 'Parent', p2); title(p1, 'Input Image'); title(p2, 'Edge Detected Image');
Удалите временные файлы и возвратитесь к исходной папке
cleanup