Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Realizar operaciones de umbral y morfológicas en una GPU

En este ejemplo se muestra cómo realizar operaciones de procesamiento de imágenes en una GPU. En el ejemplo se utiliza el filtrado para resaltar las áreas acuáticas de una fotografía aérea grande.

Lea una imagen en el espacio de trabajo.

imCPU = imread('concordaerial.png'); 

Mueva la imagen a la GPU creando un objeto.gpuArray

imGPU = gpuArray(imCPU);

Como paso de preprocesamiento, cambie la imagen RGB a una imagen en escala de grises. Dado que le está pasando un , realiza la operación de conversión en una GPU.gpuArrayrgb2gray Si pasa un argumento como argumento, una función habilitada para GPU realiza la operación en la GPU.gpuArray

imGPUgray = rgb2gray(imGPU); 

Vea la imagen en el e inspeccione los valores de píxel para encontrar el valor de las áreas acuáticas.Visor Tenga en cuenta que debe devolver los datos de imagen a la CPU, mediante la función, para utilizar el Visor de imágenes.gather Al mover el ratón sobre la imagen, puede ver el valor del píxel debajo del cursor en la parte inferior del Visor de imágenes. En la imagen, las áreas de agua tienen valores de píxel inferiores a 70.

imtool(gather(imGPUgray)); 

Filtre la imagen en la GPU para obtener una nueva imagen que contenga solo los píxeles con valores de 70 o menos y visualícela.

imWaterGPU = imGPUgray<70;  figure;imshow(imWaterGPU); 

Mediante operadores morfológicos compatibles con la GPU, limpie la imagen de máscara eliminando los puntos que no representan el agua.

imWaterMask = imopen(imWaterGPU,strel('disk',4)); imWaterMask = bwmorph(imWaterMask,'erode',3); 

Desenfoque la imagen de la máscara, usando .imfilter

blurH       = fspecial('gaussian',20,5); imWaterMask = imfilter(single(imWaterMask)*10, blurH); 

Impulse el canal azul para identificar las áreas acuosas.

blueChannel  = imGPU(:,:,3); blueChannel  = imlincomb(1, blueChannel,6, uint8(imWaterMask)); imGPU(:,:,3) = blueChannel; 

Vea el resultado. La función puede trabajar con imágenes en la GPU.imshow

figure;imshow(imGPU);

Después de filtrar la imagen en la GPU, mueva los datos de nuevo a la CPU mediante la función y escriba la imagen modificada en un archivo.gather

outCPU = gather(imGPU); imwrite(outCPU,'concordwater.png');