在GPU上执行阈值和形态学

这个例子展示了如何在GPU上执行的图像处理操作。该示例使用过滤以突出在一个大的航空照片的水样区域。

读出的图像到工作区。

imCPU = imread('concordaerial.png');

通过创建一个图像移动到GPUgpuArray目的。

imGPU = gpuArray(imCPU);

作为预处理步骤,将RGB图像更改为灰度图像。因为你传递一个gpuArrayrgb2gray执行在GPU上的转换操作。如果传递gpuArray作为一个参数,则该已启用GPU-执行GPU上的操作的功能。

imGPUgray = rgb2gray(imGPU);

查看该图像图像查看器并检查像素值找水样区的价值。请注意,您必须将图像数据返回到CPU,使用收集功能,使用图像查看器。当你在图像上移动鼠标,则可以在图像查看器的底部的光标下查看像素的值。在图像中,水区域具有像素值小于70。

imtool(聚(imGPUgray));

筛选的GPU图像来获得一个只包含的像素为70或更少的值并查看它的新形象。

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

使用所支持的GPU形态运营,通过移除不代表供水点清理掩模图像。万博1manbetx

imWaterMask = IMOPEN(imWaterGPU,strel(“盘”,4));imWaterMask = bwmorph(imWaterMask,'侵蚀',3);

模糊掩模图像,使用imfilter

blurH = fspecial(“高斯”,20,5);imWaterMask = imfilter(单(imWaterMask)* 10,blurH);

助推蓝色通道识别水汪汪的领域。

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

查看结果。该imshow功能可以在GPU上的图像的工作。

图; imshow(imGPU);

在GPU上过滤所述图像之后,使用所述移动数据返回到CPU收集功能,以及修改后的图像写入到文件中。

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