12/9(月) 応用科学学会シンポジウムで自動運転に関する講演を担当します☆彡

14-36. グラフ画像から数値データをリバースエンジニアリングする

やること

自治体さんから緊急の依頼がありました。PDFで保存さているグラフ画像を大至急、数値データに戻してほしいとのことです。こんな感じのPDF画像が大量に送られてきました (゚д゚; )アレマー

古典的な画像処理でリバースエンジニアリングできますので手順を紹介します。Python(+OpenCV)とImageJを使用しました。

傾きの修正

まず、画像全体の傾きを修正します。OpenCVで直線を検出して、傾きが直るように回転させます。

今回はスキャナで取り込まれた画像なので台形補正などは不要でした。もしカメラで撮った写真だったりすると台形補正や明るさの調整も必要になります。

グラフ領域の抽出、線の抽出

グラフの枠線や軸の数字を検出してグラフ領域を抽出します。Excelのグラフらしく右側に枠線がありません。ミスを防ぐために右側に余白を残しました。(うっかり削り込んでしまっても気が付けないので)

青色を検出して二値化します。

そのまま次のステップに進んでも良いのですが、ここではエッジ検出を適用して線の上部と下部をあぶり出しました。

今回のグラフは横軸が0~47.5、縦軸が0~300の範囲で揃っています(やりやすくて助かりますね)。これを考慮してこの時点の画像サイズを (475, 300) に調整してあります。この後の処理が単純になります。

値の抽出

上部と下部の中間の値を読み取ります。

個別のcsvファイルに保存していきます。全部で1100個のデータファイルができました。この量は手動では不可能ですね。

以上で処理は終了です。

データの確認

抽出したデータと元のグラフ画像を重ねて精度を確認してみます。赤線が今回抽出したデータ(をExcelでグラフにしたもの)です。

良さそうですね!y=0付近の値は埋もれがちなので慎重に抽出しました。

もちろん完全な復元はできません。どうしても少し丸まってしまいます。要求される精度によっては途中の工程が2倍にも3倍にも増えそうです。

おわりに

グラフ画像のリバースエンジニアリングができました。

企業や自治体に眠っている「データ化されていない」データがあればお気軽にご相談ください。

SNS等でお気軽にご連絡ください

※当ブログに関することは何でもご相談・ご依頼可能です(Servicesになくても)
※TwitterはFF外の場合はDMではなく返信orメンションでお願いしますm(_ _)m

情報発信しています

質問・コメントはSlackやDiscordでお気軽に

勉強会の告知はこちらで

画像処理
この記事を書いた人

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

この記事をシェアする
Vignette & Clarity(ビネット&クラリティ)
タイトルとURLをコピーしました