AndroidデバイスでOpenCVとFastCVの両方を使用して、画像処理操作を実行しています。フレームをしきい値処理した後、対象領域の近くに適度な量の黒と白のノイズが存在するバイナリ イメージが残ります。
侵食を実行し、続いて画像を膨張させると、実質的にノイズのない画像が得られ、それをさらに処理するために使用できますが、上記のライブラリには両方とも欠点があります。
OpenCV
Mat element = getStructuringElement(MORPH_RECT, Size(2 * erosionSize + 1, 2 * erosionSize + 1), Point(erosionSize, erosionSize));
erode(in, in, element);
element.release();
私のマジック ナンバーを許してください。ただし、OpenCV の erode/dilate の単純な呼び出しは上記のようになります。次に、この関数の erosionSize/dilationSize パラメーターを変更して、関数がノイズを除去する度合いを調整します。問題?ここではパフォーマンスが最優先事項であり、この関数の実行は思ったよりも遅くなります。
FastCV
fcvFilterErode3x3u8_v2 (const uint8_t *__restrict src, unsigned int srcWidth, unsigned int srcHeight, unsigned int srcStride, uint8_t *__restrict dst, unsigned int dstStride)
上記のプロトタイプは FastCV の侵食実装用であり、侵食のサイズを調整するパラメータはありません。FastCV がモバイル アーキテクチャ用に最適化されており、テストに使用している Galaxy Nexus にある GPU を実際に利用していると思われることを考えると、この関数は上記よりもはるかに高速です。ただし、同じレベルの侵食を達成するには、同じフレームで複数回ループして実行する必要があり、その過程でパフォーマンス上の利点が犠牲になります。
誰もが次のいずれかを知っていますか:
- いずれかのAPIで見逃した可能性のあるメソッドは、調整可能なサイズパラメーターを使用して迅速に実行されます。
- これらの要件の両方に準拠し、かなり寛容なライセンスを持つ関数を含むその他のライブラリ。