写真からデータへ
はじめに
グラフの画像しかなく、グラフの背後にあるデータが必要な場合はどうすればよいでしょうか。一度に 1 ポイントずつ手作業で処理しようとすると、大変な作業になります。ただし、JMP を使用すると、画像からデータ テーブルにデータを取り込むことができ、数ステップで済みます。

ステップ1: 画像をインポートする
最初のステップは、画像全体を情報として JMP テーブルに取り込むことです。これはスクリプトを使用して実行することもできますが、優れたImage to Table Add-In を使用して実行することもできます。例としてレイキャビクの人口の画像を使用しますが、折れ線グラフの画像であればどれでも使用できます。
アドインをダウンロードしてインストールした後、 [アドイン] > [イメージ アナライザー]を選択すると、画像を選択してデータ テーブルとしてインポートできます。データ テーブルには、画像内の各ピクセルの RGB データ (およびその他の情報) が含まれます。

ステップ2: スケールを修正する
テーブルが開いたら、グラフ ビルダーを使用して画像の白黒バージョンを再作成するのは簡単です。下の画像では、I 列 (強度) をカラー列として使用し、画像の保存方法と一致するように Y スケールを反転しています。

ここで、すぐに問題が見つかりました。グラフのスケールが JMP のスケールと一致していません。これは非常に簡単に修正できます。JMP に組み込まれているいくつかの機能と中間データ テーブルを使用します。
- 4 つの列 (X、Y、希望する X、希望する Y) を持つ空のデータ テーブルを作成します。

- グラフの左下にある既知の位置のデータ ポイントを選択します (たとえば、X 軸が 1896 年で人口が 0 の場合)。これらの値を、新しいデータ テーブルの [必要な X] 列と [必要な Y] 列の行 1 に入力します。

- グラフ ビルダー ウィンドウで、クロスヘア ツールを選択し、このデータ ポイントにマウスを移動します。指定された X 値と Y 値を書き留めます。それらの値を X 列と Y 列の行 1 に書き込みます。

- グラフの右上隅にある既知のポイントに対してこのプロセスを繰り返し、X と Y の現在の値と希望の値の両方を記録します。表は次の例のようになります。

次のステップは、画像データ テーブルのスケール X 値と Y 値をグラフに表示されている値と一致するように変更することです。基本的に、各列にオフセットとスケーリング係数を適用する必要があります。幸い、これは単に線を当てはめるだけであり、これは Fit Y by X プラットフォームの基本機能です。下の図では、X と Y の現在の値と目的の値の関係に線を当てはめています。

ここで重要なのは、線形近似の式を見ることです。この式は、オフセットとスケールの両方を、ay = mx + b の式で表します。ここで、m はスケール、b はオフセットです。これらのパラメータを JMP の新規数式列ツールで使用すると、軸をすばやく修正できます。
- 画像データ テーブルで、 X 列を右クリックし、 [新しい数式列] > [変換] > [スケール オフセット...]を選択します。
- Fit Y by X ウィンドウの数式からコピーしたスケール係数 (ここでは乗数として表記) とオフセットの値を入力します。

- Y 列に対してもこのプロセスを繰り返します。乗数には必ず負の数を入力してください。
これで、画像と一致する軸とスケールを持つ X と Y の新しい列がデータ テーブルに追加されました。グラフ ビルダーで軸をこれらの新しい列に変更すると、これらの新しい軸が画像内の軸とどのように揃っているかがわかります。

ステップ3: データを抽出する
残っている唯一のステップは、画像データ テーブル内の、関心のあるライン上のデータ ポイントではないすべての行を削除することです。これを行うには、 K 平均クラスタリングが高速でほぼ自動のツールです。(このトリックを教えてくれた@landonbw1に特に感謝します。)
元の画像には、白、青、灰色、黒の 4 つの色があるようです。したがって、JMP に R、G、B の列を 4 つのクラスターに分けるように指示するのは簡単なはずです。青い線は、それらのクラスターの 1 つであるはずです。画像圧縮、カラー ブレンディング、および画像ファイル内のその他の要素の作用により、この画像には実際には 500 を超える個別の色があります。それでも、主要な色は簡単に分けることができます。通常、クラスターの数を可視色 (通常の人間が画像にあると判断する色) の数の 2 倍に設定すると、画像ファイルから個々のグラフィック要素のクラスターが作成されます。
- [分析] > [クラスタリング] > [K 平均クラスター]を選択します。
- Y、列の選択にR 、 G 、 B の列を入力し、 [OK]を選択します。
- 「クラスターの数」セクションに8と入力し、 「実行」を選択します。
- グラフ ビルダーを見ながら、クラスター サマリーテーブルで各クラスターを順に選択して、線がどのクラスターに属しているかを判断します。下の図では、クラスター 5 を強調表示すると、グラフの線のデータ ポイントのみが強調表示されます。

- 関心のあるクラスター (この場合は 5) を除くすべてのクラスターを選択し、テーブルからこれらの行を削除します。これで、残っている行は画像内のグラフのデータ ポイントのみになります。グラフ ビルダーのオプションをいくつか変更すると、以前は静的な画像だけだった JMP のデータのインタラクティブなグラフが作成されます。

結論
画像からデータ テーブルにデータを抽出するための方法を読むのにかかる時間が、実際にそのプロセスを実行するのにかかる時間よりも長いという事実には、ある種の皮肉があります。しかし、皮肉はさておき、このプロセスを使用する機会は他にもたくさんあります。たとえば、次のとおりです。
- 研究プロジェクトの開始時に、入手可能なすべての文献を研究するとき。
- プロセスまたは製品のリバースエンジニアリング。
- 疲労モデル プラットフォームで使用するために応力-ひずみ曲線をデジタル化します。
これにより、あなたの仕事にどのような機会が生まれますか?
非常に素晴らしいです。クラスタリングにより、確かに多くの時間が節約されます。
素晴らしい仕事ですね、 ジェド・キャンベル 。
多くの場合、データ選択 (曲線の抽出) は、グラフ ビルダーで関心のあるポイント/領域を対話的に選択し、行選択を反転 (テーブル内) してから、行 > 非表示および除外を選択することによっても機能します。空白も同様の方法で削除できます。たとえば、1 つの白いポイントを選択 (グラフ ビルダー内) > 一致するセルを選択 (テーブル内のセルを右クリック) > 行 > 非表示および除外を選択します。
私にとってはすでにうまく機能しています:)
このアドインは、JMP で直接プロット画像からデータを回復したいと考えている人にとって大きな前進です。これを公開していただき、ありがとうございます。
同様のタスクを検討している方には、 WebPlotDigitizer ( https://automeris.io/WebPlotDigitizer/ )という無料ツールもお勧めです。このツールは以前から存在しており、驚くほど高速で使いやすく、あらゆる種類のプロットからデータを抽出できます。バージョン4.xはオープンソースで、オフラインでも使用できるので非常に便利です。
このような作業に使えるツールが増えているのは素晴らしいことです。両方の分野での開発が続けば、データ抽出がさらにシームレスになることを期待しています。
最近とても素晴らしい機能が追加されました! ジェド・キャンベルありがとう!