問題タブ [dct]
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.
video - ビデオ圧縮: 離散コサイン変換とは?
離散コサイン変換と呼ばれる画像/ビデオ変換手法を実装しました。この技術は、MPEG ビデオ エンコーディングで使用されます。次の URL に示されているアイデアに基づいてアルゴリズムを作成しました。
http://vsr.informatik.tu-chemnitz.de/~jan/MPEG/HTML/mpeg_tech.html
これで、次のような白黒画像の 8x8 セクションを変換できます。
これには、すべての重要な情報が右上にある画像があります。変換されたブロックは次のようになります。
さて、この変換をどのように利用できるかを知る必要がありますか? 同じ画像 (または別の画像) で、一致する他の 8x8 ブロックを検出したいと思います。
また、この変換は私に何をもたらしますか? 変換された画像の右上に格納されている情報が重要なのはなぜですか?
jpeg - BMP から JPEG への変換についてヘルプが必要
BMP 画像を JPEG に変換する C++ プログラムを作成しています。
私が従おうとしている基本的なアルゴリズムは次のとおりです。
- RGB カラー スペースを Y、Cb、Cr に変換します。
- Cb と Cr を 2 ずつダウンサンプリングします (つまり、2*2 の正方形ブロックごとに 4 つの異なる Y 値がありますが、1 つの Cb と 1 つの Cr 値があります)。
- 各 8*8 ピクセルのデータ単位に DCT を適用します...
- 次に、Cb と Cr の標準量子化テーブルを使用して、DCT 係数に量子化を適用します。
- ジグザグに並べます。
- ハフマン符号化を使用して DC 係数と AC 係数を別々に符号化します。
- 適切なヘッダーを書き込み、ハフマンでエンコードされた値をファイルに書き込みます...
上記を正しく実行していることを確認しましたが、まだ次の問題があります。
- 生成中の JPEG が正しく表示されません。
- 色の値 R=10 B=10 および G=100 で完全に満たされた小さな 8*8 24 ビット (色深度) の bmp ファイルを作成しました... 64 ピクセルすべてが同じ色です..
- 私がすべてのステップで取得しているデータは次のとおりです...
- BMP ヘッダー サイズ 40
- ヘッダーのサイズ 40
- 幅8
- 高さ8
- 飛行機の数 1
- ピクセルあたりのビット数 24
- 画像サイズ 194
- x 解像度 1 メートルあたりのピクセル数 2834
- 1 メートルあたりの y 解像度ピクセル 2834
- 色数 0
- インプ色の数 0
- (R,B,G)=(10,10,100) の Y Cb Cr 変換は (62,-29,-37) です。
では、まず Y 成分について考えてみましょう。
Y 成分の DCT 係数は次のとおりです。
量子化の後、私が取得している単一のデータ単位のジグザグ順序は、Y コンポーネントの場合です。
上記のジグザグ配列のハフマンコーディングは次のとおりです。
- Y DC コーディング: 00111110
- Y ac コーディング: 1010 (ac ハフマン テーブル (輝度 Y) EOB 値は 1010 の場合)
- 同様に、Cb および Cr コンポーネントのハフマン コーディングは次のとおりです。
- cb dc コーディング: 11000010
- cb ac コーディング: 01 (ac ハフマン テーブル (クロミナンス Cb,Cr) の場合、EOB 値は 01)
- CR DC コーディング: 110101110
- cr ac コーディング: 01
私が得る最終的なハフマンコードは次のとおりです。
001111101010110000100111010111001 長さ 33
そのため、8 で割り切れるように、1 のパディングが行われます。
ここで、個々の 0 または 1 は、実際には JPEG ファイルにそのまま保存する必要があるビットですが、ビットごとにファイルに書き込むことができないため、合計 8 ビットが取得され、基数の整数値に変換されます。 10 となり、1 バイト文字に格納されます。
私が間違っている場所について誰か提案を提供できますか?
image-processing - DCT 圧縮 - ブロック サイズ、係数の選択
ブロック サイズの影響と、DCT 圧縮で係数を選択する最善の戦略を理解しようとしています。基本的に私はここに書いたことを聞きたいです:
最も原始的な圧縮を仮定しましょう。画像のブロックを作る。各ブログで DCT を実行し、いくつかの係数をゼロにします。
私の理解では、ブロックが小さいほど良いです。小さいブロックは、ピクセルがより相関していることを意味するため、DCT スペクトルのエネルギーはより「コンパクト」になります。高速で変化する画像 (高周波) では、より強調する必要があります。
係数の特定の割合をゼロにするとしましょう。ブロックのサイズが小さいか大きいかを問わず、最高の画質になるのはどれでしょうか? 10%、25%、50%、75% としましょう。異なるパーセンテージに対する別の答えだと思いますか?
もう 1 つの問題は、そのままにしておく係数をどのように選択するかです。エネルギーではなく場所に基づいて決定を下す必要があるとしましょう。左上隅から正方形を取りますか? DCT スペクトルの多くのブロックを平均して、左上隅から三角形を取得するのが最善であると結論付けました。どう思いますか?
有効な議論ができることを願っています。
java - Java: JPEG DCT 係数ヒストグラムの取得
JPEG ファイルの 64 個の DCT 係数の周波数分布を取得するには、Java ライブラリ、コード スニペット、... が必要です。
何か案は?どうも!
java - int[][] を渡す Java パラメータ
Java で単純な DCT アルゴリズムを作成しようとしています。私のfindDCTメソッドに、次のような整数配列をパラメータとして持たせたい:
では、このメソッドを宣言し、f[][] をプライベート変数として宣言して現在のクラスのコンストラクターで初期化する代わりに、パラメーターとして 'int[][] f' を渡すにはどうすればよいでしょうか?
java - JavaでのDCTおよびIDCTアルゴリズムの問題
ここに、「applyDCT」メソッドと「applyIDCT」メソッドを持つDCTアルゴリズムクラスがあります。技術的には、0〜255のランダムな整数の2x2テーブルで順方向DCT(離散コサイン変換)を実行し、すぐにこれらの数値で逆方向DCTを実行した後、最初に持っていた元の整数に戻る必要があります。私の場合、そうではありません。私はここで何が間違っているのですか?
そして、これがそれに伴うメインクラスです:
結果の例を次に示します。
上に示したように、「Back to f」は、最初にfに含まれていたのと同じ値を表示しません。
image-processing - エンコードされた画像とビデオからのDCT係数の抽出
エンコードされた画像とビデオからDCT係数(および量子化パラメーター)を簡単に抽出する方法はありますか?すべてのデコーダソフトウェアは、ブロックDCTでエンコードされた画像とビデオをデコードするためにそれらを使用している必要があります。だから私はデコーダーがそれらが何であるかを知っているとかなり確信しています。デコーダーを使用している人にそれらを公開する方法はありますか?
DCTドメインで直接機能するいくつかのビデオ品質評価アルゴリズムを実装しています。現在、私のコードの大部分はOpenCVを使用しているので、そのフレームワークを使用したソリューションを誰かが知っていれば素晴らしいと思います。他のライブラリ(おそらくlibjpegですが、それは静止画像のみのようです)を使用してもかまいませんが、私の主な関心事は、フォーマット固有の作業をできるだけ少なくすることです(車輪の再発明と書き込みはしたくない)私自身のデコーダー)。OpenCVが開くことができるすべてのビデオ/画像(H.264、MPEG、JPEGなど)を開き、ブロックDCTでエンコードされている場合は、DCT係数を取得できるようにしたい。
最悪の場合、自分のブロックDCTコードを記述し、解凍したフレーム/イメージを実行して、DCTドメインに戻ることができることを知っています。それは決してエレガントな解決策ではありません、そして私はもっとうまくやれることを願っています。
現在、私はかなり一般的なOpenCVボイラープレートを使用して画像を開きます。
私がビデオに使用しているコードも同様に簡単です。
IplImage
どちらの場合も、 BGR形式の3チャンネルを取得します。DCT係数も取得する方法はありますか?
matlab - MATLABで量子化レイヤーの数を見つける
私は画像処理に取り組んでおり、512x512マトリックスの8x8ブロックに対してDCT処理および量子化された画像があります。次に、画像の量子化レベルの数を確認する必要があります。左上のピクセルを取得して配列に配置し、これを呼び出しているグラフに配置する必要がありhist
ますか?
java - DCT係数の範囲MATLAB
画像のさまざまなブロックで8x8ブロックの係数が変化する範囲を見つけようとしています。matlabに関数がありますか?の値のヒストグラムを生成する必要がありますか?
compression - DCT圧縮
DCT ( D iscrete Cosine Transform ) は、サウンド(または任意の波形データ) の圧縮にどのように役立ちますか? DCT 変換によれば、結果として N 個の入力値と N 個の出力値があります。圧縮はどこで、どのように達成されますか?