www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱matlab程序源码 > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I3_01_5_cudaMex.m

    %% 夋憸張棟傪GPU忋偱幚峴
% 堦晹偺張棟偵偮偄偰丄CUDA MEX傪惗惉偟偰摑崌

clear all, close all, clc

%% 夋憸僨乕僞撉傒崬傒
imCPU = imread('concordaerial.png');

%% 僨乕僞傪GPU偵揮憲
imGPU = gpuArray(imCPU);

%% 僌儗乕僗働乕儖曄姺
imGPUgray = rgb2gray(imGPU);

%% 2抣壔
imWaterGPU = imGPUgray<70;

%% 嵶偐偄僲僀僘彍嫀
imWaterMask = imopen(imWaterGPU,strel('disk',4));
imWaterMask = bwmorph(imWaterMask,'erode',3);
imshow(imWaterMask)

%% 僈僂僔傾儞僼傿儖僞偱夋憸傪傏偐偡(PCT)
%blurH = fspecial('gaussian',20,5);
%imWaterMask = imfilter(single(imWaterMask)*10, blurH);
imWaterMask2 = myfilter(imWaterMask);

%% 惵怓偺梫慺傪嫮挷
blueChannel  = imGPU(:,:,3);
blueChannel2  = imlincomb(1, blueChannel,6, uint8(imWaterMask2));
imGPU(:,:,3) = blueChannel2;

%% CPU偵僨乕僞傪揮憲偟丄寢壥傪昞帵
outCPU = gather(imGPU);
imshow(outCPU)

%% CUDA MEX惗惉
cfg = coder.gpuConfig('mex');
cfg.TargetLang = 'C++';
t = coder.typeof(gpuArray(false), [2036 3060]);
codegen -args {t} -config cfg myfilter

%% CUDA MEX傪棙梡偟偰僈僂僔傾儞僼傿儖僞埲崀偺張棟傪嵞幚峴
% 僈僂僔傾儞僼傿儖僞偱夋憸傪傏偐偡(CUDA MEX)
imWaterMask2 = myfilter_mex(imWaterMask);

%% 惵怓偺梫慺傪嫮挷
blueChannel2  = imlincomb(1, blueChannel,6, uint8(imWaterMask2));
imGPU(:,:,3) = blueChannel2;

%% CPU偵僨乕僞傪揮憲偟丄寢壥傪昞帵
outCPU2 = gather(imGPU);
imshowpair(outCPU, outCPU2, 'montage')

%% 
% Copyright 2019 The MathWorks, Inc.