主要内容

在GPU上执行阈值和形态操作

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

读取并显示图像。

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

通过创建图形处理器将图像移动到GPUgpuArray(并行计算工具箱)对象。

imGPUoriginal = gpuArray (imOriginal);

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

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 =重新调节(blueChannelEnhanced);

用增强的蓝色通道替换蓝色通道。

imGPUenhanced (:,:, 3) = blueChannelEnhanced;

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

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

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

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

另请参阅

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

相关的例子

更多关于