最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
この例では、GPU で画像処理演算を実行する方法を示します。大きな航空写真で水面を強調表示するためにフィルター処理を使用します。
イメージをワークスペースに読み取ります。
imCPU = imread('concordaerial.png');
gpuArray
(Parallel Computing Toolbox) オブジェクトを作成してイメージを GPU に移動します。
imGPU = gpuArray(imCPU);
前処理の手順として、RGB イメージをグレースケール イメージに変更します。gpuArray
を渡すため、rgb2gray
は GPU で変換演算を実行します。gpuArray
を引数として渡すと、GPU 対応の関数は GPU で演算を実行します。
imGPUgray = rgb2gray(imGPU);
イメージ ビューアーでイメージを表示してピクセル値を調査し、水面の値を見つけます。イメージ ビューアーを使用するには、関数 gather
を使用してイメージ データを CPU に戻さなければならないことに注意してください。イメージ上でマウスを移動すると、イメージ ビューアーの下部にカーソルの下にあるピクセルの値が表示されます。このイメージでは水面のピクセル値は 70 未満になっています。
imtool(gather(imGPUgray));
GPU でイメージをフィルター処理して、値が 70 未満のピクセルのみを含む新しいイメージを取得し、表示します。
imWaterGPU = imGPUgray<70; figure;imshow(imWaterGPU);
GPU 対応のモルフォロジー演算子を使用して、水面を表していない点を削除することにより、マスク イメージをクリーンアップします。
imWaterMask = imopen(imWaterGPU,strel('disk',4)); imWaterMask = bwmorph(imWaterMask,'erode',3);
imfilter
を使用してマスク イメージにブラーをかけます。
blurH = fspecial('gaussian',20,5);
imWaterMask = imfilter(single(imWaterMask)*10, blurH);
水面を識別するために青チャネルをブーストします。
blueChannel = imGPU(:,:,3); blueChannel = imlincomb(1, blueChannel,6, uint8(imWaterMask)); imGPU(:,:,3) = blueChannel;
結果を表示します。関数 imshow
は GPU でイメージを処理できます。
figure;imshow(imGPU);
GPU でイメージのフィルター処理が完了してから、関数 gather
を使用してデータを CPU に戻し、変更したイメージをファイルに書き込みます。
outCPU = gather(imGPU);
imwrite(outCPU,'concordwater.png');