目のないコンピュータが画像を視る仕組み~そして、研究への関心の必要性~
どうも、totokoです。
「画像処理」 「画像認識」をはじめとする画像をあれこれする技術というのは今や珍しいことではなくなりました。
それこそ、スマホで撮影した写真を綺麗に「盛る」というのも、立派な画像処理ですから、「これはねー画像処理をしているんだよ」と言われても「画像処理?」とはならないとは思います。
それぐらいにはもはや画像をあれそれ(画像を弄ったり、画像を解析した)することは、普通の技術として扱われるようになっています。
しかし、しかしですよ。
いったいどーやって画像を処理してるのさ? って思ったことありませんか?
例えば、計算機なら、コンピュータが入力した数字を理解して、それらを用いて和差商積をたたき出すのはなんとなく理解できると思います。
でも、画像って……。まさかコンピュータが目をみて「これはゴッホ!」なんて判断しているわけじゃあるまいし……。
なので、今回はそんな画像処理の基礎の基礎について、解説していこうかな? と思います。
もう本当に基礎なので「いやこんなん教養レベルやんけ」と言われるような話になると思いますが、何事も基礎大事。
知識0と知識1じゃあめちゃくちゃ違うので。
数値で画像を視る
さて、僕ら人間は目でものを見て、それが何かであるかを判断します。
例えばリンゴであっても、真っ赤なリンゴなのか、青リンゴなのかはその色をみて判断します。
それはリンゴの色を目でみて判断しているからです。
同じような形でも、色が茶色ならそれを梨だと判定しているわけです。
これが人間での「画像処理」です。
コンピュータではどうやっているのかというと……。
ほとんど同じです。
なんて言ってしまったら身も蓋もないのでもう少し解説します。
まず色ですが、お絵かきソフトを起動してカラー設定を開いたら、大概のソフトにはパレットから色を選ぶ方法とは別に、数値を設定して色を選ぶという方法があると思います。
RGB(Red・Green・Blue)と書かれている部分がそれです。
それらを細かく細かく設定することで、あらかじめ用意されているカラーパレットにはない複雑な色も表現することができるわけです。
さて、このRGB、それぞれ0~255までの値を持ちますので、色の組み合わせは256×256×256通りあります。
とは言っても、これで色がたくさん表現できますよと言われても、じゃあ色とりどりのお花畑の写真を印刷できますか?
と言われるとできませんな。
なぜなら、その写真(画像)のどの部分にどの色が使われているのかがわからないからです。
そこで登場するのが画素というものです。
デジカメとかの「○○万画素」と言われる宣伝文句でおなじみの画素です。
画像というのはデジタルの世界ではその画素の集まりなんです。
ちっちゃいちっちゃい米粒のような画素一つ一つが色の値(RGB)を持っており、それを組み合わせることで写真のデータを表現できるわけです。
例えばこの画素数がもの凄く少なかったら、とてもじゃないですが、カラフルな世界を表現するなんてことはできません。
よくわからない色のついた四角形の集まりにしかならないからです。
コンピュータが画像を認識するというのは、この画素(ピクセル)の集合体のRGBの値を認識しているわけです。
なので高性能デジタルカメラだと鮮やかに見えるのは、その画素数が多いからですね。
最近のプリンタの性能向上により、デジカメプリントの出来がいいのもそういうことです。 写真データをしっかりと解析して、どの部分にどの色(RGBの値)をプリントすればいいのかということをしっかりとプリンタが印刷してくれているわけですね。
まあ、プリンタに関してはインクの対応色数とかもあるので、一概には言えませんが……。
画素を操作するのが画像処理
では、画像処理とはなんぞやとなると思います。
ここまで読んだ人で察しがいい方はお気づきだと思いますが、画像処理というのは画像の「画素」を操作することなのです。
冒頭で言った写真にフィルターをかけて「盛る」のも、一つ一つの画素に対して適切なフィルターの処理をかけてあげて、綺麗な画像にするのです。
機械学習系の画像認識技術もそういうことです。そのモノの画素のデータを認識して、それらの集まりが「なにであるか(なにの画素の集合体であるか)」を判断しているのです。
だから、最近のカメラアプリにある顔認識というのも、カメラがとらえたデータの画素と、アプリに入っているたくさんの顔のパーツやら輪郭やらの画素データと照合して、それが顔であるという認識をしているということです。
それが端から見るとあたかもコンピュータが、人の顔を認識しているかのように見えるわけです。
正確には画素の集まりから人の顔の画素の集まりに近いから、そう判断しているだけなのです。
まあ、だけなのですと言っても、やってることは結構すごいことなんですがね。
もっと詳しく顔認識の仕組みを説明すると、カメラがとらえたものの中で顔のパターンのデータ(人の顔というのは目のあたりは暗く、その周囲は明るい、そして、鼻筋は明るくその両側は暗いという大ざっぱな顔のパターン)と一致する場所があれば、それが顔として特定します。
次に、その顔の目や鼻の位置に細かく印を付けていき、それが誰の顔であるのかを判断していくのです。
それがいわゆる「顔認識」と呼ばれるものです。
これらも全て画像処理の一つなのです。
基礎研究と応用研究
さてこの顔認識技術。今となっては精度も良くそれこそFaceIDとやらとかで実用化されています。
が、これらも元々は「画像処理」という大きなジャンルから飛び出したものなんです。
大学や企業の研究機関がその画像処理研究を進めたからこそ、実用化に至ったわけです。
そして、今度はその「顔認識」をより精度よくするために――というのが、応用研究になるのです。ここに来てようやくこの研究によって、将来このようなことができまっせというより具体的な実用化のお話ができるわけです。
ノーベル賞とかで受賞している多くのものはその基礎研究の分類されるところです。
そこで大きな発見があってから、ようやく次の段階(具体的な実用化に向けた研究(応用研究))に進むことができるのです。
どうも多くのIT系のエンジニアは、ITのことばかりに精通しており、それ以外のことに関しては疎かになりがちなきらいがあります。
例えば簡単な文章一つを書かせてみても、誤字をしたり、主語述語関係がしっちゃかめっちゃかだったりします。
これが逆に普段から様々な書物に触れていたり、ちゃんと言語に関する勉強をしている人ならばある程度見られるものになっています。
社会的に恥ずかしくないように身につけるべきものを教養とここでは定義しておきましょう(じゃないと、言語学者が真の教養とは……と言いかねないので)。
かつて吉原にいた花魁さんは、とにかく教養が必要とされていました。
そのため、幼いころから、古典や書道、茶道、和歌、箏、三味線、囲碁などの教養や芸事を仕込まれていたのです。
当時は「綺麗な字は遊女から学べ」なんて言われていたぐらいですから。
もちろんなぜ必要なのか、それはあることによって、よく仕事をするめることが出来るからです。
なんたって、お客さんは大名だったり豪商だったりするんです。
お馬鹿なだけでは相手になりません(話になりません)。
終わってからは手紙を書いて次も来てくれるように(リピート客になってもらう)しないといけませんから、字が綺麗でないといけませんし、魅力的な文を書かないといけませんから、和歌といった文芸的な能力も必要になります。
とはいっても私がいいたいのは教養と呼ぶほど大層なものではないです。
せいぜいクイズ番組の問題に答えられる程度の物知りな知識レベルです。あとはその年齢ならあって当たり前の知識技能です。
よく言われるじゃないですか「あなたそんな歳なのに○○できないの?」とかそういうやつです。
だからこそなんでも知っている必要があります。
「俺はITエンジニアだからそれだけ勉強していればいいや」なんて言っていたら、確かにエンジニアとしてはいいのかもしれませんが、もっと先を見据えた時に行き詰まってしまいます。
一般的には持っていて当たり前のものを持っていないと、どんな理由があっても世の中からははぐれモノになります。
そうなるといかに素晴らしいプロダクトを作ったとしても、それを一般の人に使ってもらうことはできません。
芸術作品が素人目からみるとその良さがわからないというのと同じものです。