皆さん、35 x 35 カーネルを使用して畳み込みを行いたいと思います。なにか提案を?またはopencvですでに使用できる方法はありますか?現在、cvfilter2d は 10 x 10 カーネルまでしかサポートできないためです。
1 に答える
1
OpenCV のサイズ制限のために簡単なソリューションが必要な場合は、35x35 カーネルを 7x7 の「カーネル タイル」の 5x5 セットに分割し、各「カーネル タイル」をイメージに適用して出力を取得し、シフトします。結果を組み合わせて、最終的な合計を取得します。
大規模な 2D カーネルを使用した畳み込みに関する一般的な提案:
- 分離可能なカーネル、つまり、列ベクトルと行ベクトルの外積であるカーネルを使用するようにしてください。つまり、カーネルを表す行列はランク 1 です。
- FFT法を使ってみてください。空間ドメインでの畳み込みは、周波数ドメインでの要素ごとの共役乗算と同じです。
- カーネルがフル ランクであり、アプリケーションの目的のために変更できない場合は、SVD を使用してカーネルを 35 個のランク 1 行列のセットに分解することを検討してください (それぞれは、列ベクトルの外積として表すことができ、行ベクトル)、最大の特異値に関連付けられた行列のみを使用して畳み込みを実行します。これにより結果に誤差が生じますが、誤差は特異値に基づいて推定できます。(別名 MATLAB メソッド)
その他の特殊なケース:
- オーバーラップする長方形ブロックの合計として表現できるカーネルは、積分画像 (Viola-Jones の顔検出で使用される方法) を使用して計算できます。
- 滑らかでモーダルな (ピークの数が少ない) カーネルは、2D ガウスの和で近似できます。
于 2010-10-02T06:51:36.307 に答える