在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”)
另请参阅
相关的例子
更多关于
- 在图形处理器上运行MATLAB函数(并行计算工具箱)
- 支持GPU计算的功能金宝app