Отобразите Шумоподавление на графическом процессоре с помощью Среднего фильтра

Этот пример показывает, как сгенерировать 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'

Функция 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

Сгенерируйте MEX CUDA для функции 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

Запустите сгенерированный MEX CUDA

Запустите сгенерированный 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