OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
Ascend NPUによる画像処理

目的

このガイドでは、すでに使用されているAscend演算子のスレッド安全性についての知見が得られるほか、画像の前処理にAscend演算子を効果的に活用する方法や、その使用上の制限について理解できる。

はじめに

OpenCV内で Ascend NPU をサポートする一連の一般的な行列演算オペレータを提供している。ユーザの利便性のため、新しい 'AscendMat' 構造体とそれに関連する演算子は、OpenCVの 'Mat' インタフェースとの互換性を保っている。これらの演算子は、算術演算、画像処理演算、画像の色空間変換など、頻繁に使用される機能を幅広く網羅している。これらの演算子はすべて CANN(Compute Architecture of Neural Networks) を利用して実装されている。Ascend演算子はCANNを利用することでNPU上での演算の高速化を実現する。この高速化の効果は、2048x2048、3840x2160、7680x4320 などの大きな寸法の画像を扱う際に特に顕著である。

スレッドセーフティに関する注意

ストリーム機能はCANN演算子を呼び出すことで実装されている。同一のストリーム内ではタスクは順次実行され、異なるストリーム間ではタスクは並列に実行される。ストリーム間のタスクの同期はイベント機構によって保証される。詳細は Stream Management のドキュメントを参照すること。

画像前処理の例

この節では、以下の関数を含め、Ascend演算子を使った画像の前処理の方法を学ぶ:

  • 加算
  • 回転
  • 反転

コード

解説

入力画像

CANNのセットアップ

画像前処理の例

CANNの後始末

結果

  1. 寸法 (480, 640, 3) の元のRGB入力画像:
puppy
  1. ガウシアンノイズを加えると、次の結果が得られる:
puppy_noisy
  1. 回転コード 0(時計回りに90度)で回転操作を適用すると、次の結果が得られる:
puppy_noisy_rotate
  1. 反転コード 0(x軸まわりの反転)で反転操作を適用すると、最終的な結果が得られる:
puppy_processed_normalized