. Part02 トーンカーブと画像処理 Python・MATLABコード付き - 工業大学生ももやまのうさぎ塾 (Momousagi Academy)
Part02 トーンカーブと画像処理 Python・MATLABコード付き - 工業大学生ももやまのうさぎ塾 (Momousagi Academy)
Part02 トーンカーブと画像処理 Python・MATLABコード付き - 工業大学生ももやまのうさぎ塾 (Momousagi Academy)

うさぎでもわかる画像処理 Part02 トーンカーブと画像処理 [Python・MATLABコード付き]

ガンマ補正では、入力画素値 \( x \)、出力画素値 \( y \) に対して\[y = 255 \left( \frac \right)^\]の処理を与えます [4] 指数部分を \( \frac < \gamma >\) とし、\[y = 255 \left( \frac \right)^< \frac >\]と表記することも多いです。というのも、元画像 \( y \) … Continue reading (※ \( \gamma \) は出力装置ごとに最も適した値を設定する)

(1-b) ガンマ変換と明るさの関係

実際にガンマ値 \( \gamma \) を変化させながらガンマ補正を行うと、どんな画像が生成できるかを見てみましょう。

  • ガンマ値 \( \gamma > 1 \) → 元の画像より暗くなる変換
  • ガンマ値 \( \gamma = 1 \) → 元の画像と全く同じ変換(明るさ変化なし)
  • ガンマ値 \( \gamma < 1 \) → 元の画像より明るくなる変換

となります [5] ガンマ補正を逆数\[y = 255 \left( \frac \right)^< \frac >\] で定義した場合は、 ガンマ値 \( \gamma > 1 \) → … Continue reading 。

(1-c) 様々なガンマ値とトーンカーブ

ガンマ値を 0.25 ~ 4 まで変化させるとトーンカーブはどのように変化するかを、実際にグラフを描画することで確認してみましょう。

  • 紫 → \( \gamma = 0.25 \)
  • 青 → \( \gamma = 0.50 \)
  • 緑 → \( \gamma = 1.00 \)
  • 黄 → \( \gamma = 2.00 \)
  • 赤 → \( \gamma = 4.00 \)
(1-d) ソースコード紹介

入力画像 input_img , およびガンマ値 gamma を引数とすることで、ガンマ変換を行う関数です。

[Python]

import numpy as np def gammaTone(input_img,gamma): output_float = 255 * np.power(input_img / 255, gamma) # 計算結果をいったん実数型(float)で保持 return output_float.astype(np.uint8)

[MATLAB]

function output_img = gammaTone(input_img,gamma) output_double = 255 * power(double(input_img) / 255,gamma); % 計算結果をいったん実数型(double)で保持 output_img = uint8(output_double); end ガンマ補正まとめ (2) S字トーンカーブ変換

数式でS字カーブを描くためには\[y = \frac \left\< 1 - \cos \left( \frac x \right) \right\>\]のように三角関数を使う方法や、ロジスティック方程式\[y = \frac >\]を使う方法があります [6] … Continue reading 。(ただし \( a > 0 \), \( b > 0 \))

[グレースケール画像]

[カラー画像]

ソースコード

入力画像 input_img を引数とすることで、S字変換を適用した画像を返す関数のソースコードです。(ロジスティック方程式を利用しました)

[Python]

import numpy as np def sigmoidTone(input_img): output_float = 255 / (1 + np.exp(-0.05 * (input_img - 127.5) ) ) # 計算結果をいったん実数型(float)で保持 return output_float.astype(np.uint8)

[MATLAB]

function output_img = sigmoidTone(input_img) output_double = 255 ./ (1 * exp(-0.05 * (double(input_img) - 127.5))); % 計算結果をいったん実数型(double)で保持 output_img = uint8(output_double); end S字カーブ変換まとめ (3) ソラリゼーション変換

数式では\[y = \frac \left\< 1 - \cos \left( \frac x \right) \right\>\]のように三角関数を使うことで表現可能です [7] 導出方法ですが、まず \( - \cos x \) の \( 0 \leqq x \leqq 3 \pi \) のグラフに着目します。あとは、このグラフの周期を \( 2 \pi \) から 170 に変換するように … Continue reading 。

[グレースケール画像]

[カラー画像]

ソースコード

入力画像 input_img を引数とすることで、ソラリゼーション変換を適用した画像を返す関数のソースコードです。

[Python]

import numpy as np import math def solaTone(input_img): output_float = 127.5 - 255 / 2 * np.cos(3 * math.pi / 255 * input_img) return output_float.astype(np.uint8)

[MATLAB]

