10

画像圧縮に関する記事は、多くの場合、一定の圧縮率で最高の画質 (PSNR) を生成することに重点を置いています。最大許容ピクセルあたりのエラーを考慮して、可能な限り最高の圧縮率を得ることに興味があります。私の本能は、変換されたデータの最小の係数を貪欲に削除し、最大のエラーを渡さずにそれ以上削除できなくなるまで、私が引き起こしたエラーを追跡することです。しかし、私はそれを確認するための論文を見つけることができません. この問題に関する参考文献を教えてもらえますか?


編集

もう少し詳しく説明しましょう。通常の画像ではなく、3D スキャナーから深度画像を圧縮しようとしています。色は要因ではありません。深度画像には大きな滑らかなパッチが含まれる傾向がありますが、正確な不連続性が重要です。一部のピクセルは空 (スキャナーの範囲外または信頼度が低い) であり、圧縮を必要としません。

ここに画像の説明を入力

アルゴリズムは高速で実行する必要があります - Microsoft Kinect のように最適には 30 fps、または少なくとも 100 ミリ秒領域のどこかです。このアルゴリズムは、私が配布するライブラリに含まれます。私は依存関係を最小限に抑えることを好むので、適度に少量のコードで自分自身を実装できる圧縮スキームが望ましいです。

4

7 に答える 7

1

あなたが提案した問題の場合の参考文献は知りません。

ただし、私が考えることができる 1 つの方向は、最適化手法を使用して最適な係数を選択することです。これに関しては、遺伝的アルゴリズム、ヒル クライミング、シミュレートされた消滅などの手法を使用できます。

私は遺伝的アルゴリズムの経験があるので、次のプロセスを提案できます。遺伝的アルゴリズムについて知らない場合は、遺伝的アルゴリズムに関する wiki ページを読むことをお勧めします。

あなたの問題は、最小の再構成エラーを与える係数のサブセットを選択していると考えることができます。N 個の係数があるとします。2^N 個のサブセットがあることを確認するのは簡単です。各サブセットは、N 個の 2 進数の文字列で表すことができます。たとえば、N=5 の場合、文字列 11101 は、選択されたサブセットが coeff4 を除くすべての coeff を含むことを表します。遺伝的アルゴリズムを使用すると、最適なビット文字列を見つけることができます。目的関数は、再構成された信号と元の信号の間の絶対誤差として選択できます。ただし、すべての係数を取得すると、エラーがゼロになる可能性があることは承知しています。

この問題を回避するには、目的関数を適切な関数で変調することを選択できます。この関数は、目的関数の値がゼロに近づくのを妨げ、しきい値以降は単調に増加する関数です。| のような関数 log( \epsion + f ) | で十分かもしれません。

私が提案するものがあなたにとって興味深いと思われる場合は、お知らせください. 私は遺伝的アルゴリズムの実装を持っています。しかし、それは私のニーズに合わせて調整されており、この問題に適応させる立場にないかもしれません. この問題は調査するのが興味深いと思われるため、喜んでこの問題に取り組みます。

私に知らせてください。

于 2013-02-05T11:07:54.770 に答える
1

あなたは解決にかなり近づいていると思いますが、注意を払うべきだと思う問題があります。異なるウェーブレット係数は異なるスケール (およびシフト) を持つ関数に対応するため、特定の係数の除去によって導入される誤差は、その値だけでなくその位置 (特にスケール) にも依存するため、係数の重みは次のようになります。 amp(c) は係数の振幅でありw(c) = amp(c) * F(scale, shift)、F は圧縮データに依存する関数です。問題がバックパックの問題に縮小されるような重みを決定すると、多くの方法で解決できます (たとえば、対応する関数の影響を受けるピクセルでしきい値エラーが発生するまで、係数を並べ替えて最小のものを削除します)。難しい部分は、決定することですF(scale,shift). 次の方法でそれを行うことができます。圧縮しているデータが比較的安定している場合 (監視ビデオなど)、指定されたスケールとシフトを持つコンポーネントをウェーブレット分解から除外して、許容できないエラーを受け取る可能性が中間であると F を見積もることができます。したがって、履歴データに対してSVD(またはPCA)分解を実行し、「F(スケール、シフト)」を重み付き(固有値に等しい重み)のコンポーネントのスカラー積の合計として計算し、指定されたスケールで固有ベクトルにシフトすること F(scale,shift) = summ eValue(i) * (w(scale,shift) * eVector(i))ができます。は固有ベクトルに対応する固有値です - eVector(i), w(scale,shift) は指定されたスケールとシフトを持つウェーブレット関数です。

于 2013-02-05T11:37:19.430 に答える
1

「最小の係数を貪欲に削除する」と聞くと、最初の k 個の最大の固有値に関連付けられたデータを使用してデータを近似する SVD 圧縮を思い出します。小さい残りの固有値は重要な情報を保持していないため、破棄できます。
k が大きい -> 高品質、低圧縮
k が小さい -> 低品質、高圧縮

