クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

画像をグレースケールにする

このレッスンのあとで: 重みを使って、カラーの画像をグレーの画像に直せる。

60分のレッスンコマンド2件コンピュータビジョンラボ:JupyterLab でピクセル、しきい値、物の数え方

グレースケールは明るさだけの画像

グレースケールとは、色の情報を捨てて、明るさだけを1つの数で表した画像です。多くの画像処理は、まず画像をグレーにすることから始まります。

色の3つの数が1つになるので、計算は約3分の1で済みます。物の形や明るさを調べるだけなら、色はいりません。

このレッスンのゴール

メモ

重みを使って、カラーの画像をグレーの画像に直せる。

キーワード

ことばいみれい
グレースケール明るさだけを1つの数で表した画像
輝度人の目に感じる明るさ
重み数にかける割合。大きいほど効く299
チャンネル1つのピクセルが持つ数の1つ
切り捨て小数点以下を捨てて整数にすること

学生が入力するセルは、このプレビューでは空白です。

赤、緑、青に別々の重みをかけて足す

人の目は、緑をいちばん明るく、青をいちばん暗く感じます。そこで、グレーの値は、3つの数に別々の重みをかけて足して作ります。

重みは、赤が 0.299、緑が 0.587、青が 0.114 です。この3つを足すと 1 になるので、結果は 0 から 255 のままです。

例: (197, 157, 62) をグレーにする

チャンネル値重み値 × 重み(1000倍)
赤19729958903
緑15758792159
青621147068
合計1000158130

学生が入力するセルは、このプレビューでは空白です。

合計を 1000 で割ると、グレーの値が出る

重みを整数にして 1000 倍にすると、計算は整数のままでできます。合計の 158130 を 1000 で割って切り捨てると、158 です。

次のコマンドは、表の合計を計算します。

重みをかけた合計を求める

コマンド
docker exec jupyter python3 -c "print(299 * 197 + 587 * 157 + 114 * 62)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

単純な平均では、明るさがずれる

3つの数の平均を取れば、もっと簡単にグレーが作れそうです。しかし、この例では (197 + 157 + 62) を 3 で割って切り捨てると 138 になり、重みを使った 158 より暗くなります。

目が緑を明るく感じる分を、平均は取り入れません。

ラボでグレーにして、明るさを数える

次のスクリプトは、coins.png をグレーにして、2つの画像のモードとピクセルを表示します。さらに、明るさを4つの帯に分けて、帯ごとのピクセルの数を出します。

出力は英語です。colour は色、grey はグレー、pixels from 0 to 63 は、0 から 63 の明るさのピクセルの数です。

画像をグレーにして、帯ごとに数える

コマンド
docker exec jupyter python3 steps/grey.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

出力から分かること

モードは RGB から L に変わります。50, 50 のピクセルは、(197, 157, 62) からグレーの 158 になります。

帯ごとの数は、63231、0、13566、3 です。暗い背景と明るいコインの2つのかたまりがあり、真ん中の帯には1つもありません。足すと 76800 で、全部のピクセルです。

3つの色をグレーにする

コード: python
colours = [[255, 0, 0], [0, 255, 0], [0, 0, 255]]
for pixel in colours:
    total = 299 * pixel[0] + 587 * pixel[1] + 114 * pixel[2]
    print(pixel, "のグレー:", total // 1000)
# 3つ目の [0, 0, 255] を [255, 255, 255] に変えて、もう一度実行します。
# グレーは、いくつになりますか。

よくある間違い

注意

グレーにした画像から、元の色に戻せると考えがちです。3つの数が1つになるので、違う色が同じグレーになります。赤 (255, 0, 0) も、灰色 (76, 76, 76) も、グレーは 76 です。

このラボとソースについて: コンピュータビジョンラボ:JupyterLab でピクセル、しきい値、物の数え方

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。