こんにちは、Webプログラマの篠田です。
前回は、PythonのOpenCVライブラリを活用した背景差分を取得しましたが、今回は取得した背景差分画像を使ってどれくらい変化したのかという「変化量」を算出する方法をご紹介します。
「変化量」を定義しよう
前回から活用している2枚の画像と、背景差分を取った画像の3枚を引き続き利用していきます。
【画像A(変化前)】
【画像B(変化後)】
2つの画像の「変化」をとらえる方法として、前回は「背景差分法」を活用しました。
そのときに取得できたのが「画像C」です。
【画像C】
人間は、「画像A」と「画像B」を見比べただけで、その変化を認識することができます。
ですが、システムは人間の目と脳のように「画像A」と「画像B」だけでは、変化を認識してくれません。
認識させるためには、システムに2枚の画像の「変化」を表した「画像C」のどういった部分が「変化」なのかを定義する必要があります。
「画像C」の場合、「白色」になっている部分が「画像A」からの「変化」と言えるので、今回は「画像の白い部分が変化している箇所」として定義します。
「変化」が定義できれば、「変化量」も決めることができます。
「変化量」は、「白色になっている部分のピクセル数」として、「変化率(どれくらい変化したのか)」は、「全体のピクセル数の内、白色のピクセル数の割合」として定義することができます。
では、この「白い部分」をシステムに認識させる方法をご紹介します。
変化量を数値化しよう
方法としては「白い部分」の「ピクセル数」を数えることで、「変化量」を算出することができます。
実際に、Pythonを使って「白い部分」の「ピクセル数」を数えてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import cv2 import numpy as np #「背景」となる画像の取り込み(グレースケール) # もともとが白黒の画像ですが、色数が多い場合は2色の色味に変更しないと計算がしづらくなります。 img_diff = cv2.imread("画像C.jpg", cv2.IMREAD_GRAYSCALE) #白色のピクセル数の算出 whitePixels = np.count_nonzero(img_diff) #黒色のピクセル数の算出 blackPixels = img_diff.size - whitePixels #白色の部分が全体のどれくらいの割合を占めているのかを算出 print( whitePixels / img_diff.size * 100) |
このプログラムを実行すると、白の部分は「9.13625%(約9%)」と算出することができます。
このことから、全体における変化は「約9%」ととらえることができます。
まとめ
前回からの「背景差分法」で、変化量を「画像」としてとらえ、今回の「白い部分(変化)」から「変化量」を求めることで、システムにどれくらい変化が起きたのかを数値で識別させることができるようになりました。
機械学習の前処理として活用していくことができそうですね。
今後も機械学習のエッセンスになるようなサンプルをご紹介していきたいと思います。
現場の業務フローに寄り添ったWebシステムをお求めなら、私たちALAKIにご相談ください。
ALAKIは経営者様が感じている問題点と、実際にWebシステムを利用される現場スタッフ様が直面している課題を、弊社システムエンジニアが丁寧に聞き取り、お客様と共にシステムを作り上げていきます。
業務改善が実現できるWebシステムをお求めの方は、是非ALAKIにご相談ください。