重心から見たシルエットとか

これまでの経緯

以前私が作成したシルエットパズルの自動生成プログラムでは、細長いシルエットや入り組んだシルエットができやすい。特に、ピースの数が多いパズルでは顕著である。以前タングラムで実験をした際は、あまりにも細長い形/入り組んだ形ができるので、遊んでいてつらいものがあった。

そこで、こういった細長い形/入り組んだ形をなんらかの基準で分離することが(遊ぶ上で)重要な課題となる (一つの考え方は、自動生成自体のアルゴリズムを変えることだが、しばらくは評価の方向から検討していきたい)。

欲を言うと、都合の良い特徴量を見つけて、勝手にクラスタリングされれば、なおよい。

アプローチ

図形の解析方法として、重心を起点に視る方法が存在する。重心座標に変換することで並進の問題が解決する。

さらに、半径方向の分布だけを見ることで回転に対しても強い判定基準を検討することができる。

今回はこの、重心を起点にした半径方向の分布を見てみる。

処理

シルエットは一見して黒白の2値画像だが、実際には灰色を含む連続的な色を持つRGB画像である。そこで、まずはグレースケールに変換する。

続いて重心を求める。黒い部分の重心が知りたいため、画像のネガポジを反転したうえで、各ピクセル値を重さだと思ってピクセル値の重心を求める。重心の求め方は普通の剛体物理のやり方を用いる。

重心座標に変換して、各ピクセルについて、原点(重心)からのユークリッド距離を求める。ピクセル自体の分布は半径に比例するため、ピクセル値を半径で割っておく(原点付近はゼロ割りのような状況になり計算が不安定になりやすいと考えたため、半径が0.1未満の場合は1e-4とした)。あとは重み付き密度推定で分布を求める。結果を図1に示す。

結果

図1 分布の様子

パズルによっては分布に谷がある。これは、シルエットにへこみがあり、重心から見た時の断面が複数に分かれている状況において起こる。へこみが多いシルエットではある程度の確率で分布にも谷ができると考えられる。したがって、谷のある分布のシルエットを除外することでへこみを含むシルエットをある程度分離できるだろう。

へこみがない(or少ないor目立たない)シルエットに関して考えると、大きく分けて細長いシルエットと丸っこいシルエットが考えられる。丸っこいシルエットでは原点付近に分布が集中しやすいと考えられる。図1の実験に用いているシルエットは自動生成であり、ピース配置の広がりが大きい傾向にある(あまり面白いパズルになっていない)ため、図1に載せている分布群には、原点付近のプラトーがほとんど見られない。

こう考えていくと、重心になるべく集中しているシルエットが、良いシルエットであると言えるかもしれない。単調減少であるのが良いとも言えそうだ(おそらく、原点で最も高く、半径が増えるにつれスッと分布が落ちるのが良い傾向なのだろう)。試してみる価値はありそうだ。

以下に2つほど、(上記の議論の意味で)比較的理想度の高い分布を持つシルエットを掲載する(図2、図3)

図2 分布の理想度が比較的高い、Tangram-850.pngのシルエット
図3 分布の理想度が比較的高い、Tangram-3117.pngのシルエット

これだけではなんとも言えない。もっと検討を進める必要があるだろう。

このアプローチの懸念点としては、動径方向の分布に、表面のでこぼこ具合が反映されない点が挙げられる。