このようなスコアシートを自動的に読み取るプログラムをPythonで作成しました
現時点では、次の基本戦略を使用しています。
- ImageMagick を使用して画像の傾きを補正する
- PIL を使用して Python に読み込み、画像を白黒に変換します
- 行と列のピクセルの合計を計算します
- これらの合計でピークを見つける
- これらのピークによって示される交点をチェックして、塗りつぶしを確認します。
プログラムを実行した結果は、次の図に示されています。
左上に表示されている画像の下と右側にピーク プロットが表示されます。左上の画像の線は列の位置で、赤い点は識別されたスコアを示しています。右下のヒストグラムは、各円の塗りつぶしレベルと分類線を示しています。
この方法の問題点は、慎重な調整が必要であり、スキャン設定の違いに敏感であることです。アプリオリな情報を必要とせず (現時点ではドットの数に関する知識を使用しています)、シートに他の形状を描く人々に対してより堅牢な、グリッドを認識するより堅牢な方法はありますか? 2D フーリエ変換を使用すると可能かもしれないと思いますが、方法がわかりません。
私は EPD を使用しているので、かなりの数のライブラリを自由に使用できます。