こんにちは。くらくです。
今回は、画像処理技術で何が実現できるのか、ということから、画像処理ライブラリであるOpenCVって?ってところまで書いていきたいと思います。
本題に入る前に自分語りをさせてください。
ブログを開設しようと思ったきっかけの一つに、技術のアウトプットをしよう、と考えたことがあります。
画像処理、画像認識を約3年間学んできて、曲がりなりにもTAとして今教える立場にあるのですが、やはり自分の理解不足を感じることは多いです。
技術に対しての自分の理解を深めるため、教えるという立場からよりわかりやすく伝えるにはどうしたら良いか、ということを考えるために、技術的な記事を書いていこうと考えています。
至らぬ点は多々あるかと思いますが、もし気づかれた点などございましたら、ご指摘いただけると大変助かります。
画像処理で何ができるの?
何かを学ぶときそれが何に活かされているのか知るのって重要ですよね。
私は、数学って何に使えるんだよ!公式とか知らんわ…あほくさ…って中学の時は思ってました。
そんな数学も、何にどのように使われているのか、ということを知ることで興味が持てるようになりました。本質を知るのって大切ですよね。
前置きはこのくらいにして、画像処理技術を生かすと何ができるんだ?ってところですが、まずどういうものに活かされているのか、具体例を出していこうと思います。
・顔認識
スマホのロック解除なんかに使われたり、写真を撮る際に顔に焦点を当ててくれたりしますよね。
人間の顔には、目や鼻など特有の構成要素があって、その特徴を見ることで顔を認識しています。
・VR/AR
仮想世界に実際に入り込んだような体験を得られるのがVRです。PSVRなどがありますね。
現実世界にCGの仮想物体などを重ねて表示することで、仮想物体が実際にあるような体験を得ることがARです。ポケモンGoなどで実際の風景にポケモンが出ているように見えるものがありますよね。(この機能あまり使っている人はいないですが…)
・自動車の自動ブレーキや自動走行
自動走行を行うためには、道路の白線位置や目の前や並走している車、道路上の障害物等を、高速かつ高精度に認識する必要があります。動画と言えど、一枚の画像の連なりですので、フレーム画像一枚一枚に対して処理を行ったり、フレームの連続性を用いて、動画的な処理を行ったりします。
これらは一例ですが、このように画像処理は様々な場所で活かされています。
つまり大まかに言えば、
画像処理技術を身につけると、たくさんのことできるようになります!
プログラミングという観点で言えば、画像という人間が視覚で捉えられる媒体から、数値的な情報を得ることができるようになり、それを用いて何かを生み出すことができます。
例えば、遊戯王カードをスマホカメラで撮影すると、画像からカード名や型番を認識してくれて、値段相場を出してくれる……みたいなアプリを作りたい!と考えたら、カード名やテキストの領域の抽出やOCR技術など、画像処理を用いることで解決できることがたくさんあるかと思います。
どうやって画像処理するの?
Q:画像処理が便利なのはわかったし、使えたら色々できるってのは伝わったけど、じゃあどうやって画像処理するの?
A:OpenCVを使います。
OpenCVとはインテルが開発・公開したオープンソースのコンピュータビジョン向けのライブラリです。
OpenCVを使うことで、簡単に画像処理のプログラムを書くことができます。
最近、OpenCV3系からもヴァージョンアップし、OpenCV4がリリースされました。
今のところ、定数の名前が変わっていることくらいしか見たことありませんが、学び始めるならちょうど良いタイミングかもしれませんね。
画像処理するならOpenCVを学ぶだけで良いの?
ライブラリを使うだけで画像処理できちゃうなら、OpenCVの使い方だけ知ってれば良いのかと言われれば、そうでもないです。
本質を知ることが重要、と前述しましたが、私は
ライブラリを使えるようになるだけでは、良いプログラムは作ることができない
と考えています。
特に、デジタル画像がどのようにコンピュータ上で表現されているのか、色や解像度はどのように決められているのか、ということは知識として持っておく必要があります。
その上で、初歩的な部分では、まずライブラリAPIを使わず、直接処理を書くことで、基本的な処理の流れやアルゴリズムの構造を理解することができます。
この辺りは今まで私も怠っていたことで、今になって自分の知識がどれだけ表面的なものだったか、ということを痛感しました。
今後記事を書く際は、このことを念頭に置いて書いていくつもりです。
まとめ
最後まで目を通してくださりありがとうございました。
画像処理で何ができてどう使うのか、というテーマでしたが、今回はこの辺りで終わりにしたいと思います。
まとめると、
- 画像処理技術は様々なところで使われており、習得することで様々なことができるようになる
- 画像処理するならOpenCVを使おう
- APIをただ使うだけでなく、実際に自分で実装してみて、基本的な処理やアルゴリズム構造を理解することが重要
という感じになります。
なので次回は、
プログラム上ではどのように画像が表現されるか、表色系や色空間について
次々回には、
MacのXcodeで画像処理プログラミングをする!〜OpenCVの導入から画像表示まで〜
みたいな感じでかけたら良いなと考えていますので、また読んでいただけたら嬉しいです。
ps:
せっかくなんで、次からは技術に関する記事はMarkdown記法で書いて行きたいなと思っています。