散布図で画像を描く
散布図で描画に挑戦
散布図とは
散布図とは、X座標・Y座標へプロットされた点でできています。X=1の座標にY=1,2,3,4,5,このように点をプロットすれば散布図上に点で直線を描くことができます。座標の目盛をできる限り小さくしてプロットうまく配置すれば曲線を描くこともできるし、大概の図形を描くことができるはずです。
画像はどうでしょうか。つまりX座標・Y座標の全てを点で埋め尽くして、それぞれの点にコントラスト(輝度)を設定するとモノトーンではありますが散布図をキャンバスにして画像を描くことができそうです。
データ
プロット番号 | X座標 | Y座標 | 輝度 |
A | 1 | 1 | |
B | 1 | 2 | |
C | 2 | 1 | |
D | 2 | 2 |
このようなデータをつくればよいはずです。プロットする座標はゼロから1,2,3,4,5,と、連続した数値にしてX軸とY軸の組み合わせをつくります。
・X=1・Y=1の座標へ黒い点をプロットする
・X=1・Y=2の座標へグレーの点をプロットする
このようにそれぞれの点に輝度を設定します。
問題は輝度ですが、「ImageJ」というフリーアプリをつかうと画像をテキスト形式でアウトプットすることができます。
テキスト画像とは、テキストファイルをCSVへ変換するとこのようになります。データの行数と列数は画像のピクセル数と一致します。元画像は225ピクセル×225ピクセルですから、225行×225列の表になっています。各セルの数値が輝度をあらわします。
データ加工
データへ行名と列名をそれぞれ追加します。行名はYにして1~225までの連続数値を入れます。この行がY軸の座標になります。列名も1~225までの連続数値を入れます。最終的に列名の数値がX座標になります。
タブローでプロット
データへ接続
データソースがマトリクス型になっているのでリスト型へ変更する必要があります。
ピボット
・フィールド名(列名)1~225をすべて列から行へピボットします。
ピボットすると225×225=50,625行のデータになります。散布図へプロットする点が50,625個になるということです。
・「ピボットのフィールド名」を「X」に書き換えます。
・データ型「ABC」(文字列)を数値(整数)へ変更します。
・「ピボットのフィールド値」を「Color」へ書き換えます。
「Color」の値が輝度になります。
・計算フィールドを追加します。プロットする点の名前になります。
すべての値がユニークになる必要があります。点の数量をCOUNTDで計算したときに50,625個になるように設定します。
プロットする
・「X」がディメンションになってたらメジャーへ移動させます。
・「X」を列シェルフ
・「Y」を行シェルフへドロップします。
・計算フィールド「Plot」を詳細へドロップします。
・形状を塗りつぶし丸に設定します。
散布図が丸で埋め尽くされてベタ青色になります。
・形状のサイズを小さくします。
点と点のあいだに少し隙間ができて、全体的に色が薄くなります。
色をつける
「色」へ「Color」をドロップします。画像が浮かび上がってきました。
データソースを加工するときに「Y」へ昇順で数値を入れたため画像の上下が逆転しています。
・Y軸を右クリックして「軸の編集」→スケールの反転をチェックします。
色を黒へ変更します。輝度の数値が大きいほど黒くなるため、色を反転させます。
完成です。
ジロー君の写真でやってみる
ピクセルが小さかった
128×128ピクセルの画像です。ピクセルが小さくなるとプロットのサイズを少し大きくしたほうが良い感じです。元画像のピクセルが大きく被写体が単純なほどハッキリと描画できるのでしょうが、プロットの最小サイズにも限界があるため写真のレベルで描画できることはありません。
コントラストをつける
パラメーターをリストでつくります。ざっくり整数で1~10のリストにしました。後で試してみると1から0.5刻み位のほうがよかったです。
パラメーターを埋め込んだ計算式をつくります。「Color」のべき算数にします。掛け算にすると単純に全体が明るくなったり、暗くなったりするだけです。
色をパラメーターを埋め込んだメジャーに変更します。パラメーターとプロットサイズを調整していい感じに仕上げます。
色をセピア風に変更してみました。念写やハンドパワーなし、数値データから散布図へ画像を描くことができました。
これはタブローにメジャー(連続)を色のコントラストで表現できる機能があるからですね。