2011-12-18 17 views
0

GPUアクセラレーションを使用したOpenCVのConvolve関数に関する質問があります。OpenCV GPU畳み込み関数と罫線なし

convolve(src_32F, kernel, cresult, false, cbuffer); 

画像の境界が(CRESULTに)欠けているが

結果は、(カーネルサイズは、さもなければも優れている: 畳み込みの速度は、実行時GPU

を用いて高速略3.5であります60x60)

おかげ

答えて

1

これは、コンボリューションの動作方法です。

すべてのピクセルの値を、周囲のものの加重平均として計算します。したがって、30ピクセルずつ考慮すると、30ピクセルよりもイメージの境界に近いすべてのピクセルについて、畳み込みは定義されません。

フィルタリング機能のCPU実装では、欠落しているピクセルには、所定の戦略(コピー、ミラー、ブランクなど)に基づく偽の値が追加されます。

できることは、より大きいマトリックスの中で目的の値を手作業で埋めて、大きなものをフィルタリングして戻します。そのためには、gpu :: copyMakeBorder()funcを使用することができます。

+0

こんにちは。 値がわずかにオーバーショットされているという事実にはいくつかの方法がありますか? マニュアルの追加は私のオプションではありません たとえば、320-240イメージを扱う場合、各サイズに30を加え、結果は321-241になります(手動で右上から1つ引いています。たとえば、kerel側が偶数ならば奇数ならば修正してください。 –

+0

カーネルのサイズは、左右に対称に適用されるため、奇数でなければなりません.nの値はn、rightの値はnです。カーネルのサイズは(2n + 1)でなければなりません。カーネルに偶数のカーネル(60/60)を送信した場合、カーネルに1列と1行が追加され、イメージに対しても同じことが行われます。 – Sam

+0

しかし、 CUDAの最適化や複雑な画像処理タスクなどの作業を始める前に、基本を読んで理解し、適用してください。このように進むことはできないので、googleに 'wiki convolution'と本当に、本当に慎重にそれを読んでください。 – Sam

関連する問題