スキャンずれ修正と差分抽出の公開

OpenCV By Output不足なエンジニア

以前の記事で記載したスキャンずれ修正と差分抽出のスクリプトを(若干)整理してgithubで公開しました。(まだまだ汚いですが…)



機能紹介

画像のずれ修正

対象スクリプト:shift_modification.py
2枚の画像を比較し、ずれ修正します。スキャンずれ修正を目的に作成していますが、一応同じものを撮っている画像であればずれ修正が可能です。また、基準画像は水平である必要はありません。
ただ、スキャンずれを前提に調整しているため、拡大縮小はない前提です。拡大率は1固定なので注意してください。
下記は左から順に「基準画像、修正対称画像、修正後画像」です。

差分抽出

対象スクリプト:detect_diff.py
2枚の画像を比較し、差分を抽出します。OCRエンジンによっては読み取り箇所を指定する必要があるので、未記入の画像と記入済みの画像で差分を取れば記入箇所を抽出できるはずです。実際はスキャンずれがあるのと紙の歪みがあったりして完全にうまくはいきませんが、膨張・縮小処理と組み合わせれば多少のずれは無視できます。
ずれ修正して(結構頑張ってで閾値調整して)スクリプトを実行した結果が下記です。 2枚目は紙が歪んでいるのでどうしてもただの枠線が差分として抽出されてしまう例です。Hough変換であらかじめ枠線除去したり、抽出した枠にTesseractで文字が存在するか判定したりする必要があるかなと思っています。

歪んでいることを考慮するとHough変換よりTesseractのほうがよさそうですが、pipだけで管理できなくなり汎用性が落ちるのがイマイチです。pipだけで管理できればCloud Functionsで簡単にアプリ化できるのですが…いっそWebAPIにしてアップロードされた画像に対してサーバで全部処理する設計のほうが良いのかも知れません。
画像処理を色々試してつくづく思いますが、人間ってすごいです。当たり前のようにどこに新しい情報があるか把握して、当たり前のように理解しますからね。


カテゴリー:OpenCV,python,画像処理

Output不足なエンジニア

統計が好きになれず、機械学習やったら必然的に統計が必要になるだろうと思ったら想像以上に機械学習にハマる。数学は芸術なので商売にするつもりはないけど、DeepLearningは数学じゃないし商売にしたいと思っているところ。画像処理がメイン。