【画像処理】線形濃度変換の原理・計算式

この記事では、画像処理における線形濃度変換の原理や仕組みについてまとめました。

線形濃度変換

本ページの内容は以下動画で解説しています。

線形濃度変換とは、横軸を入力画像の画素値、縦軸を出力画像の画素値とする線形マッピングです。
GIMPやPhotoshopなどの画像加工ソフトに濃度を変更するツールとして組み込まれています。
線形濃度変換は、画像のコントラストを調整し、画像を人が視認しやすいように変換することができます。
今回は、線形濃度変換の代表例をいくつか紹介します。

変換① 画素値をa倍

入力画像の画素値をI(x, y)とすると、a倍した出力画像の画素値I'(x, y)}は次式で計算できます。

(1)   \begin{eqnarray*} I'(x, y)=aI(x, y) \end{eqnarray*}

説明
a>1 より明るくなり、コントラストも高くなる
a=1 変化なし
a<1 より暗くなり、コントラストも低くなる


グラフ描画用プログラム(Python)

変換② コントラストを全体的に明るく・暗く

コントラストを全体的に「明るく」or「暗く」することを考えます。

入力画像の画素値をI(x, y)とすると、出力画像の画素値I'(x, y)}は次式で計算できます。

(2)   \begin{eqnarray*} I'(x, y)= \begin{cases}  I(x, y)+k \hspace{30px} (I(x, y)+k<255 )\\\  255 \hspace{30px} (I(x, y)+k>256)\\  0 \hspace{30px} (I(x, y)-k<0) \end{cases} \end{eqnarray*}

パラメータ 説明
k>0 全体的に明るくなる
k<0 全体的に暗くなる

kの絶対値が大きいほど効果も大きくなります

グラフ描画用プログラム(Python)

変換③ コントラストの強弱

入力画像の画素値をI(x, y)とすると、コントラストの強弱を調整した出力画像の画素値I'(x, y)}は次式で計算できます。

(3)   \begin{eqnarray*} I'(x, y)= \begin{cases}  0 \hspace{30px} (T<0 )\\  a(I(x, y)-127)+127 \hspace{30px} (0\le T\le255)\\ 255 \hspace{30px} (T>255) \end{cases} \end{eqnarray*}

説明
a>1 コントラストを強める
a<1 コントラストを弱める


グラフ描画用プログラム(Python)

変換④ ヒストグラムの拡張(伸張)

ヒストグラムの拡張(伸張)とは、画素値の分布が特定の範囲に偏っている場合に、広い範囲に拡張(伸長)する濃度変換です。

画素値の分布をZ_{min}Z_{max}の範囲に引き伸ばすとします。
このとき、入力画像の画素値をI(x, y)とすると、出力画像の画素値I'(x, y)}は次式で計算できます。

(4)   \begin{eqnarray*} I'(x, y)=I_{max}\frac{I(x, y) - Z_{min}}{Z_{max} - Z_{min} } \end{eqnarray*}

ここで、I_{max}は入力画像の画素値の最大値です。

関連ページ

今回紹介した4つの線形濃度変換をPython版OpenCVで実装する方法について以下ページで解説しています。

https://algorithm.joho.info/programming/python/opencv-liner-histogram-stretching-py/
【画像処理入門】アルゴリズム&プログラミング
画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。

コメント