В этом примере показано, как выполнять операции обработки изображений на графическом процессоре. В примере используется фильтрация для выделения водянистых областей на аэрофотоснимке.
Чтение и отображение изображения.
imOriginal = imread('concordaerial.png');
imshow(imOriginal)
Перемещение изображения в графический процессор путем создания gpuArray (Панель параллельных вычислений).
imGPUoriginal = gpuArray(imOriginal);
На этапе предварительной обработки измените изображение RGB на изображение в градациях серого. rgb2gray выполняет операцию преобразования для графического процессора, поскольку входной аргумент является gpuArray.
imGPUgray = rgb2gray(imGPUoriginal);
Просмотрите изображение в приложении Image Viewer и проверьте значения пикселов, чтобы найти значение водянистых областей. Для использования средства просмотра изображений необходимо вернуть данные изображения на ЦП с помощью gather (Панель параллельных вычислений). При наведении курсора мыши на изображение можно просмотреть значение пикселя под курсором в нижней части окна «Просмотр изображений». На изображении области воды темны и имеют значения пикселей менее 70.
imtool(gather(imGPUgray));

Чтобы получить новое изображение, содержащее только пикселы со значениями меньше 70, пороговое значение изображения на GPU.
imWaterGPU = imGPUgray<70;
Отображение порогового изображения. В отличие от средства просмотра изображений, imshow поддержка функций gpuArray вход.
figure imshow(imWaterGPU)

Удаление небольших объектов из изображения с сохранением формы и размера больших объектов с помощью морфологического проема. imopen функция выполняет морфологическое вскрытие и поддерживает gpuArray вход.
imWaterMask = imopen(imWaterGPU,strel('disk',5));
imshow(imWaterMask)
Создайте копию исходного изображения, которое будет содержать расширенные данные. Преобразовать тип данных в single.
imGPUenhanced = im2single(imGPUoriginal);
Получите синий канал из исходного изображения.
blueChannelOriginal = imGPUenhanced(:,:,3);
Увеличение насыщенности синего канала путем увеличения интенсивности синего канала для пикселей, где маска 1 (true).
blueChannelEnhanced = blueChannelOriginal + 0.2*single(imWaterMask);
Максимальное значение расширенного синего канала превышает максимальное значение, ожидаемое для изображений типа данных single. Масштабирование данных до ожидаемого диапазона [0, 1] с помощью rescale функция.
blueChannelEnhanced = rescale(blueChannelEnhanced);
Замените синий канал на расширенный синий канал.
imGPUenhanced(:,:,3) = blueChannelEnhanced;
Отображение улучшенного изображения. Пиксели, соответствующие воде, имеют более насыщенный синий цвет в улучшенном изображении, чем в исходном изображении.
imshow(imGPUenhanced)
title('Enhanced Image')
После фильтрации изображения на GPU переместите данные обратно в CPU с помощью gather функция. Запишите измененное изображение в файл.
outCPU = gather(imGPUenhanced);
imwrite(outCPU,'concordwater.png')gather(Панель инструментов параллельных вычислений) | gpuArray(Панель инструментов параллельных вычислений)