0

私は画像認識(マーカー検出)に取り組んでおり、性能を向上させるために画像のダウンサンプリングの事前認識を検討していました。推論では、イメージをダウンサンプリングし、その上で検出アルゴリズムを実行し、ダウンサンプリング係数を使用してマーカ座標を補間します。私はダウンサンプリングのコストは、それが私たちのGPUによって常に行われているので些細なことだと思った。画像のダウンサンプリング性能

私はopencvを使ってダウンサンプルしてみましたが、改善が得られなかっただけでなく、実際にはもっと長い時間がかかりました。それで、私はCPUを作っていたからだと思ったので、私はopenglミップマップやシェーダーを使ってダウンサンプリングを検討しましたが、私が読んだところでは、一般的なイメージを半分にするのに数十ミリ秒決議。

私の質問は、ダウンサンプリングが明らかに簡単に行われている(画像ビューアの画像のサイズ変更やビデオゲームのテクスチャのサイズ変更を考えている)のはなぜですか?秘密の技術があるのですか、何かを理解していないだけですか?

+0

テクスチャの大きさはどれくらいですか?どのようにそれらをGL APIにアップロードし、結果を読み返していますか?それは完全にアップロードとリードバックのコストは、ダウンサンプル自体ではなく、高価な部分です。 – solidpixel

+0

@solidpixelは通常1280x720 - > 640x480の処理を行います。 glTexImage2Dを使用してRAMからロードし、ミップマップ(glGenerateMipmap)を生成し、次にglGetTexImageを使用して2番目のミップマップを取得します。 –

+1

@AlexButeraなぜ、 'glGetTexImage'が必要ですか?これはあなたのアプローチが遅い正確な理由です。 AFAIRでは、ピクセルデータを前後に移動したり、新しいテクスチャオブジェクトを作成したりすることなく、必要なミップマップレベルを明示的に指定することができます。 – hidefromkgb

答えて

0

イメージをテクスチャとして設定し、このテクスチャをクワッドに使用することができます。テクスチャの座標を変更すると、画像上の任意の変形を行うことができます。それは非常に速い方法です。ここでのボトルネックは、画像をホストからデバイスにコピーして戻すことです。

+1

テクスチャフィルタリングは、2:1のダウンサンプルよりも高いダメージを修復することはできません。シングルパスでのダウンサンプリングレートが高いほど、データをフィルタリングするのではなく廃棄し始めます。 – solidpixel

+0

これはどういう意味ですか?クワッドとは何ですか?あなたはopenglについて話していますか? –

+0

はい、私はOpenGLを意味します。画像をテクスチャとしてGPUメモリにアップロードし、クワッドにバインドしてバッファに描画し、結果をコピーし直します。 –

関連する問題