しおあめにっき!

ひらがなかわいい

イラストと写真の識別法を考えたが、あまり良い方法ではなかった

TWitter での会話。

日本語にすらなっていない私のリプライに、質問がくるのは当然だ。むしろ興味をもって質問されるだけ、ありがたい。しかし、何を主張したいのか説明するだけの日本語能力は、私にはなかった。この記事では、私が何を主張したかったのか、図や数式を用いて説明する。

イラストと写真を識別するアイデア

ビットマップ画像は、色情報をマトリクスにしたものである。つまり、それぞれの座標 {\bf p} = (x,y) に対して、 RGB 値が与えられている。この各々の座標に対して、近傍の座標との RGB 値の変化について考える。

イラストの場合、単色で塗られた領域が多くあるはずなので、近傍とのRGB値の変化は乏しいと考えられる。また逆に、写真の場合、下図のように、隣り合う座標であっても、いくらか RGB 値が変化していると考えられる。
f:id:saltcandy123:20121224200622p:plain 写真の拡大図

ここで、 RGB 変化量 v(x, y) という数量を次のように定義する。
v({\bf p}) := \max_{{\bf p'}\in K} \sqrt{\frac{1}{3}\{(R_{\bf p}-R_{\bf p'})^2+(G_{\bf p}-G_{\bf p'})^2+(B_{\bf p}-B_{\bf p'})^2\}}
ただし、 K は近傍の座標の集合である。下図の数字部分のように、通常は |K|=8 であるが、\bf p が画像の隅にあるときには |K|=5 、端にあるときには |K|=3 である。
f:id:saltcandy123:20121224210410p:plain

この RGB 変化量の分布を得ることで、画像がイラストなのか写真なのかを識別しようというのが、今回思いついたアイデアである。

実験

イラスト画像および写真画像それぞれでの、RGB 変化量の分布を調べてみることにした。

イラスト画像としては、 イラストコミュニケーションサービス[pixiv(ピクシブ)] より、新着画像とデイリーランキングから合わせて151点の画像をサンプルとした。写真画像としては、携帯電話で撮った写真107点をサンプルとした。どちらのサンプルも、写真ともイラストとも見てとれるため、紙を写したものは含めなかった。また、短辺が 300px を超える画像については、短辺が 300px 程度になるようにリサイズを行った。

それぞれの全サンプルでの単純な RGB 変化量の分布を調べた結果が、次のグラフである。
f:id:saltcandy123:20121224225657p:plain
このグラフは、横軸を k、縦軸を n とすると、 n は、  k\leq v(x,y) < k+1 となる  v(x,y) の個数を示している。

ここから分かるように、写真画像は、イラスト画像と異なり、  k=0 のときに最高値を示さない。これを識別法として、それぞれのサンプルに対し、識別を行った。

イラストサンプル 写真サンプル
イラスト判定 87 (58%) 18 (17%)
写真判定 64 (42%) 89 (83%)

このように、イラストを写真と誤判定することが多く、あまりよい結果とは言えなかった。

結論

イラストと写真を識別するのは、難しい。