画像処理とは?
画像処理(英語: Image Processing)とは、カメラ等で取り込んだデジタル画像から意図した情報を取り出すために処理加工を行うことをいいます。情報を取り出す画像解析とその解析をしやすくするために行う前処理を合わせて指すのが一般的です。
画像処理の歴史は1960年代から人工衛星が取得した衛星画像処理の品質改善のために研究が始まり、CTやMRI等の医用画像処理に徐々に広がっていきました。その後、PCの価格低下と処理の高速化、デジタルカメラの普及により、一般用途での活用が急速に広がりました。また高解像度なデータを高速画像処理する必要性から、画像処理にFPGA等のハードウェアを使用するケースも増えてきています。
画像処理の利用と応用例
画像処理はノイズを取り除いてきれいな画像を出力する以外にも、最近では、コンピュータ上で特定の物体を見つける画像認識の活用が増えています。人間の視覚による直感的な判断をコンピュータが行えるようになることで、これまで人による目視検査に頼っていた生産ラインでの外観検査等をコンピュータによる画像検査に置き換える動きが進んでいます。
その応用は医用画像、顔認識、文字認識(OCR)といったより高度な対象に広がってきており、ロボット産業の市場拡大の傾向から、ロボットの目(画像のセンサ)として動体検出や3次元画像処理を取り扱うコンピュータビジョンという研究分野として発展しています。(画像認識とは)
画像処理での色空間
カラー JPEG,BMP形式等のデジタル画像データでは、各画素(ピクセル)をRGBの色空間で取り扱われます。画像処理の色調整にRGB色空間を利用すると、黄色等の中間色を作る場合にはRGB3色の配合と最終的な色の関係理解をした上で調整する必要があります。そこで人間の直感に近い処理を可能にするためにHSV色空間を用いることがある。HSVは色相(Hue)、彩度(Saturation)、明度(Value)の軸で色を表し、○○色をこのぐらいの明るさでという調整が容易となります。
画像処理の流れ
画像処理は画像を取得後、1.前処理 2.物体検出・認識 の順で行います。
画像処理のアルゴリズムについては別ページでご紹介いたします。(画像処理アルゴリズムとは)
1.前処理
画像から特定の情報を検出する際、検出する対象を1、そうでないものを0などしきい値でわける二値化処理が行われます。取得した画像がしきい値の決定で境界の切り分けができない場合は前処理が必要になります。ここでは「フィルタ」と「モルフォロジー処理」についてご紹介します。
「画像処理フィルタ」
画像に含まれるノイズ成分を低減させる目的でフィルタを利用します。ノイズを少なくすることで境界線が明確になるなど解析においてメリットがあります。例えば下の画像のようにノイズを多く含む画像に対してメディアンフィルタをかけることにより画像をクリアにし、境界部分もはっきりみることができます。メディアンフィルタはごましおノイズと呼ばれる周囲と比べて大きく輝度が異なるノイズ成分を除去するのに特に効果的です。このように取り出したい画像やノイズの特徴から適切なフィルタを選択しかけてあげることがポイントとなります。
主なフィルタと処理後のフィルタ効果を下にご紹介します。平均化やガウシアンなど輝度値の変化を滑らかにする作用のフィルタを平滑化フィルタといいます。
「モルフォロジー処理」
"モルフォロジー処理" とは、画像処理をする過程で形状ベースの処理操作の総称です。モルフォロジー演算は、構造化要素を入力イメージに適用し、同じサイズの出力イメージを作成します。主な処理には「膨張」と「収縮」があります。この二つの処理を組み合わせで「収縮」させてから「膨張」させることをオープニングと呼び、輪郭を滑らかにする、小さい構造を削除する際に利用します。一方で「膨張」してから「収縮」させることをクロージングと呼び、ギャップをつなぐ、穴をふさぐ際に利用します。
これらの処理を画像全体にかけても期待する画像を取り出せない場合、コントラスト調整、ROI(関心領域)に対してマスクをかけるなどの処理と複合的に組み合わせていく必要があります。
2.物体検出・認識
前処理が終わったら、2値化により物体検出のための作業を行います。(セグメンテーション)
「輝度しきい値をもちいた物体検出」
2値化での物体検出の際もっとも一般的なのが輝度しきい値による切り分けです。下のコインが並んだ画像の輝度の分布を表すヒストグラムをみると、2つのピークがあることがわかります。背面が黒でコインの輝度のほうが強く、その間にしきい値を設定すればよいと予想ができます。ここではしきい値100以上は白、それ以下は黒というきりわけをしています。 面積を出すなどの場合はさらに穴を埋めるなど必要なモルフォロジー処理により適切なセグメンテーションを行います。
「エッジ検出」
しかし人物など立体的なものであれば、光の当たり方などにより、検出したい物体の中で輝度が異なるためひとつのしきい値で切り分けができないことがあります。そのような場合はエッジ検出を用いて対象物体を切り分けます。主なエッジ検出のアルゴリズムとしては大きく分けるとソーベル、プレウィット、等の勾配法(1次微分)とガウスのラプラシアン、ゼロクロスなどのラプラシアン法(2次微分)の2種類があります。強力なエッジ検出手法の一つがキャニー法です。キャニー法では2 つの異なるしきい値 (強いエッジと弱いエッジの検出用) を使用し、強いエッジに接続する弱いエッジのみを出力に含めます。したがって、他の方法よりノイズの影響を受けにくいので、弱いエッジを正確に検出できる可能性が高くなります。
「物体認識のための直線・円の抽出」
検出したエッジ画像から特定の形状に絞り込むために、直線や円といった特徴を抽出する方法にハフ変換やラドン変換があります。これらについては下記ページに説明があります。
画像処理の応用としてのコンピュータビジョン
コンピュータやロボットの目として期待されるコンピュータビジョンでは、より複雑な環境や一般生活の中での画像処理が行われることになります。そこでこれまでのエッジや直線・円等の検出だけでなく、人や人の顔といったより具体的なものの検出を行うアルゴリズムの開発、ステレオビジョン等奥行き情報を含んだ3次元画像処理などの最新技術、さらにはデータベース上に多数の画像を特徴としてあらかじめ持っておき、検出に利用する機械学習の領域との協調が進んでいます。
画像処理を実行する環境
画像のデジタルデータはPixelの並び(行列)とRGBの色強度を組み合わせた3次元の行列であつかわれることが一般的です。MATLABはMatrix Laboratoryを語源にするとおり行列演算を得意とするため、画像処理分野でも広く使われています。Image Acquisition Toolbox™ を用いることで画像の取り込みも簡単に行うことができます。
Image Processing Toolbox™ならびに、Computer Vision Toolbox™を使用することで、多様かつ複雑な画像処理を容易に行うことが出来ます。両製品あわせて、500もの画像処理用関数が提供され、20年もの長い期間にわたり使われてきています。また近年は、GUIベースの各種ツールも提供され、さらに使いやすくなり、画像処理のプログラミングの効率向上が期待できます。
さらにMATLAB Coder™ やHDL Coder™、 Vision HDL Toolbox™ を用いることで、MATLAB環境で作成した画像処理アルゴリズムをFPGAなどが実装された画像処理ボードを用いた画像処理システムで利用できるCコードやHDLコードに変換することができます。アルゴリズムの検討から実装までを一貫して行うことで効率的な画像処理ソリューション開発につながります。
活用例および役立つ使い方
関連製品情報
- 外部のカメラからの直接画像取込みを可能とする、Image Acquisition Toolbox™
- 並列処理やGP GPUを用いて画像処理の高速化を可能にする、Parallel Computing Toolbox™
- 機械学習のための機能を強化する、Statistics and Machine Learning Toolbox™ ならびに Deep Learning Toolbox™
- 開発した画像処理アルゴリズムを、Cコードに変換するための、MATLAB Coder™
- 開発した画像処理アルゴリズムを、HDLへ変換するための、HDL Coder™ ならびに Vision HDL Toolbox™
- 画像処理入門の方向け(基礎) : MATLABによる画像処理
参考: Steveの画像処理ブログ, Image Processing Toolbox, 画像処理とコンピュータビジョン, SLAM (自己位置推定と環境地図作成), 外観検査