問題タブ [convolution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
10366 参照

c# - FFTなしの1D高速畳み込み

2つの大きなアレイに対する1Dコンボリューションが必要です。このコードをC#で使用していますが、実行に時間がかかります。

分かった分かった!FFT畳み込みは非常に高速です。しかし、このプロジェクトでは使用できません。FFTを使用しないことはプロジェクトの制約です(理由を聞かないでください:/)。

これはC#での私のコードです(ちなみに、matlabから移植されました):

それで、誰かが高速畳み込みアルゴリズムの幅をFFTで知っていますか?

0 投票する
0 に答える
1532 参照

c++ - OpenCVで3D配列または行列を使用して3Dガウス畳み込みを処理する方法

私はこのような3D配列を持っています。

そして、この配列で3Dガウス畳み込みを処理して、配列をぼかしたいと思います。配列内のデータを何らかの形で連続させるため。

ただし、OpenCV には 1 次元または 2 次元の dft()、filter2d()、convolve() しかありません。

では、OpenCV で 3D 畳み込みを処理する方法は? 3Dガウスカーネルを効率的に構築する方法は? 3D畳み込みを複数の2Dまたは1D畳み込みに分離する方法は?

0 投票する
2 に答える
1440 参照

image-processing - 畳み込み理論と実装

画像処理はカリキュラムの一部であるため、畳み込みを研究しています。理論と公式は理解していますが、その実装については混乱しています。

式は次のとおりです。


ここに画像の説明を入力してください


私が理解していること

畳み込みカーネルは水平方向と垂直方向の両方で反転され、カーネル内の値に対応するピクセル値が乗算され、結果が合計され、「行x列」で除算されて平均が得られ、最後にこの結果がカーネル位置の中心にあるピクセル。

実装の混乱

コース資料からサンプルの畳み込みプログラムを実行し、入力として3x3畳み込みカーネルを挿入すると、次のようになります。

1行目:(0、1、0)

2行目:(0、0、0)

3行目:(0、0、0)

処理された画像は1ピクセル下にシフトされますが、私はそれが1ピクセル上にシフトすると予想していました。この結果は、計算前に水平または垂直の反転が行われていないことを示しています(相関を行っているかのように)。

プログラムに問題があるのではないかと思ったので、周りを見回してみると、 AdobeFlex3Gimpもこれを行っていることがわかりました。

わかりませんが、気づかなかったことがありますか?

ヘルプやフィードバックに感謝します。

0 投票する
2 に答える
2704 参照

image - 周波数領域での画像畳み込み (MATLAB)

クラスが周波数領域で畳み込みを行うための C++ プログラムを書いていますが、最終結果の隅にエラーがあることに気付きました。そのため、MATLAB で試してみましたが、まったく同じ結果が得られました。例えば

http://engronline.ee.memphis.edu/eece7214/images/Downlodable.htmのカメラマンを使用

やった

左上隅を抽出する前に c をのぞき見したところ、隅から少し翻訳されていることを除いて、imfilter(a, h) と同じ答えであることがわかりました。Gonzalez による Digital Image Processing はこれについて何も言っておらず、Google は私の目から血を流している。

主な質問とは関係ありませんが、この MATLAB コードで 256 で除算しなければならなかった理由も知りたいです。私の C++ コードでは、結果をスケーリングする必要はなく、この MATLAB コードと同じ答えが得られました。

編集:1次元ベクトル(convとifft(fft * fft)を実行)を少しいじりましたが、「エラー」は、 「同じ」畳み込み。しかし、そうであったとしても、「「フル」の左上の 256x256 部分ではなく、「同じ」を取得するためだけにこの部分を抽出する」という決定論的なコーディング方法がわかりません。

編集: http://jeremy.fix.free.fr/IMG/pdf/fftconvolution.pdfを介して、さらにグーグルで解決できる可能性があります。これまでに見たことのない数学記号がたくさんありますが、収集できることから、nxn と mxm を畳み込む場合は、m:(m+n-1) を抽出して、から「同じ」畳み込みを取得します。 fft近似。私はまだ私よりも専門家からの意見を聞きたいので、この更新に基づいてコメントしないことを選択しないでください!

0 投票する
1 に答える
1397 参照

c# - MonoTouchでこの画像畳み込みフィルターメソッドを最適化する方法は?

MonoTouch用のリアルタイムグラフィックスエフェクトライブラリが存在しないことに気付いた後、私は自分で作成することにしました。いくつかの調査の後、私は完全に機能する畳み込みメソッドを作成しましたが、安全でないコードを使用しても、非常に低速です。私が間違っているのは何ですか?私が見逃している最適化はありますか?

これが私のc#クラスです。どんなに小さくても、どんな提案でも大歓迎です!

0 投票する
1 に答える
692 参照

matlab - MATLAB SPMD と nlfilter - ウィンドウ サイズの変更

John Burkardt によるCONTRAST2_SPMDの修正版を使用して、大きなグレースケール画像で 3x3 分散計算を実行しています。これの利点は、PCT を使用してローカル マシンで 8 コアを使用できることですが、ウィンドウ サイズ (現時点では 3x3) を変更したいのですが、いくつかのウィンドウ サイズを試してみたいと考えています。以下のコードを変更して、可変ウィンドウ サイズを許可するにはどうすればよいですか? (奇数の正方形のウィンドウを使用します。たとえば、3x3、5x5、7x7、9x9 など)。

助けてくれてありがとう。

0 投票する
3 に答える
6035 参照

algorithm - 畳み込みによる正確なパターンマッチングを解決する方法

アルファベットが5つの記号{a、b、c、d、#}で構成され、特殊記号#が任意の記号(それ自体を含む)と一致する場合、正確なパターンマッチングの問題を解決しようとしています。

たとえば、T = ab#aca#ab#aおよびP = da#acの場合、PはTの位置3から発生します。長さnのパターンPかどうかを判断するために、O(nlogn)時間アルゴリズムを見つけようとしています。 #記号がTとPで(おそらくO(n)回)発生すると仮定して、長さ2nのテキストTで発生します。

畳み込みでそれを解決する方法について何か提案はありますか?

0 投票する
5 に答える
1832 参照

matlab - 加重平均が非常に大きい

私は32gのRAMを搭載した64ビットのmatlabを使用しています(ご存知のとおり)。

130 万個の数値 (整数) のファイル (ベクトル) があります。同じ長さの別のベクトルを作成したいのですが、各ポイントは最初のベクトル全体の加重平均であり、その位置からの逆距離で加重されています(実際には、^-1ではなく位置^-0.1ですが、例として) . 現在のポイントより前のものしか平均化できないため、matlab の「フィルター」関数を使用できません。より明確に説明するために、3 つの要素の例を次に示します。

したがって、新しいベクトルの各ポイントは、最初のベクトル全体の加重平均であり、1/(その位置からの距離 + 1) で加重されます。

各ポイントの重みベクトルを作り直して、要素ごとに結果ベクトルを計算することもできますが、これには for ループの 130 万回の反復が必要で、それぞれに 130 万回の乗算が含まれます。1x1.3mil を 1.3milx1.3mil で乗算する単純な行列乗算を使用したいと思いますが、これは理論的には機能しますが、それほど大きな行列をロードすることはできません。

次に、シェル スクリプトを使用してマトリックスを作成し、matlab でインデックスを作成しようとしています。これにより、マトリックスの関連する列のみが一度に呼び出されますが、これにも非常に長い時間がかかります。

私はこれをmatlabで行う必要はないので、このような多数の数値を利用して平均を取得することについて人々が持っているアドバイスをいただければ幸いです。^-1 ではなく ^-0.1 の重みを使用しているため、それほど速くは落ちません。元のポイントの重み付け 1 と比較して、100 万番目のポイントはまだ 0.25 に重み付けされているため、単純にカットすることはできません。大きくなったらオフ。

これが十分に明確だったことを願っていますか?

以下の回答のコードは次のとおりです(書式設定できますか?):

0 投票する
1 に答える
656 参照

c++ - x 方向の画像の各行の 1D 畳み込み

x 方向の画像の各行で 1D 畳み込みを計算したいと思います。

そのために、http://www.na-mic.org/svn/Slicer3-lib-mirrors/trunk/Insight/Examples/Filtering/LaplacianRecursiveGaussianImageFilter1.cxxに示されている例を使用しようとしています

最後のフィルターを「更新」しようとすると、例外が発生します。これは「スタック オーバーフロー」であり、「itkObject.cxx」に移動します。例のコードをコピーしただけなので、何が間違っているのかわかりません。

もう1つ重要なことは、畳み込みに関する多くの情報を見つけたことですが、x方向の画像の各行でこの1D畳み込みを行うことに固有のものは何もありません。見てみる別のより良い例はありますか?より良いクラスを使用するには?

0 投票する
2 に答える
1304 参照

c - DSP 開発ボード上の C を使用した 1D 畳み込みアルゴリズムのパイプライン処理

私が現在使用している DSP ボードは、Spectrum Digital の DSK6416 です。C 言語で畳み込みアルゴリズムを実装して、事前に録音されたインパルス応答アレイを使用して入力音声サンプルを畳み込みます。目的は、マイクに向かって話し、処理された効果を出力して、インパルス応答配列が得られる環境で話しているように聞こえるようにすることです。

私が今直面している課題は、畳み込みをライブで行い、割り込み関数の入出力速度を 8 kHz で維持することです。

これが私のブレインストーミングのアイデアです:

動作しない私の現在の非効率的な実装は次のとおりです。

割り込みは、畳み込みプロセスを停止し、インデックスを出力し、8 kHz または 1/8 kHz 秒で畳み込みを再開します。

ただし、畳み込みの完全な反復は、1/8kHz 秒よりもはるかに遅く実行されます。したがって、割り込みが出力配列からデータを出力したい場合、データはまだ準備ができていません。

高速パイプライン畳み込みアルゴリズムの私の理想的な実装:

時間の経過とともに完了したものを出力しながら、多くの畳み込みプロセスをバックグラウンドで実行します。多くのパイプが並行して実行されます。

パイプライン アプローチを使用する場合、N = 10000 のパイプライン プロセスをバックグラウンドで実行する必要があります...

C言語はオブジェクト指向をサポートしていないため、Cプログラミング言語を使用してこれをDSKボードに実装する方法がわかりません。

以下は、C 実装の疑似コードです。

ハードウェア DSP ボードでコンパイルする C コードにパイプラインを実装して、複数の畳み込み反復をバックグラウンドで同時に実行する方法はありますか?

絵は描いたのですが、この掲示板は初心者なので投稿できません。

私を助けるために私の絵のアイデアが必要な場合はお知らせください〜

このコードを実装する方法についてのヘルプは大歓迎です!!