- PR -

減色のアルゴリズムについて。

1
投稿者投稿内容
シミー
会議室デビュー日: 2004/02/22
投稿数: 16
投稿日時: 2004-03-05 14:54
javaを使用して、イメージファイルの減色処理をしようと思っています。

RGB( 8:8:8 )24ビット割り当てられて構成されているjpeg形式のイメージファイルを、
RGB(5:6:5)16ビットに割り当てるようにすることで、減色するとこが可能であると思いますが
どういったアルゴリズムで処理を行っていけば、可能なことなのでしょうか?

24ビットのイメージを、アルファなしの 5-6-5 RGB 色成分 (5 ビットの赤、6 ビットの緑、5 ビットの青)に、DirectColorModel を構築しようと思いましたが、うまくいきません。

BufferedImageクラスの、TYPE_USHORT_565_RGBを使用しましたが、RGB( 8:8:8 )24ビットのjpeg形式のものを読み込んで、出力しましたがRGB( 8:8:8 )24ビットのままでした。

また、RGB 8ビットのgif形式のイメージファイルを読み込み、同じ処理をしたのち、jpeg形式で
出力しましたが、こちらもRGB( 8:8:8 )24ビット構成になっていました。

RGBの割り当てられているビット数を変換して、出力したい場合の処理は、どうすればよいのかよいアドバイスをしてくださる方いらっしゃいましたら、お願いいまします。

今、現在試していることは、24ビットで構成されたjpeg形式のイメージを、8ビットのグレースケ−ルに変換するとこはできました。


[ メッセージ編集済み 編集者: 谷 勝 編集日時 2004-03-05 14:55 ]
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-03-05 20:21
減色された後、JPEGで出力しているのでしょうか?
もしそうなら、そもそもJPEG形式に RGB(5:6:5)って存在しましたでしょうか?
JPEGの形式って、次の2種類しかないように思います。
・グレースケール(Yコンポーネントが1つ、値は8bit)
・カラー(Y/Cb/Crの3コンポーネント、各値は8bit)

http://www.jpeg.org/jpeg/index.html
http://www.jpeg.org/public/jfif.pdf
http://siisise.net/jpeg.html
http://webs.lanset.com/crazy17/jp/lab/jpeg1.htm
シミー
会議室デビュー日: 2004/02/22
投稿数: 16
投稿日時: 2004-03-05 22:36
ちいにぃさん、ご返信ありがとうございます。

ちいにぃさんのおっしゃる通り、RGB(5:6:5)でのJPEGの形式の出力はできていません。
どのような方法をとっても、すべてRGB各8ビットのものしか出力されませんでした。

ですが私の知り得た情報では、jpeg形式は最大24ビット(1670万色)まで扱うことができ、
現在の携帯電話などのモバイルコンテンツで主流なのは、
サイズ120px × 160px , RGB16bit , jpeg形式 , 容量5kbyte以下、というものだとお聞きしました。
私の認識でも、ちいにぃさんとおっしゃる通りのものでした。
実際に、携帯電話の画像をPCに添付して送って、その画像を情報を見てみたところ、やはり24ビットで構成されていました。

ですので、こちらでいろいろな方の意見をお聞きしたく、書き込みのほうさせていただきました。

実際のところは、どうなのでしょうか?
また、jpeg形式、gif形式を含め、減色方法はなにかあるのでしょうか?

アドバイスのほど、よろしくお願いします。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-03-06 01:12
引用:

谷 勝さんの書き込み (2004-03-05 22:36) より:
(略)
ですが私の知り得た情報では、jpeg形式は最大24ビット(1670万色)まで扱うことができ、
現在の携帯電話などのモバイルコンテンツで主流なのは、
サイズ120px × 160px , RGB16bit , jpeg形式 , 容量5kbyte以下、というものだとお聞きしました。



16bitって、もしかすると。

1つ前の私の発言で紹介したサイトからの情報ですが、

1 pixel = R(8bit)/G(8bit)/B(8bit) を Y/Cb/Cr変換して、Y(8bit)/Cb(8bit)/Cr(8bit)。
CbとCrをダウンサンプリング (Y:Cb:Cr = 2:1:1) すると、Y(8bit)/Cb(4bit)/Cr(4bit)で、16bit/pixelになりますよね。


また、「携帯電話で扱う画像」が対象なのでしたら、そのことを詳しく述べられた
方が的を射た回答が得られたと思います。

携帯電話の各キャリアともそういった情報が公開していますから、該当のキャリア
の対応画像形式のページのリンクを示して、「このページで示されているJPEGの
16bitの画像をJavaで生成する手順がわかりません。なにか情報はありますか」
とか聞いた方がよりつっこんだ情報を聞けると思います。
1

スキルアップ/キャリアアップ(JOB@IT)