В этом примере показано, как выполнять пиксельные операции над графическим процессором, используя функции, которые отправляют как данные, так и операции на графический процессор для обработки. Этот метод наиболее эффективен для операций по элементам, для которых требуется два или более наборов данных.
Чтение и отображение изображения.
I = imread('concordaerial.png');
imshow(I)![]()
Перемещение данных из CPU в графический процессор путем создания gpuArray (Панель параллельных вычислений).
Igpu = gpuArray(I);
Выполните операцию с графическим процессором. В этом примере определяется пользовательская функция с именем rgb2gray_custom преобразование RGB-изображения в оттенки серого с помощью пользовательского взвешивания красных, зеленых и синих цветовых каналов. Эта функция определяется в конце примера. Передача дескриптора пользовательской функции и данных графическому процессору для оценки arrayfun (Панель параллельных вычислений).
Igray_gpu = arrayfun(@rgb2gray_custom, ...
Igpu(:,:,1),Igpu(:,:,2),Igpu(:,:,3));Caught front-end user exception: MATLAB:m_illegal_character
Переместите данные обратно в CPU из графического процессора с помощью gather (Панель параллельных вычислений).
I_gpuresult = gather(Igray_gpu);
Просмотрите результат.
imshow(I_gpuresult)
![]()
rgb2gray_custom вспомогательные функции принимают линейную комбинацию из трех каналов и возвращают одноканальное выходное изображение.
function gray = rgb2gray_custom(r,g,b) gray = 0.5*r + 0.25*g + 0.25*b; end
arrayfun(Панель инструментов параллельных вычислений) | gather(Панель инструментов параллельных вычислений) | gpuArray(Панель инструментов параллельных вычислений)