- ベストアンサー
画像圧縮の離散コサイン変換と量子化について
- 画像圧縮の離散コサイン変換とは、画像を周波数成分に変換する手法です。
- 量子化とは、変換後のデータを削減することで、画像を圧縮する処理です。
- VisualC++OpenCVを使用して、画像圧縮プログラムを作成する際には、関数を使わない勉強をする予定です。JPEG形式での離散コサイン変換にはIPLimageを使用することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> URLから参考にしたものですが,変換すると右下から左上へと値が高くなっています. > これは圧縮することで,左上の情報量が大きくなる方法ということはわかります. まず、一つ指摘をしておきます。離散コサイン変換は、情報量を減らしません。つまり、この変換は情報の圧縮を行っているわけではないのです。しかも、 > 変換前は濃度あたりだと思うんですが,変換後はマイナスの値がついててさっぱりです. だとすると、”離散コサイン変換”が何をするものなのか、残念ながら理解できていないと思います。 > ですが,量子化する方法がよくわかりません. > この値を使ってどうすればいいのでしょうか. 参考URL に、 > 画素ブロックの各要素に対して、量子化テーブルの同じ行列にある要素を使って量子化/逆量子化するため、 > 画素ブロックの各要素をSuv、量子化テーブルの各要素をQuvとすると、量子化・逆量子化変換式は次のようになります。 > 量子化 : Ruv = Suv / Quv > 逆量子化 : Suv = Ruv X Quv と、書かれています。 つまり、量子化テーブルの値で割り算をすればよいのです。
その他の回答 (2)
- rinkun
- ベストアンサー率44% (706/1571)
一般に非可逆な圧縮では、人間の感度が低い情報を省略することで圧縮します。JPEG画像では細かな違いは大きな違いより目立たないことを利用し、周波数分解した画像データの高周波成分を省略することで圧縮します。 この周波数分解がDCTで、高周波成分の省略が量子化です。 量子化は簡単に言えば“丸め”です。この周波数成分はnビットで表すと決めたら、そのビット数で表現できるように値を丸めます。例えば0~9の値を取りうるところを1ビットで表すなら四捨五入で0,1にするとかです。 具体的な量子化ビット数などは規格で決まっていると思いますが詳細は知らないので調べてください。
お礼
回答ありがとうございます. 丁寧な説明助かります. 圧縮についてまだまだ勉強できていないところがあったので勉強になります. 参考させて頂きます. ありがとうございました.
- kmee
- ベストアンサー率55% (1857/3366)
まず、フーリエ変換って(雰囲気だけでも)理解してますか? フーリエ変換自体は圧縮技術ではありません。 離散コサイン変換も、離散化による誤差は出るものの、基本的には可逆の変換であって圧縮技術ではありません。 圧縮するのに都合のいいデータにするための前処理です。 また、圧縮方法も決まったやり方があるわけではありません。JPEGではこうしている、というのは資料にあたればわかりますが、DCTを利用した圧縮が全て同じ方法を使っているわけではありません。 画像圧縮技術を自前で開発したいのなら、もうちょっと既存の技術について勉強してからにした方がよいでしょう。 単に圧縮したいだけなら、既存のフォーマットを使うのがいろいろと好都合です。
補足
回答ありがとうございます. フーリエ変換は3年ほど前に授業で習ったので 自信はないですが大まかにぐらいは理解してるつもりです 私の質問方法が悪かったみたいです. わざわざ回答を頂いたのに勘違いを招いて申し訳ありません. 既存の方法で,画像圧縮方法かつプログラムの勉強をしようと思っています. それで,躓いたのが離散コサイン以降の処理に対する理解でした. 離散コサイン変換したあとの量子化の処理というのが,あまり良く理解できていないのでそれに対する解説が聞きたくて質問をしたしだいです. 量子化の言葉の意味はわかるが,具体的にどのような処理をするかわからないというものです. もう少し自分でも勉強してみます. よろしければ回答いただけると助かります.
お礼
引き続き回答ありがとうございます. そうですね. もう一度フーリエのところから見直してみることにします. 回答者さんのおかげで,自分の理解のおかしいところがどこか気づけたのでよかったです. URLの内容が読んでもわけがわからなかったので,参考に挙げて下さったキーワードをもとに理解を深めていこうと思います. ありがとうございました.