その漫画自炊オタクはImageJマクロに恋をする

プログラミングを用いた、自炊漫画の画像処理

【ImageJマクロ応用編】#3 カラー画像のピクセル値を取得する方法

 

 



 

 

皆さまこんにちは。

このまえPS2を買いました、yu3xx(ゆーさんちょめちょめ)です。

 

 

 以前のおさらい


まえに投稿した「二次元画像のピクセル値を取得する方法」の記事では、「getPixel(x,y)」を使って「画像のピクセル値を取得する方法」について解説しました。

 

この超入門#8の記事は、「8bitグレースケール画像」を対象にした内容でした。

 

残念なことに、「RGBカラー画像」に対して「getPixel」を使ってしまうと、ヘンテコな値が出てきます。

 

これは「RGBカラー画像」においては、1つのピクセルの中に「赤256階調、緑256階調、青256階調の、3種類の情報」が突っ込まれているからです。

 

 


そこで今回は、「カラー画像のRGBピクセル値をそれぞれ取得する方法」について解説します。

 


もくじ

 

 

結論

 

めんどいので、まず結論だけ言っちゃいます

 

カラー画像のピクセル値を、赤緑青のRGBでそれぞれ数値化したい場合には、以下の自作関数を「getPixel(x,y)」の代わりに使います。

 

※ 座標(下記の例では0,0)は、自分で好きな座標を打ち込んでください。

 


var red,green,blue;

getPixelRGB(0,0);

print(red,green,blue);

//-----------------------------------------------------------------------------

function getPixelRGB(x,y){
	v = getPixel(x,y);
	red = (v>>16)&0xff;  // right shift 16 bits, and extract lower 8 bits
	green = (v>>8)&0xff; // right shift 8 bits, and extract lower 8 bits
	blue = v&0xff;       // extract lower 8 bits
}

//-----------------------------------------------------------------------------

 

返したい値が3つあるので、グローバルな変数red, green, blueを用意してから、その中に値を格納します。それぞれ「148, 150, 149」が格納されました。

 

これで終了です。

 

 

適当な説明

 

・getPixelは、1つの値しか返せない。

 

・RGB値 = 148, 150, 149 のピクセルにgetPixelすると、「-7039339」なる値が吐き出される。

 

・7039339(10進数)は、0110 1011 0110 1001 0110 1011(2進数)。

 

・これに2の補数(ビット反転して+1)することで、-7039339(10進数)は、1001 0100 1001 0110 1001 0101(2進数)。

 

・この24bitのうち、頭側8bitがred、まんなか8bitがgreen、お尻側8bitがblue。

 

・このナマの値にbit演算することでRGBを取り出すことができる。

 

・「>>」は右シフト。「v>>16」は、vを2進数表現したものを「右に16bitシフト」させる。

 

「&」はAND。

 

・「0x」はプログラミング界の約束事で「16進数だよ、これ」の表現。

 

・16進数の「ff」は、2進数では「1111 1111」。

 

・「1111 1111」のANDは、「下位の8bit分を取り出す命令」に同じ。

 

・RGBそれぞれのピクセル値をふまえて、1つの値(8bitグレースケール変換した値)を取り出したいなら、(red+green+blue)/3するといい。これはunweighted。

 

・0.299*red + 0.587*green + 0.114*blueすれば、weighted。

 

・RGB画像は32bit。色表現に必要なbitは8*3=24bit。残り8bitは仕事してたり、してなかったり。32はコンピュータの好み。

 

・RGB画像にbitDepth()すると24。でも実際には1pixelあたり32bitらしい(show info)。たぶん先頭8bitは1埋め。

 

 

 

 

 

まとめ

 

 RGB画像のピクセルの中には、3つの色情報が納められている!取り扱いに注意!

 

 

 

 


おしまい

 

 

  

 

・公開したマクロのまとめ

imagej-jisui.hatenablog.com