2次元画像処理 新しいページはコチラ
提供: yonewiki
(ページの作成:「== '''概要''' == 画像処理には、大きく分けて2種類の分野について理解が必要となると思います。 *画像種類別によるエンコー...」) |
|||
1行: | 1行: | ||
+ | [[メインページ#言語と開発環境|言語と開発環境]]へ戻る。 | ||
+ | |||
+ | |||
== '''概要''' == | == '''概要''' == | ||
画像処理には、大きく分けて2種類の分野について理解が必要となると思います。 | 画像処理には、大きく分けて2種類の分野について理解が必要となると思います。 | ||
19行: | 22行: | ||
− | + | ここでは、TIFF・BMP・JPEG・GIF・PNG・RAW形式のエンコード・デコードに関する考え方や具体的な手法を記述したり、2次元の範囲の幾何学を利用した図形描画や図形操作・画像処理について記述したいと思います。たぶんJPEGあたりの記事を書き始めたら終わらないと思うので、せいぜい頑張ってもそのあたりで右往左往していることでしょう。 | |
37行: | 40行: | ||
− | + | で、JPEGエンコードとかデコードって何やってんの?ってことなんですけど、BMPのようなRGB系で管理された画像配列をエンコードしてJPEGの形式にするには以下のような処理を実施しています。何をやっているかの説明はしないのでここでは理解しなくてよいと思います。どんな感じのことをやっているかをなんとなしにしってもらえればと思っています。ここではよくやられているJPEGの書き込み時の圧縮方法についての流れを少しふれます。最近はよくやられていないJPEG圧縮手法もあと何個かくらいあります。プログレッシブとかSpatialとかロスレスとか算術符号化とかですかね。要するに以下の方法だけではないですが、と付け加えたいということです。まぁでもおおまかには以下のようなことをやっています。 | |
*RGB系からYUV系(輝度・色差UとV)へ変換 | *RGB系からYUV系(輝度・色差UとV)へ変換 | ||
− | * | + | *16ピクセルx16ピクセルのブロックごとにYUV1~YUV12という構成要素の配列に変換する。YUV1~4が輝度情報Yに関する演算、5~8が色差Uに関する演算、9~12が色差Vに関する演算。間引きという手法で考えれば、YUV4:1:1間引きでは情報は8ピクセルx8ピクセルに集約されます。輝度情報が大事で色さ情報が間引かれても人間にはわからない。そういうことらしいです。間引きしない場合は8ピクセルx8ピクセルのブロックごとに画像全体に対して、以降の処理が逐次処理されます。 |
− | *DCT(離散コサイン変換) | + | *DCT(離散コサイン変換)YUV1~12をDCT1~12という構成要素に変換。間引いている場合は要素数は12→6にまで減ります。以下同じです。 |
− | * | + | *DCT1~12を量子化してDCT_量子化1~12という構成要素に変換。このときY輝度変換テーブル64要素とUV色差変換テーブル64要素を利用。StepSizeつまりは量子化の分解能の係数をあたえるのですが、これが次の符号化で圧縮率を変化させます。 |
*DCT_量子化1~12という構成要素をハフマン符号化という処理を行う。これがBitStreamを生成する。このとき輝度・色差のそれぞれに対してのDC差分エンコードであるとか、AC成分エンコードを先に実施することになっている。 | *DCT_量子化1~12という構成要素をハフマン符号化という処理を行う。これがBitStreamを生成する。このとき輝度・色差のそれぞれに対してのDC差分エンコードであるとか、AC成分エンコードを先に実施することになっている。 | ||
*ビットストリームへの各種情報付加(こんな一言でごまかすな的な内容の処理ですが…) | *ビットストリームへの各種情報付加(こんな一言でごまかすな的な内容の処理ですが…) | ||
49行: | 52行: | ||
というような処理をしています。それで、読み込むときのデコードでは、おおよそ逆の順番でもとに戻そうとする処理をします。元のBMP情報とまったく同じ表示にはなりません。情報は欠落して人間にはあまりわからないような、ある程度似た値にごまかされて復元されます。各変換時における係数があって、その係数で圧縮率をあげると人間でも劣化がわかります。あと目の肥えた人は少しでもJPEG化されていると圧縮されているかどうかが判別できるそうです。ほんとか? | というような処理をしています。それで、読み込むときのデコードでは、おおよそ逆の順番でもとに戻そうとする処理をします。元のBMP情報とまったく同じ表示にはなりません。情報は欠落して人間にはあまりわからないような、ある程度似た値にごまかされて復元されます。各変換時における係数があって、その係数で圧縮率をあげると人間でも劣化がわかります。あと目の肥えた人は少しでもJPEG化されていると圧縮されているかどうかが判別できるそうです。ほんとか? | ||
+ | |||
+ | |||
+ | おおまかにかきましたが、項目の2つめ以降は何を言っているかさっぱりわからない人がほとんどだったかもしれません。構成要素ってDCTって?量子化とは?ハフマン符号化?まぁまぁあせらずに、そういうことは時間をかけて文章にしていかなければならないと思ってはいます。キーワードだけでも書いておけば各々で個別に調べることもできるわけで、急いでいる人はそうやって紐解いていってほしいですね。 | ||
+ | |||
そんなわけで、すこしづつですが、ここに書いていく予定です。 | そんなわけで、すこしづつですが、ここに書いていく予定です。 | ||
+ | |||
+ | |||
+ | *[[2次元画像処理 BMP]] | ||
+ | *[[2次元画像処理 JPEG]] | ||
+ | *[[2次元画像処理 GIF]] | ||
+ | *[[2次元画像処理 PNG]] | ||
+ | *[[2次元画像処理 TiFF]] | ||
+ | *[[2次元画像処理 画像処理]] | ||
+ | |||
+ | |||
+ | [[メインページ#言語と開発環境|言語と開発環境]]へ戻る。 |