見るということを考えた(2)

輪郭線とはなんぞや?

前回の記事で「ここはコーヒーカップである、ここはコーヒーカップではない、と判別をしています。この判別の境目が輪郭線になるのかと思います」と書きました。目に写っている様々なオブジェクトには固有の形状があります。描くものがオブジェクトを見ると、それらには高さと幅と奥行きがあります。これを紙とか壁とかの奥行きのないものに見たままを描こうというのは無理な話です。特に奥行きを表現するのは至難の技です。

2万年前のラスコーの壁画では、クロマニヨン人は生き生きとした野生動物を描いています。考えてみれば、真っ暗な洞窟の中にわざわざやってきて、暗闇で火を灯し、動物の油脂や鉱物、植物などのを混ぜ込んで絵の具を作り、指かなにかに絵の具をつけたり、口に含んで吹きかけたりしながら描いているのですから、絵を描くための相当の動機がなければならないと想像します。真っ暗な洞窟の中ですから、動物を見ながらではなく、頭の中の記憶から描いているわけです。

クロマニヨン人は動物を横から見た時の姿を描いています。想像ですが、やっぱり横から見た姿が、いちばん動物の特徴が分かり記憶に残るのでしょうね。頭の方や尻尾の方から見た図は無いようです。もうひとつ気になったのは、動物の四本の足を手前側の二本と奥側の二本を描き分けているのですね。これは手前と奥を描き分けていることだと思えます。

時代はずっと新しくなって、紀元前8世紀とか9世紀とかの遺跡から発掘された陶器の破片に描かれた牛(山羊?)も横から見てますが、ちゃんと手前と奥の足が描き分けられています。ベルリン美術館にあります。(http://www.smb-digital.de/eMuseumPlus?service=ExternalInterface&module=collection&objectId=1743018&viewType=detailView)

輪郭線や輪郭の描画について書いていくとキリがないのでこれくらいにしますが。何かの物=オブジェクトを描こうとしたら、輪郭とか輪郭線はとても重要になります。

コンピュータビジョンでの輪郭線(エッジ検出)

ペイント系のグラフィックソフトや写真の画像編集ソフトには輪郭線抽出とかエッジ検出の機能があります。コンピュータビジョンでも基礎的な研究テーマになります。

さて、コンピュータビジョンでよく利用されるPythonとOpenCVを使って輪郭抽出をしてみましょう。前回使った益子焼のコーヒーカップです。

画像1

画像2

画像3

写真の撮影の仕方は変えています。ようは背景がある、ないという違いを出すためです。

この写真をOpenCVのCanny関数をつかってエッジ検出してみます。写真が大きかったので縮小してから2値化してからエッジ検出です。パラメータの取り方で結果は変わってきますが、とりあえず同じパラメータで三つのが写真の画像から検出した結果です。そのままでは分かりにくいのネガポジ反転させています。

画像4

画像5

画像6

どうでしょう? と言われても困りますよね。コンピュータによる画像加工に慣れている方なら、まあ、こうなるよね、と思うでしょうが、例えば日本画をやっていらっしゃる方からすれば、全然輪郭線じゃないじゃない! という感想を持たれるでしょう。

パラメータを変えて3番目の写真のエッジ検出を再度行いました。

画像7

画像8

まあ、当たり前のことで、エンジニアというエッジ検出(輪郭抽出)と絵を描く人の輪郭線とは、まったく異なるものです。最後の画像は輪郭線と言われれば輪郭線ですが、コーヒーカップと影の合わさった輪郭線となっています。

私の欲しいのはコーヒーカップの輪郭線です。写真を撮る時のライティングで影を出ないようにして撮影した写真を使えばコーヒーカプだけの輪郭線は取れるとは予想できます。また画像編集ソフトをつかって背景を消してしまってから輪郭抽出するという方法もあります。ただ、私は目で見た状態、言い換えれば画像加工しないで輪郭線が取れないかということなので、できるだけ途中の編集は加えないことを目指しています。

ここまで書きながら「輪郭線」とはなんぞや?という定義をしていません。まずこのあたりからもう一度考え直さなければなりません。結局。最初に戻ってしまいました。物を見て、その物であると判断できる線とは、はたしてどうやったらコンピュータでも見つけることができるのでしょう?

(いちおう、続く)


この記事が気に入ったらサポートをしてみませんか?