問題タブ [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 に答える
12808 参照

python - MATLABのconv2関数に相当するPythonはありますか?

PythonまたはそのモジュールのいずれかにMATLABのconv2関数と同等のものがありますか?具体的にはconv2(A, B, 'same')、MATLABと同じ計算を行うものに興味があります。

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

wolfram-mathematica - Mathematica での補間関数の畳み込み作業

Mathematica 7 を使用しています。

補間関数があります。例を次に示します。

導関数を計算したいのですが、これは簡単です:

さて、この関数をプロットすると

(申し訳ありませんが、Mathematica 内から画像を投稿する方法がわからず、それを理解する時間がありません。)非常にノイズが多いことがわかります。では、滑らかにしたいと思います。私が最初に考えたのは、Convolve を使用して、次のようなガウス カーネルに対して統合することでした。

戻り値

これは私には合理的に見えます。残念ながら、返された結果は評価できないように見えるため、どこかで間違いを犯したと思います。あれは:

戻り値

これは私が探していたものではありません。-1 から 1 の間の数値を期待しています。

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

graphics - 畳み込み行列にプラグインする特定の行列を探しています

畳み込み行列アルゴリズムが既に機能していると仮定して、特に画像処理に役立つ一般的な行列の実用的な例を探しています。

どこにでもある標準的な例は、非ガウス ボックス ブラーです。

画像のシャープ化:

エッジ検出:

とエンボス:

私が見逃しているものは他にありますか?

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

visual-c++ - 畳み込み法を使用して 35 x 35 カーネルを処理する

皆さん、35 x 35 カーネルを使用して畳み込みを行いたいと思います。なにか提案を?またはopencvですでに使用できる方法はありますか?現在、cvfilter2d は 10 x 10 カーネルまでしかサポートできないためです。

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

c++ - 1D 畳み込みの最適化

この 1D 畳み込みを高速化する方法はありますか? dy キャッシュを効率的にしようとしましたが、g++ と -O3 でコンパイルするとパフォーマンスが低下しました。

[-1 で畳み込みます。, 0., 1] 両方向。宿題ではありません。

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

c - DSP の高速 2D 畳み込み

ビーグルボードで実行することを目的とした画像処理アルゴリズムを実装したいと考えています。これらのアルゴリズムは、畳み込みを広範囲に使用します。2D 畳み込み (おそらく高速フーリエ変換を使用) の適切な C 実装を見つけようとしています。また、ビーグルボードの DSP でアルゴリズムを実行できるようにしたいと考えています。なぜなら、DSP はこれらの種類の演算 (積和命令を使用) に最適化されていると聞いたからです。

私はこの分野のバックグラウンドを持っていないので、畳み込みを自分で実装するのは良い考えではないと思います (おそらく、その背後にあるすべての数学を理解している人ほどうまく実装できないでしょう)。DSP の優れた C 畳み込み実装がどこかにあると思いますが、見つけることができませんでしたか?

誰か助けてくれませんか?

編集:カーネルはかなり小さいことがわかりました。寸法は 2X2 または 3X3 です。だから私はFFTベースの実装を探していないと思います。Webで畳み込みを検索してその定義を確認していたので、簡単な方法で実装できます(畳み込みが何であるかはよくわかりません)。私が見つけたのは、積分を乗算したものだけで、行列でそれを行う方法がわかりません。誰かが 2X2 カーネルの場合のコード (または疑似コード) を教えてくれませんか?

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

matlab - filter2 関数でのフィルター行列の回転の物理的な意味

MATLAB 2D フィルター関数filter2(B,X)と畳み込み関数を使用conv(X,B,'')しているときに、filter2関数は基本的に 2D 畳み込みですが、フィルター係数行列が 180 度回転していることがわかります。filter2との出力に関してはconv2、以下の関係が成り立つことがわかります。

編集:私は間違っていました。上記の関係は一般には当てはまりませんが、いくつかのケースで見られました。一般に、畳み込みに使用される 2 つのまったく異なるカーネルが両方で取得されるため、2 つの出力行列は無関係です。

2D 畳み込みがどのように実行されるかを理解しています。私が理解したいのは、画像処理用語におけるこれの意味です。ここで何が起こっているかを視覚化するにはどうすればよいですか? フィルター係数行列を 180 度回転させるとはどういう意味ですか?

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

signal-processing - FFT の長さはフィルタリングの精度に影響しますか?

非整数遅延フィルターを設計しています。私のラグランジュ係数は 5 h(n) で、時間領域に 6 つのタップがあります。matlab を使用して 5000 サンプリングされた信号である x(n) で h(n) をたたみ込むことをテストしましたが、結果は問題ないようです。FFT と IFFT メソッドを使用しようとすると、出力が完全に間違っています。実際、FFT は周波数領域で 8192 データを使用して計算されます。これは、5000 信号サンプルの最も近い 2 のべき乗です。IFFT 部分では、8192 の周波数ドメイン データを時間ドメインの 5000 の長さのデータに戻します。したがって、問題は、なぜこれが畳み込みでは機能するのに、FFT 乗算では機能しないのかということです。周波数ドメインで 6 タップ h(n) を 8192 タップに変換すると、この問題が発生しますか?

実際に、x(n) の小さなチャンクで FFT と乗算を実行し、それを 5 回別々に実行するオーバーラップ セーブ メソッドを使用してみました。結果は前より少し良くなったようで、少なくとも波形パターンは確認できますが、まだ少し歪んでいます。それで、どこがうまくいかないのか、そして解決策は何ですか。ありがとうございました。

時間領域ではなく周波数領域で循環畳み込みを実装している理由は、実装がより効率的になるように、ラグランジュ フィルターを周波数領域の他のローパス フィルターとマージしようとしているためです。もちろん、周波数ドメインでのフィルタリングの実装は、時間ドメインでの畳み込みよりもはるかに高速になると信じています。LP フィルターには、時間領域で 120 のタップがあります。メモリの制約により、パディングを含む生データの長さは 1024 に制限され、fft ビンも同様です。

私のラグランジュ係数には 6 タップしかないため、1024 タップとは大きく異なります。周波数領域での 6 タップから 1024 ビンへの fft がエラーを引き起こすとは思えません。これは、ラグランジュフィルターのみの私のmatlabコードです。これは単なるテスト コードであり、実装コードではありません。ちょっと雑です、すみません。この問題についてさらにアドバイスをいただければ幸いです。ありがとうございました。

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

image-processing - アルファブリードの問題を解決するために画像畳み込み中に事前乗算を使用する方法は?

透明な画像にボックス ブラーを適用しようとしていますが、エッジの周りに「暗いハロー」が表示されます。

Jerry Huxtableはこの問題について簡単に言及しており、問題が発生したことを示す非常に優れたデモがあります。

ここに画像の説明を入力

しかし、私の人生では、「事前に乗算されたアルファ」がどのように問題を解決できるかを理解できません。次に、非常に単純な例を示します。私は 1 つの赤と 1 つの緑のピクセルを含む 3x3 の画像を持っています。

ここに画像の説明を入力

実際には、残りのピクセルは透明です。

ここに画像の説明を入力

次に、画像に 3x3 ボックス ブラーを適用します。簡単にするために、中央のピクセルの新しい値のみを計算します。ボックス ブラーが機能する方法は、9 位置の正方形 (カーネルと呼ばれる 3x3) があるため、カーネル内の各ピクセルの 1/9 を取得し、それを合計することです。

ここに画像の説明を入力

そう

この非常に単純化された例では、計算は非常に単純になります。

これにより、次の最終的な色の値が得られます。

ここに画像の説明を入力

この色は暗すぎる。Photoshop で同じ 3x3 ピクセルの画像に対して 3px ボックス ブラーを実行すると、次のような結果が得られます。

ここに画像の説明を入力

白の上に表示すると、どちらがより明確になります:

ここに画像の説明を入力


実際には、透明なテキストを含むビットマップでボックスぼかしを実行しています。テキストは、フリンジの周りが暗くなっています。

ここに画像の説明を入力

私はPixelFormat32bppARGBフォーマットされているGDI +ビットマップから始めています


3x3 畳み込みカーネルを適用するときに「事前に乗算されたアルファ」を使用するにはどうすればよいですか?

次の理由から、回答には新しいフォーラムを含める必要があります。

間違った答えを得ています。


編集:より簡単な例は次のとおりです。

0..1 の範囲の色とアルファ値でこの計算を実行します。

ここに画像の説明を入力

ボックス ブラー畳み込みフィルターを中央のピクセルに適用します。

これにより、かなり透明な濃い緑色が得られます。

ここに画像の説明を入力

これは私が期待するものではありません。比較すると、Photoshop の Box Blur は次のようになります。

ここに画像の説明を入力

事前に乗算されたアルファであると想定(0, 0.33, 0, 0.33)し、乗算を解除すると、次のようになります。

ここに画像の説明を入力

これは、私の完全に不透明な例に適しています。しかし、部分的に透明なピクセルを使用し始めたときにどうすればよいかわかりません。

こちらもご覧ください

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

textures - テクスチャメモリ内の大規模カーネルによるGLSL畳み込み

私はGLSLを初めて使用しますが、画像処理用のフラグメントシェーダーで畳み込みカーネルを作成しようとしています。カーネルが小さい場合(3x3)、定数行列を使用してこれをうまく行うことができました。ただし、ここでは、サイズ9x9のカーネルを使用したいと思います。または、任意のサイズの問題について。私の最初の考えは、畳み込みカーネルを含むテクスチャメモリをセットアップすることでした。次に、2Dsamplerを使用して、カーネルのテクスチャメモリを読み取り、それを画像のテクスチャメモリ(これも2Dsampler)と畳み込みます。これはこれについて行く正しい方法ですか?

係数を含む任意のサイズの配列を作成することもできると思います。これは81の係数で機能する可能性がありますが、もっと大きなものが必要な場合はどうなりますか?20x20と言うように?

一般に、GLSLで複数の大きなオブジェクトにアクセスする必要がある場合、適切な戦略は何ですか?ありがとう!ありがとう、

D