Pythonで読み込んだ画像データを正規化する

  • URLをコピーしました!

今回はPythonで読み込んだ画像データを正規化する方法について解説したいと思います。
ディープラーニング等を行う際の、画像データの前処理などで利用します。

また、本記事は「Kerasでディープラーニング!Pythonで始める機械学習入」シリーズの手順を解説するページです。シリーズの一覧は以下をご覧ください。

目次

正規化とは

正規化とは値を一定の範囲内に入るように調整することです。
今回は最小値0~最大値1にスケーリングする「Min-Max normalization」について解説したいと思います。

入力されるデータをX、正規化した結果をYとした場合いかのようになります。

xminはデータの取りうる範囲の最小値、xmaxはデータの取りうる範囲の最大値となります。

入力された画像データを確認する

今回正規化する画像データがどのようなものか確認してみましょう。
Pythonで画像データを読み込む方法は以下の記事で解説しています。

今回はこちらの記事で読み込んだ画像の1枚目のデータを見てみましょう。
画像の読み込みは以下のプログラムで実行します。

image = cv2.imread(files[0])

読み込んだデータをPrintメソッドで表示すると以下のようになりました。

[[[114 139 213]
  [113 138 212]
  [113 138 212]
  ...
  [ 40  31 201]
  [ 40  31 201]
  [ 40  31 201]]

 [[114 139 213]
  [113 138 212]
  [113 138 212]
  ...
  [ 41  32 202]
  [ 41  32 202]
  [ 41  32 202]]

 [[114 139 213]
  [113 138 212]
  [113 138 212]
  ...
  [ 42  33 204]
  [ 42  33 204]
  [ 42  33 204]]

 ...

 [[189 204 220]
  [188 203 219]
  [188 203 219]
  ...
  [226 242 255]
  [226 242 255]
  [226 242 255]]

 [[189 204 220]
  [188 203 219]
  [188 203 219]
  ...
  [226 242 255]
  [226 242 255]
  [226 242 255]]

 [[189 204 220]
  [188 203 219]
  [188 203 219]
  ...
  [226 242 255]
  [226 242 255]
  [226 242 255]]]

cv2.imread()メソッドで読み込んだデータは、行(高さ)×列(幅)×色(Blue、Red、Green)の3次元の配列となります。
色のデータの取りうる範囲は0~255となります。BRG形式となりますので注意が必要です。

RGB形式に変換して使用したい場合は以下のように変換処理を実装してください。

image= cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

画像を正規化する

読み込んだ画像データを正規化してみましょう。
前項の画像データの説明で書いたように、値の取りうる範囲は最小→0、最大→255となりますので、正規化のための式に当てはめると以下のようになります。

入力データXを255(最大値)で除算するプログラムをPythonで記述すれば良いことがわかります。

作成したソースコード

実際に作成したソースコードは以下の通りです。

import glob
import cv2

#全ての画像ファイルのパスを取得する
files = glob.glob("images/*.jpg")

#画像データを格納するりすと
image_list = []

#ファイルパスから画像を読み込み
for image in files:
  image = cv2.imread(image) #画像を読み込み
  #image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) #RGBモードに変換

  #正規化
  image = image / 255 #[0~1]にスケーリング
  #image = (image - 127.5) / 127.5 #[-1~1]にスケーリング

  image_list.append(image) #画像をリストに追加

#確認用に先頭のデータを出力
print(image_list[0])

16行目が正規化の処理になります。
今回は[0~1]にスケーリングしましたが、[-1~1]にスケーリングしたい場合は17行目を使用してください。

実行結果

実行した結果は以下の通りです。

[[[0.44705882 0.54509804 0.83529412]
  [0.44313725 0.54117647 0.83137255]
  [0.44313725 0.54117647 0.83137255]
  ...
  [0.15686275 0.12156863 0.78823529]
  [0.15686275 0.12156863 0.78823529]
  [0.15686275 0.12156863 0.78823529]]

 [[0.44705882 0.54509804 0.83529412]
  [0.44313725 0.54117647 0.83137255]
  [0.44313725 0.54117647 0.83137255]
  ...
  [0.16078431 0.1254902  0.79215686]
  [0.16078431 0.1254902  0.79215686]
  [0.16078431 0.1254902  0.79215686]]

 [[0.44705882 0.54509804 0.83529412]
  [0.44313725 0.54117647 0.83137255]
  [0.44313725 0.54117647 0.83137255]
  ...
  [0.16470588 0.12941176 0.8       ]
  [0.16470588 0.12941176 0.8       ]
  [0.16470588 0.12941176 0.8       ]]

 ...

 [[0.74117647 0.8        0.8627451 ]
  [0.7372549  0.79607843 0.85882353]
  [0.7372549  0.79607843 0.85882353]
  ...
  [0.88627451 0.94901961 1.        ]
  [0.88627451 0.94901961 1.        ]
  [0.88627451 0.94901961 1.        ]]

 [[0.74117647 0.8        0.8627451 ]
  [0.7372549  0.79607843 0.85882353]
  [0.7372549  0.79607843 0.85882353]
  ...
  [0.88627451 0.94901961 1.        ]
  [0.88627451 0.94901961 1.        ]
  [0.88627451 0.94901961 1.        ]]

 [[0.74117647 0.8        0.8627451 ]
  [0.7372549  0.79607843 0.85882353]
  [0.7372549  0.79607843 0.85882353]
  ...
  [0.88627451 0.94901961 1.        ]
  [0.88627451 0.94901961 1.        ]
  [0.88627451 0.94901961 1.        ]]]

色(BGR)の情報が全て0~1の範囲内に収まっていることが確認できました。

まとめ

今回はPythonで画像データを正規化する方法についてまとめてみました。機械学習で画像を扱う際の前処理などで使用できますでの、ぜひ活用してみてください。

また、効率的にPythonのプログラミングを学びたい方はオンラインスクールがおすすめです。

DMMが運営するPythonオンラインスクール:DMM WEBCAMP 学習コース(Pythonコース)

それでは、また次の記事でお会いしましょう。

参考

よかったらシェアしてね!
  • URLをコピーしました!
目次