function output_img = solaTone(input_img) output_double = 127.5 - 255 / 2 * cos(3 * pi / 255 * double(input_img)); % 計算結果をいったん実数型(double)で保持 output_img = uint8(output_double); end ソラリゼーション変換まとめ

5. カラー画像特有の画像処理 [Python, MATLABコード付き]

カラー画像では、全体のコントラストを変える画像処理の他にも、 色を調整する という画像処理のテクニックがあります。

具体的には、R, G, Bのトーンカーブに対し、「カラー画像のR, G, Bのうちの一部にトーンカーブを適用し、色のバランスを変える」ということをします。

(1) 特定の色を強調する変換

特定の色を強調する場合は、強調したい色のトーンカーブに「折れ線型トーンカーブ \( k > 1 \)」を適用し、残りの成分には何もしません。

[適用するトーンカーブ]

例えば、赤色(R成分)を強める変換をしてみましょう。ここで、R成分に \( k = 1.2 \) の折れ線型トーンカーブを適用します。

[変換結果]

(2) 特定の色を弱める変換

[適用するトーンカーブ]

例えば、青色(B成分)を弱める変換をしてみましょう。ここで、B成分に \( k = 0.8 \) の折れ線型トーンカーブを適用します。

[変換結果]

(3) ソースコード

入力画像 input_img , 成分の倍率 k 、色 color を引数とすることで、特定の色を強めたり弱めたりすることができる関数を紹介します。

[Python]

import numpy as np import cv2 # color -> (0,1,2,3) が (青,緑,赤,全色[明るさ調整]) に対応 def polygonalTone(input_img,k,color): output_img = 1.0 * input_img # 1.0を掛けることでoutput_imgが255越えしても255でストップする if color == 3: output_img = np.dot(k,input_img) else: output_img[. color] = np.dot(k,input_img[. color]) return output_img ## 使用例 #画像読み込み input_color = cv2.imread(INPUT_PATH) # (1) 赤を強める [R x 1.2] output_color = polygonalTone(input_color,1.2,2) cv2.imwrite(OUTPUT_PATH,output_color) # (2) 青を弱める [B x 0.8] output_color = polygonalTone(input_color,0.8,0) cv2.imwrite(OUTPUT_PATH + "color_sky2.jpg",output_color)

[MATLAB]

% color -> (1,2,3,4) が (赤,緑,青,全色[明るさ調整]) に対応 function output_img = polygonalToneColor(input_img,k,color) output_img = input_img; if color == 4 output_img = input_img * k; else output_img(. color) = input_img(. color) * k; end end %% 使用例 % カラー画像読み込み input_color = imread(INPUT_PATH); %% 画像処理ここから % (1) 赤を強める[R x 1.2] output_color = polygonalToneColor(input_color,1.2,1); imwrite(output_color,OUTPUT_PATH); % (2) 青を弱める[B x 0.8] output_color = polygonalToneColor(input_color,0.8,3); imwrite(output_color,OUTPUT_PATH);

6. 実際にプログラムを動かして画像処理を体験しよう!

そこで、こちらに「すぐに実行できる」ソースコードと実行方法を書いた説明を用意しました! 実際にプログラムを動かしてみたい方は是非ご覧ください!

7. 練習問題でおさらい!

練習1. トーンカーブのおさらい [基本編]

つぎの(1)~(5)の変換が表すトーンカーブを、図1内の [トーンカーブの選択肢] から選び、①~⑥の番号で答えなさい。また、図2の「元画像」に対して(1)~(5)の変換を適用するとどのような画像が生成されるか。最も適切なものを図2内の [変換画像 (猫)] から選び、ア~カの記号で答えなさい。

(1) 画素値を2倍にする変換(2) 画素値を1/2倍にする変換(3) ネガポジ変換(4) 2値化変換(5) ソラリゼーション

[トーンカーブの選択肢]

[画像の選択肢]

練習2. トーンカーブのおさらい [応用編]

つぎの①, ②, ③ が示す変換を ①→②→③ の順に適用した。

① 画素値を2倍にする変換② 画素値を1/2倍にする変換③ ネガポジ変換

練習3. カラー画像とトーンカーブ

つぎのカラー画像に対して、(1)変換1, (2)変換2, (3)変換3 を適用し、新たなカラー画像を作成した。このとき、(1)~(3)の変換で用いたR, G, Bトーンカーブの組み合わせとして正しいものを [R, G, Bトーンカーブの組み合わせ] 内の①~⑧から1つ選び、番号で答えなさい。

[R, G, Bトーンカーブの組み合わせ]

8. 練習問題の答え

