此示例显示如何在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)
通过使用形态开口保留较大物体的形状和大小,从图像中删除小对象。这伊莫登
功能执行形态开放和支持金宝appGPUArray.
输入。
imwatermask = imopen(imwatergpu,strel('盘',5));imshow(imwatermask)
创建将包含增强数据的原始图像的副本。将数据类型转换为单身的
。
imgpuenhanced = im2single(imgpuoriginal);
从原始图像获取蓝色频道。
Bluechanneloriginal = Imgpuenhanced(::,3);
通过增加蓝色通道的强度来提高蓝色通道的饱和度,以便掩模是掩模的像素1
(真的
)。
Bluechannelenhanced = Bluechanneliginal + 0.2 *单(Imwatermask);
增强型蓝色通道的最大值超过数据类型图像的最大值单身的
。通过使用使用的预期范围[0,1]将数据重新归类到预期范围[0,1]rescale.
功能。
Bluechannelenhanced = Rescale(Bluechannelenhanced);
用增强型蓝色通道替换蓝色通道。
imgpuenhanced(:,:,3)= bluechannelenhanced;
显示增强型图像。对应于水的像素在增强的图像中具有比原始图像更高的蓝色。
imshow(imgpuenhanced)标题('增强图像')
在GPU上过滤图像后,使用该图像将数据移动回CPU收集
功能。将修改后的图像写入文件。
OutCPU =聚集(IMGPuenhanced);IMWRITE(OUTCPU,'concordwater.png')
收集
(并行计算工具箱)|GPUArray.
(并行计算工具箱)