スランプグラフから差枚数を自動算出するツール作成(後編)
前編に引き続きスランプグラフから差枚数を自動算出するツールをPythonで作っていきます。 前編で求めたグラフの位置 からスランプグラフの差枚数を算出していきます。 2. スランプグラフから差枚数を求める はじめに 以下の画像から差枚数を算出していきますが、スランプグラフ内には差枚数算出に不必要なグラデーションが入っています。 人間の場合は、どれがグラフで、どれが不必要なグラデーションかを感覚的に判断できますが、コンピュータではどちらが必要なデータなのかはわかりません。 そこで、不必要なグラデーションを除去する処理を行います。 エッジ保存フィルタ(エッジ抽出フィルタ)と呼ばれる方法を採用しますが、これはその名の通り画像のエッジ(輪郭)だけを抽出する方法です。 言葉ではイメージしづらいと思うので、処理前後の画像を↓に貼っておきます。 画像全体からグラデーションが消えて、エッジ部分の線のみ残っています。 エッジ保存フィルタの中身の基本的な処理としては、画像の微分があげられます。 下図に示すように、微分の値は変化が急峻なところほど大きくなります。 これを画像にあてはめると、「変化が急峻なところ=画像のエッジ」、「変化が緩やかなところ=グラデーション部分」となるので、画像のエッジ部分だけを抽出することができます。 求めたエッジ部分を画像の端から探していけば、最初に見つかった点がグラフの最後の点がわかります。 最後に比例計算でピクセル数を差枚数に変換すれば差枚数算出完了です。 グラフの範囲は今回の場合±2000枚なので、全体として4000枚の範囲(2000×2枚)を計算しています。 画像のエッジ抽出 ここからは、Pythonでのコーディングに入ります。 まずは、画像のエッジ抽出を行います。 これまたテンプレートマッチングの時と同じく、1行だけです。 Canny法と呼ばれる方法を採用されているようですが、詳しいことは理解不足で説明できません。。 差枚数を求めたい画像は、「img_gray」に保存されているので、「img_gray」に対してエッジ抽出を行います。 # 差枚数を求めたい画像のエッジ抽出 img_bin = cv2.Canny(img_gray,128,200) 走査範囲の設定 続いて、グラフの最後の点を探してい...