(免責事項:ここで何を話しているのかわかりませんが、役立つかもしれません)

編集:
これはSVD圧縮のより良い図です

于 2013-01-26T22:48:46.153 に答える
1

最大量のピクセルエラーを制限しようとするJPEG-LSアルゴリズムのようなものを探していると思います。とはいえ、主に自然画像または医療画像の圧縮用に設計されており、深度画像 (より滑らか) には適していません。

  • 「ほぼ可逆圧縮」という用語は、再構成された各画像サンプルが、対応する元の画像サンプルと、事前に指定された値 (通常は小さい) の「損失」を超えないほど異なる、非可逆アルゴリズムを指します。無損失圧縮は、損失 = 0 に対応します。元のリファレンスへのリンク
于 2013-02-07T08:56:47.603 に答える
1

さまざまな係数のセットを繰り返し評価しても、フレームを生成と同時に圧縮するという目標には役立たず、複雑さを低く抑えるのにも役立ちません。

深度マップは、いくつかの点で強度マップとは異なります。

  1. 「データなし」の大きな領域は、ランレングス エンコーディングによって非常に効率的に処理できます。
  2. 強度画像の測定誤差は、固定ノイズを差し引いた後の画像全体で一定ですが、Kinect とステレオ ビジョン システムの両方からの深度マップには、深度の逆関数として増加する誤差があります。これらが対象のスキャナーである場合は、より近いピクセルに損失の大きい圧縮を使用できます。損失関数が導入するエラーはセンサー エラーとは無関係であるため、損失関数のエラーがセンサー エラーよりも大きくなるまで、合計エラーは増加しません。 .
  3. Microsoft のチームは、ランレングス エンコーディングに大きく依存する非常に損失の少ないアルゴリズム (こちらの論文を参照) で多くの成功を収め、より優れた圧縮と優れたパフォーマンスで JPEG 2000 を打ち負かしました。ただし、成功の一部は、センサーが生成する比較的粗い深度マップから一歩踏み出したように見えました。Kinect をターゲットにしている場合、その方法を改善するのは難しいかもしれません。
于 2013-02-06T16:05:28.570 に答える
1

この回答は参考文献の要求を満たすものではありませんが、コメントとして投稿するには長すぎます。

まず、コンピューターで生成された画像の深度バッファー圧縮が適用される場合があります。通常、この圧縮は透過的なインターフェイスを使用してハードウェア レベルで行われるため、通常はシンプルで高速になるように設計されています。これを考えると、深度バッファ圧縮を検索する価値があるかもしれません。

変換ベースのコンプレッサー (DCT、ウェーブレットなど) で発生する主な問題の 1 つは、ハード最大誤差基準を満たすコンパクトな係数を見つける簡単な方法がないことです。(最終的に発生する問題は、線形計画法によく似ています。ウェーブレットは、ほとんどの基底ベクトルでローカライズされた動作を持つことができ、多少は役立ちますが、それでもかなり不便です。) 希望する精度を達成するには、別のものを追加する必要がある場合があります。洗練ステップですが、これにより計算時間と複雑さが増し、別のレイヤーの不完全なエントロピーコーディングが導入され、圧縮効率が低下します。

あなたが望むのは、非可逆圧縮よりも可逆圧縮に似ています。この観点から、1 つのアプローチは、エラーしきい値未満のビットを単純に破棄することです。最大許容エラーが X で、深さが整数として表される場合、深さを X で整数分割してからロスレス圧縮を適用します。

あなたが直面しているもう 1 つの問題は、深さの表現です。状況によっては、浮動小数点数、整数、射影座標系、またはさらに奇妙な場合があります。

これらの制限を考慮すると、 BTPCのようなスキームをお勧めします。これにより、エラーがより明確にローカライズされ、理解と説明が容易になるウェーブレットのようなスキームをより簡単に適応させることができます。さらに、BTPC は多くの種類の画像に対して優れた耐性を示し、忠実度の低下が少ない連続的なグラデーションとシャープなエッジを処理する優れた能力を示しています。

BTPC は予測的であるため、深度形式がどのように格納されるかは特に問題ではありません。予測子を変更して、座標系と数値型 (整数と浮動小数点) を考慮に入れるだけで済みます。

BTPC はそれほど多くの計算を行わないため、一般的な CPU でもかなり高速に実行できますが、ベクトル化は簡単ではありません。(低レベルの最適化されたゲーム プログラミングを行っている可能性があるため、これは真剣に検討する必要があるかもしれません。)

より簡単に実装できるものを探している場合は、Golomb-Rice コーダーを取り付けた「フィルター」タイプのアプローチ ( PNG に似ています) を勧めしますデルタを完全にコーディングしてロスレス圧縮にするのではなく、「十分な」程度にコーディングできます。量子化してからロスレスでエンコードするスタイルのコンプレッサーと比較して、これを行う利点は、潜在的により多くの連続性を維持できることです。

于 2013-02-12T15:25:25.460 に答える