解答1. トーンカーブのおさらい [基本編]

(1) 画素値を2倍にする変換

全体的に明るくなっている写真を選べばOK。画素値を明るくすると、真っ白な画素(画素値255)が出てくるのも (エ) を選ぶ決め手かも。

(2) 画素値を1/2倍にする変換

(3) ネガポジ変換

白黒が完全に入れ替わっている(黒猫が白猫になっている)画像は (ウ) 以外にない。

(4) 2値化変換

(5) ソラリゼーション

[おまけ] 残りものの画像は…?

解答2. トーンカーブのおさらい [応用編]

[解答]

[変換過程]

元画像 → ①適用後

①適用後 → ②適用後

②適用後 → ③適用後(答え)

解答3. カラー画像とトーンカーブ

(1) 正解: ④

(2) 正解: ⑥

(3) 正解: ⑤

9. さいごに

  • 画像処理の最も基本的な部分である「画素値を一定のルールに従っていじる」点の説明
  • 画素値の変換で使う一定のルールを図でわかりやすく示した「トーンカーブ」について
  • 代表的なトーンカーブの例
  • カラー画像の画像処理の例
注釈 ↑ 1 入力画像の画素値 \( x \) を2倍したものを出力画像の画素値 \( y \) とする、つまり \( y = 2x \) の変換を行うルール ↑ 2 余談ですが、画素値255オーバーしていて画像が白くなる現象のことを、「白飛びする」とか「サチる」などと呼ぶことがあります。 ↑ 3 例えば、R成分の画素値が 200, G成分の画素値が150, B成分の画素値が100であれば、R, G成分の画素値はしきい値の128以上なので、出力される画素値は255となる一方、B成分の画素値はしきい値の128未満なので、出力される画素値は0となります。(画素値はR: 255, G: 255, B: 0 となる) ↑ 4 指数部分を \( \frac < \gamma >\) とし、\[y = 255 \left( \frac \right)^< \frac >\]と表記することも多いです。というのも、元画像 \( y \) にガンマ値 \( \gamma \) がかかった状態\[x =255 \left( \frac \right)^< \gamma >\]を補正するためには、元のガンマ値の逆数 \( \frac < \gamma >\) でガンマ補正\[y = 255 \left( \frac \right)^< \frac >\]をすればよいですね。なので、指数部分が \( \frac < \gamma >\) となっている上式を定義することで「ガンマ値 \( \gamma \) がかかった画像を補正する変換」と考えることができますね。 ↑ 5 ガンマ補正を逆数\[y = 255 \left( \frac \right)^< \frac >\] で定義した場合は、
  • ガンマ値 \( \gamma > 1 \) → 元の画像より明るくなる変換
  • ガンマ値 \( \gamma = 1 \) → 元の画像と全く同じ変換(明るさ変化なし)
  • ガンマ値 \( \gamma < 1 \) → 元の画像より暗くなる変換
