主要内容

在GPU上进行阈值和形态学操作

本示例介绍如何在图形处理器上进行图像处理操作。这个例子使用过滤来突出航拍照片中的水区域。

读取并显示图像。

imOriginal = imread(“concordaerial.png”);imshow (imOriginal)

移动图像到GPU通过创建gpuArray(并行计算工具箱)对象。

imGPUoriginal = gpuArray(imOriginal);

作为预处理步骤,将RGB图像更改为灰度图像。rgb2gray在GPU上执行转换操作,因为输入参数是agpuArray

imGPUgray = rgb2gray(imGPUoriginal);

中查看图像图像查看器应用程序和检查像素值,以找到水区域的值。要使用图像查看器,必须使用收集(并行计算工具箱)函数。当您将鼠标移动到图像上时,您可以在图像查看器底部的光标下查看像素的值。在图像中,水域是深色的,像素值小于70。

imtool(收集(imGPUgray));

要获得只包含值小于70的像素的新图像,请在GPU上对图像设置阈值。

imWaterGPU = imGPUgray<70;

显示阈值图像。与图像查看器不同,imshow功能支持金宝appgpuArray输入。

图imshow (imWaterGPU)

通过使用形态学开放,从图像中删除小对象,同时保留较大对象的形状和大小。的imopen函数执行形态打开和支持金宝appgpuArray输入。

imWaterMask = imopen(imWaterGPU,strel(“磁盘”5));imshow (imWaterMask)

创建原始映像的副本,其中将包含增强的数据。将数据类型转换为

imGPUenhanced = im2single(imGPUoriginal);

从原始图像中获取蓝色通道。

blueChannelOriginal = imGPUenhanced(:,:,3);

通过增加蒙版所在像素的蓝色通道强度来增强蓝色通道的饱和度1真正的).

blueChannelEnhanced = blueChannelOriginal + 0.2*single(imWaterMask);

增强的蓝色通道的最大值超过了数据类型图像的最大值.属性将数据重新调整到预期范围[0,1]重新调节函数。

blueChannelEnhanced = rescale(blueChannelEnhanced);

将蓝色通道替换为增强的蓝色通道。

imGPUenhanced(:,:,3) = blueChannelEnhanced;

显示增强后的图像。与原始图像相比,与水对应的像素在增强图像中具有更饱和的蓝色。

imshow (imGPUenhanced)标题(“增强的图像”

在GPU上对图像进行过滤后,使用收集函数。将修改后的映像写入文件。

outCPU = gather(imGPUenhanced);imwrite (outCPU“concordwater.png”

另请参阅

(并行计算工具箱)|(并行计算工具箱)

相关的例子

更多关于