プロが教えるわが家の防犯対策術!

画像圧縮について勉強していてあやふやなところがあり教えて頂きたいです.

変換前
|126, 138, 135, 118, 118, 126, 126, 130|
|150, 168, 161, 122, 105, 109, 100, 118|
|150, 150, 126, 150, 142, 126, 126, 117|
|150, 161, 168, 130, 134, 150, 138, 130|
|130, 118, 134, 142, 157, 142, 117, 126|
|115, 117, 108, 117, 101, 99, 117, 126|
|122, 130, 130, 138, 117, 108, 108, 138|
|142, 118, 134, 117, 109, 91, 126, 109|

変換後
|1029, 52, 10, -21, -1, -3, 2, 1|
| 39, 21, 0, 6, -22, -17, 4, -7|
| -40, 12, 24, -19, -2, 7, -4, 5|
| -32, -34, -1, -7, 5, -8, 5, -7|
| 22, -14, -10, 16, -12, 4, 12, 18|
| 19, -17, 1, -3, -6, -3, -2, -8|
| -24, -18, 3, 15, 9, 15, -20, 1|
| 9, -16, -30, 14, 29, -2, -5, -5|

URLから参考にしたものですが,変換すると右下から左上へと値が高くなっています.
これは圧縮することで,左上の情報量が大きくなる方法ということはわかります.
ですが,量子化する方法がよくわかりません.
この値を使ってどうすればいいのでしょうか.
変換前は濃度あたりだと思うんですが,変換後はマイナスの値がついててさっぱりです.

検索していろいろでてきたのですが,
難しくてわからないところもあったので
一言“量子化する”とかじゃなくて
“離散コサイン変換後の量子化方法はこうするものだ”という具体的なものができればききたいです.

最終的に画像圧縮プログラムを組もうと思っています.
圧縮までに必要な仮定を教えてください.

あと,プログラムはVisualC++OpenCVで組もうと思うのですが,勉強ですので関数を使うつもりはありません.
おまけですが,JPEGで離散コサイン変換するという方法があるみたいですが,IPLimageを使用するのは不可能ですか?

質問する場所がわからなかったのでここでさせて頂いたのですが,間違っていたら移動させますので教えて頂けるとありがたいです.

よろしくお願いします.

参考URL:http://fussy.web.fc2.com/algo/algo8-6.htm

A 回答 (3件)

> URLから参考にしたものですが,変換すると右下から左上へと値が高くなっています.


> これは圧縮することで,左上の情報量が大きくなる方法ということはわかります.

まず、一つ指摘をしておきます。離散コサイン変換は、情報量を減らしません。つまり、この変換は情報の圧縮を行っているわけではないのです。しかも、

> 変換前は濃度あたりだと思うんですが,変換後はマイナスの値がついててさっぱりです.

だとすると、”離散コサイン変換”が何をするものなのか、残念ながら理解できていないと思います。

> ですが,量子化する方法がよくわかりません.
> この値を使ってどうすればいいのでしょうか.

参考URL に、
> 画素ブロックの各要素に対して、量子化テーブルの同じ行列にある要素を使って量子化/逆量子化するため、
> 画素ブロックの各要素をSuv、量子化テーブルの各要素をQuvとすると、量子化・逆量子化変換式は次のようになります。

> 量子化 : Ruv = Suv / Quv
> 逆量子化 : Suv = Ruv X Quv

と、書かれています。
つまり、量子化テーブルの値で割り算をすればよいのです。
    • good
    • 0
この回答へのお礼

引き続き回答ありがとうございます.

そうですね.
もう一度フーリエのところから見直してみることにします.
回答者さんのおかげで,自分の理解のおかしいところがどこか気づけたのでよかったです.
URLの内容が読んでもわけがわからなかったので,参考に挙げて下さったキーワードをもとに理解を深めていこうと思います.
ありがとうございました.

お礼日時:2011/06/06 11:34

一般に非可逆な圧縮では、人間の感度が低い情報を省略することで圧縮します。

JPEG画像では細かな違いは大きな違いより目立たないことを利用し、周波数分解した画像データの高周波成分を省略することで圧縮します。
この周波数分解がDCTで、高周波成分の省略が量子化です。
量子化は簡単に言えば“丸め”です。この周波数成分はnビットで表すと決めたら、そのビット数で表現できるように値を丸めます。例えば0~9の値を取りうるところを1ビットで表すなら四捨五入で0,1にするとかです。
具体的な量子化ビット数などは規格で決まっていると思いますが詳細は知らないので調べてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます.
丁寧な説明助かります.
圧縮についてまだまだ勉強できていないところがあったので勉強になります.
参考させて頂きます.
ありがとうございました.

お礼日時:2011/06/06 16:22

まず、フーリエ変換って(雰囲気だけでも)理解してますか?



フーリエ変換自体は圧縮技術ではありません。
離散コサイン変換も、離散化による誤差は出るものの、基本的には可逆の変換であって圧縮技術ではありません。

圧縮するのに都合のいいデータにするための前処理です。

また、圧縮方法も決まったやり方があるわけではありません。JPEGではこうしている、というのは資料にあたればわかりますが、DCTを利用した圧縮が全て同じ方法を使っているわけではありません。


画像圧縮技術を自前で開発したいのなら、もうちょっと既存の技術について勉強してからにした方がよいでしょう。
単に圧縮したいだけなら、既存のフォーマットを使うのがいろいろと好都合です。

この回答への補足

回答ありがとうございます.

フーリエ変換は3年ほど前に授業で習ったので
自信はないですが大まかにぐらいは理解してるつもりです

私の質問方法が悪かったみたいです.
わざわざ回答を頂いたのに勘違いを招いて申し訳ありません.
既存の方法で,画像圧縮方法かつプログラムの勉強をしようと思っています.
それで,躓いたのが離散コサイン以降の処理に対する理解でした.
離散コサイン変換したあとの量子化の処理というのが,あまり良く理解できていないのでそれに対する解説が聞きたくて質問をしたしだいです.
量子化の言葉の意味はわかるが,具体的にどのような処理をするかわからないというものです.
もう少し自分でも勉強してみます.

よろしければ回答いただけると助かります.

補足日時:2011/06/04 21:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!