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.

Realice operaciones de thresholding y morfológica en una GPU

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

Leer 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 lo está pasando a, realiza la operación de conversión en una GPU.gpuArrayrgb2gray Si se pasa un argumento, entonces una función que ha sido habilitada para GPU realiza la operación en la GPU.gpuArray

imGPUgray = rgb2gray(imGPU); 

Visualice la imagen en el e inspeccione los valores de píxel para encontrar el valor de las áreas acuosas.Visor Tenga en cuenta que debe volver a poner los datos de imagen en la CPU, utilizando la función, para utilizar el visor de imágenes.gather A medida que mueve 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 menores que 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 verlo.

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

Utilizando los operadores morfológicos que se soportan en la GPU, limpie la imagen de la máscara eliminando puntos que no representen agua.

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

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

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

Aumente el canal azul para identificar las áreas acuosas.

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

Ver 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, vuelva a mover los datos a la CPU con la función y escriba la imagen modificada en un archivo.gather

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