主要内容

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

此示例显示如何在GPU上执行图像处理操作。该示例使用过滤突出显示空中照片中的水域。

读取并显示图像。

imoriginal = imread('concordaerial.png');imshow(imoriginal)

通过创建一个将图像移动到GPUGPUARRAY.(并行计算工具箱)对象。

IMGPUORIGINAL = GPUARRAY(imoriginal);

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

IMGPUGRAY = RGB2GRAY(IMGPuoriginal);

查看图像图像查看器应用程序并检查像素值以查找水域的值。要使用图像查看器,必须使用映像数据将图像数据带回CPU上收集(并行计算工具箱)功能。将鼠标移动到图像上时,您可以在图像查看器底部的光标下查看像素下的值。在图像中,水区域是暗的,并且具有小于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 = Bluechanneliginal + 0.2 *单(ImwaterMask);

增强型蓝色通道的最大值超过数据类型图像的最大值单身的。通过使用通过使用该数据将数据重新归类到预期范围[0,1]rescale.功能。

Bluechannelenhanced = Rescale(Bluechannelenhanced);

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

IMGPuenhanced(:,:,3)= Bluechannelenhanced;

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

imshow(imgpuenhanced)标题('增强图像'的)

在GPU上过滤图像后,使用该图像将数据移动回CPU收集功能。将修改后的图像写入文件。

outCPU =收集(imGPUenhanced);imwrite (outCPU'concordwater.png'的)

也可以看看

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

相关例子

更多关于