2

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で見逃した可能性のあるメソッドは、調整可能なサイズパラメーターを使用して迅速に実行されます
  • これらの要件の両方に準拠し、かなり寛容なライセンスを持つ関数を含むその他のライブラリ。
4

1 に答える 1

3

両方の操作 (侵食と膨張) を体系的に連続して実行することを意図している場合、および両方に同じパラメーター サイズを使用しても問題ない場合は、opencv の専用関数を使用して開口部を適用してみてください。

http://docs.opencv.org/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html

数学的には、これは浸食と膨張の実行に相当しますが、両方の操作を連続して適用するよりもはるかに迅速に実行できる開口部の最適化された実装があります。

免責事項: 私はこれらの操作について opencv の実装をチェックしていませんが、試してみることをお勧めします (もちろん、まだ行っていない場合)。

于 2012-08-16T08:11:59.707 に答える