Этот пример показывает, как сгенерировать CUDA® MEX для функции MATLAB®, которую denoises RGB отображает при помощи средней фильтрации. Основная концепция позади средней фильтрации должна пробежать пиксель изображения пикселем, заменив каждый пиксель на медиану соседних пикселей. Пример берет изображение RGB в качестве входа и использует функцию medfilt2, которая является частью Image Processing Toolbox™, чтобы произвести изображение denoised.
CUDA включил NVIDIA®, графический процессор с вычисляет возможность 3.2 или выше.
NVIDIA инструментарий CUDA и драйвер.
Image Processing Toolbox
Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты. Для подготовки переменных окружения смотрите Переменные окружения.
Следующая строка кода создает папку в вашей текущей рабочей папке (pwd) и копирует все соответствующие файлы в эту папку. Если вы не хотите выполнять эту операцию или если вы не можете сгенерировать файлы в этой папке, изменить вашу текущую рабочую папку.
gpucoderdemo_setup('gpucoderdemo_noise_removal');
Используйте coder.checkGpuInstall, функционируют и проверяют, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно.
envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);
Функция noise_removal.m берет изображение интенсивности, как введено и возвращает изображение denoised.
type noise_removal
function rgbFixed = noise_removal(noisyRGB)%#codegen % Copyright 2019 The MathWorks, Inc. coder.gpu.kernelfun(); % Extract the individual red, green, and blue color channels. redChannel = noisyRGB(:, :, 1); greenChannel = noisyRGB(:, :, 2); blueChannel = noisyRGB(:, :, 3); % Median Filter the channels redMF = medfilt2(redChannel, [4 4]); greenMF = medfilt2(greenChannel, [4 4]); blueMF = medfilt2(blueChannel, [4 4]); % Reconstruct the noise free RGB image rgbFixed = cat(3, redMF, greenMF, blueMF); end
noise_removal
Чтобы сгенерировать MEX CUDA для функции noise_removal
, создайте код, настройка графического процессора кода возражает и использует функцию codegen
.
inputImage = imread('peppers.png'); noisyRGB = imnoise(inputImage,'salt & pepper', 0.05); cfg = coder.gpuConfig('mex'); codegen -args {noisyRGB} -config cfg noise_removal -o noise_removal_gpu_mex
Запустите сгенерированный noise_removal_gpu_mex с входным изображением и постройте изображения denoised и вход.
[denoisedRGB] = noise_removal_gpu_mex(noisyRGB); % plot images p1 = subplot(1, 2, 1); p2 = subplot(1, 2, 2); imshow(noisyRGB, 'Parent', p1); imshow(denoisedRGB, 'Parent', p2); title(p1, 'Noisy Input Image'); title(p2, 'Denoised Output Image');
Удалите временные файлы и возвратитесь к исходной папке
cleanup