LoginSignup
3
1

RGB画像を輝度画像に変換してみたよ

Last updated at Posted at 2023-11-28

RGBから輝度への変換

jpg画像をなどの一般のカラー画像は二次元の各ピクセルにRGBのベクトルが指定された三次元配列です。で、画像解析をするときはRGBではなく各ピクセルがどれくらいの強度の明るさを有しているか知りたい時があります。RGBの平均値を取るなど、適切でない手法でグレースケールにしてしまうと各ピクセルでの明るさとは対応していません。画像の各ピクセルに入射した光の明るさを示す値が輝度になります。今回はpythonを使って、RGB画像から輝度画像に変換しようという内容です。

具体的な変換式はRGB色空間からNTSC色空間に変換するときの輝度(Y)のみを計算しています。したがって、今回"輝度"と言っているのは"NTSC色空間のY"です。RGBが$(R, G, B)$で表される時、輝度$Y$は次式で求められます。

$$Y = 0.299 R + 0.587 G + 0.114 B$$

プログラム

import cv2
import numpy as np

def int_from_img(filename):
    img = cv2.imread(filename)
    
    with open(filename, 'rb') as f:
        binary = f.read()

    arr = np.asarray(bytearray(binary), dtype=np.uint8)
    img = cv2.imdecode(arr, -1)
    
    Luminance = 0.299*img[:,:,2] + 0.587*img[:,:,1] + 0.114*img[:,:,0]
    
    return Luminance

Luminance = int_from_img("imege_file_path")

プログラム最終行の"imege_file_path"に画像のpathを入力するとLuminanceに輝度画像が格納されます。

実行結果

例として化学っぽい画像を変換してみました。
元画像1

pexels-kindel-media-8325710.jpg

プログラムの変換後

y_image.png

以上です。

  1. https://www.pexels.com/ja-jp/
    からダウンロードしたフリー画像。

3
1
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1