公開日: 2022年8月22日 更新日: 2022年8月24日 この記事を書いた人 コメント一覧 コメントはありません。 関連記事 Prologのカットオペレーターの動作 うさぎでもわかるソフトウェア工学 Part01 ソフトウェアライフサイクル・開発工程 うさぎでもわかる画像処理 Part03 画像処理とフィルタ1(線形フィルタ編) うさぎでもわかるC言語のポインタ講座 論理プログラム(Prolog)のリストについて 【MATLAB入門】超基本な9つのテクニック うさぎでもわかる計算機システム(基本情報対応) Part19 仮想記憶とページング(4GBの壁の正体は?) うさぎでもわかる計算機システム Part22 MIPSアーキテクチャ・命令一覧 後編 うさぎでもわかる論理回路 不完全指定順序回路(Don't Careが含まれる状態遷移図)の状態数最小化 うさぎでもわかるコンパイラ 第1羽 Lex(Flex)で字句解析をしてみよう!

カテゴリー

各種便利ツール・問い合わせ
  • 【完全無料】離散数学演習ツール・計算機まとめ
    • 【ハッセ図】上界/下界・最大元/最小元・極大元/極小元・上限(最小上界)/下限(最大下界) 判定ツール
    • 【ハッセ図】述語論理(∀・∃)真偽判定ツール
    • 【離散数学】べき集合 2^A・P(A) 自動計算&全列挙ツール
    • 【離散数学】真理値表 自動作成ツール(途中式あり)
    • 【離散数学】集合の「∈・⊆」真偽チェッカー(答え合わせ用)
    • 【離散数学テスト対策】真理値表の穴埋めガチ演習ツール
    • 【離散数学テスト対策】集合の「∈・⊆」ガチ演習! 弱点分析つき○×ドリル
    【真理値表マスター】うさぎでもわかる離散数学 第2羽 ブール代数と論理演算 うさぎでもわかる離散数学 第5羽 順序関係とハッセ図・重要な8つの性質 【新入生必見】ここだけは押さえよう! 大学生活完全ガイド 10日で完成! うさぎでもわかる統計的な推測 8日目 イカサマを見抜け! 仮説検定のいろは うさぎでもわかる確率・統計 重回帰分析 【統計学】出口調査の仕組みを理解するためのいろは

    目次

    1. 1. 最も基本的な画像処理とは?
      1. (1) グレースケール画像の場合
      2. (2) カラー画像の場合
        1. 例1. R, G, B各成分を同じルールに基づいて書き換える場合
        2. 例2. R, G, B各成分の一部をルールに従って書き換える場合
        1. (1) なぜトーンカーブを使うのか
        2. (2) トーンカーブの読み方
        3. (3) カラー画像の場合のトーンカーブ
        1. (1) 折れ線型トーンカーブ
          1. (1-a) 画素値をk倍 (k > 1)
            1. 例) \( k = 2 \)、つまり画素値を2倍する変換 \( y = 2x \)
            1. 例) \( k = 1/2 \)、つまり画素値を1/2倍する変換 \( y = \fracx \)
            1. ソースコード
            2. 初期値付き折れ線型トーンカーブまとめ
            1. ソースコード
            2. 2値化まとめ
            1. ソースコード
            2. ガンマ補正(変換)まとめ
            1. (1) ガンマ補正(変換)
              1. (1-a) ガンマ変換とは
              2. (1-b) ガンマ変換と明るさの関係
              3. (1-c) 様々なガンマ値とトーンカーブ
              4. (1-d) ソースコード紹介
              5. ガンマ補正まとめ
              1. ソースコード
              2. S字カーブ変換まとめ
              1. ソースコード
              2. ソラリゼーション変換まとめ
              1. (1) 特定の色を強調する変換
              2. (2) 特定の色を弱める変換
              3. (3) ソースコード
              1. 練習1. トーンカーブのおさらい [基本編]
              2. 練習2. トーンカーブのおさらい [応用編]
              3. 練習3. カラー画像とトーンカーブ
              1. 解答1. トーンカーブのおさらい [基本編]
              2. 解答2. トーンカーブのおさらい [応用編]
              3. 解答3. カラー画像とトーンカーブ

               工業大学生ももやまのうさぎ塾 (Momousagi Academy)

              コンピュータグラフィックス コンピュータビジョン
              1. 1. 最も基本的な画像処理とは?
                1. (1) グレースケール画像の場合
                2. (2) カラー画像の場合
                  1. 例1. R, G, B各成分を同じルールに基づいて書き換える場合
                  2. 例2. R, G, B各成分の一部をルールに従って書き換える場合
                  1. (1) なぜトーンカーブを使うのか
                  2. (2) トーンカーブの読み方
                  3. (3) カラー画像の場合のトーンカーブ
                  1. (1) 折れ線型トーンカーブ
                    1. (1-a) 画素値をk倍 (k > 1)
                      1. 例) \( k = 2 \)、つまり画素値を2倍する変換 \( y = 2x \)
                      1. 例) \( k = 1/2 \)、つまり画素値を1/2倍する変換 \( y = \fracx \)
                      1. ソースコード
                      2. 初期値付き折れ線型トーンカーブまとめ
                      1. ソースコード
                      2. 2値化まとめ
                      1. ソースコード
                      2. ガンマ補正(変換)まとめ
                      1. (1) ガンマ補正(変換)
                        1. (1-a) ガンマ変換とは
                        2. (1-b) ガンマ変換と明るさの関係
                        3. (1-c) 様々なガンマ値とトーンカーブ
                        4. (1-d) ソースコード紹介
                        5. ガンマ補正まとめ
                        1. ソースコード
                        2. S字カーブ変換まとめ
                        1. ソースコード
                        2. ソラリゼーション変換まとめ
                        1. (1) 特定の色を強調する変換
                        2. (2) 特定の色を弱める変換
                        3. (3) ソースコード
                        1. 練習1. トーンカーブのおさらい [基本編]
                        2. 練習2. トーンカーブのおさらい [応用編]
                        3. 練習3. カラー画像とトーンカーブ
                        1. 解答1. トーンカーブのおさらい [基本編]
                        2. 解答2. トーンカーブのおさらい [応用編]
                        3. 解答3. カラー画像とトーンカーブ