此示例显示如何在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'的)
GPUARRAY.
(并行计算工具箱)|收集
(并行计算工具箱)