画像処理アルゴリズムとは?
画像処理アルゴリズムとは、デジタル画像の作成、表示、処理、画像検査、伝送、などのシステムを実現するために開発されたコンピュータ処理技術です。画像処理アルゴリズムは劣化した画像の復元、特徴の検出と測定、形状やテクスチャの解析、カラーバランスの調整といった高度な処理を行うために用いられます。今日、画像処理アルゴリズムは、写真や映像分野だけでなく、医療、生命科学、ロボット工学、宇宙開発、自動車、通信、エレクトロニクス、地球科学、工業、外観・形状検査など様々な分野のシステムで使用されています。 画像処理では、入力元となる画像を取り込み、そこから目的に応じて必要な情報を抽出するための変換処理を行い、抽出した情報を、画像認識などの次の過程で利用するという手順が一般的です。この流れを実現するプログラミングの中で利用されるのが画像処理アルゴリズムです。
画像処理アルゴリズムを使用することで以下のような様々なことを行うことが可能です。
- 明瞭さを上げノイズや歪み、その他の不要な偽信号を除去
- 対象物のサイズ推定や、スケール、個数の抽出
- 表示または印刷用の画像調整
- ネットワーク伝送のための画像圧縮
- 画像を有用な領域に分割するセグメンテーション
- エッジ(輪郭)検出に加え、コーナー点・直線・円などの特徴検出
- 輪郭、明るさ、色の濃さなどをはっきりさせるための強調
- 歪んだ画像の補正や、2つの画像のレジストレーション(位置合せ)
- 画像の中から、相関度の高い領域の検出
画像処理アルゴリズムの種類
このような様々な処理を行うための代表的なアルゴリズム・方法の種類として以下のようなものがあります。
画像処理の基本操作
幾何学的変換 (拡大・縮小・回転等)
レジストレーション(位置合せ)
画像の強調
ブレ除去
画像解析
色空間の変換
画像処理の基本操作
関心領域 (ROI:regions of interest) は、フィルターの適用やその他の操作・アルゴリズム処理の対象として選択する領域のことです。ROI の定義は、"バイナリ マスク" の作成によって行われます。この バイナリ マスクは対象の画像と同じサイズのバイナリ (二値)画像で、関心領域が 1 に、それ以外の領域が 0 に設定されます。1つの画像内に複数の ROI を定義することもあります。領域は、連続するピクセル(画素)の領域を囲む多角形のように領域に基づいて定義したり、強度の範囲によって定義したりします。
![algo-1 algo-1](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_0.adapt.full.medium.jpg/1718345149927.jpg)
近傍処理では、対象ピクセルの周囲の値を使用して、一度に 対象となる1 ピクセルの値を計算する演算です。近傍は、そのピクセルに対する位置によって定義されるピクセルの集合で、対象ピクセルは"中心ピクセル" と呼ばれます。近傍は通常四角形ブロックで表されます。一般的に1ピクセルのみ計算することは少なく、スライディング近傍演算といわれる手法で全体のピクセルに対し同一の計算を行います。中心ピクセルがある要素から次の要素に移動すると、近傍ブロックは同じ方向に移動します。
次の図は、6 行 5 列の行列内の要素をもつ 2 行 3 列のスライディング ブロックを示しています。各近傍の中心ピクセルには、点で印が付いています。
![algo-2 algo-2](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_1.adapt.full.medium.jpg/1718345149937.jpg)
ブロック処理では、画像を m 行 n 列のセクションに分割します。これらのセクション、つまり個別ブロックは、重ね合わせがなく左上隅から始まる行列データです。ブロックが画像にぴったりと合わない場合は、パディングしたり、右辺または底辺の部分ブロックを操作したりできます。次の図は、15 行 30 列の行列を 4 行 8 列のブロックに分割したものです。右辺と底辺に部分ブロックができます。部分ブロックをそのままにすることも、最終的なサイズが 16 行 32 列になるようにパディングすることもあります。その後、個々のブロックに対して指定した演算やアルゴリズム処理を行って、出力画像の対応するブロック内の値が決まります。
![algo-3 algo-3](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_2.adapt.full.medium.jpg/1471007732057.jpg)
幾何学的変換 (拡大・縮小・回転等)
サイズ変更、回転、トリミングなどの単純な幾何学的変換に加え、アフィン変換や射影などのより複雑な 2 次元幾何学的変換があり、変換行列により処理を定義することが出来ます。変換行列の積をとることで、複数のアフィン変換を 1 つの行列に結合することもできます。
アフィン変換 | 例 | 変換行列 | |
---|---|---|---|
平行移動 |
![]() |
\[ \left[\begin{array}{c}1 & 0 & 0\\0 & 1 & 0\\ t_x & t_y & 1\end{array}\right]\] |
\(t_x\) は \(x\) 軸に沿って移動を指定します。 \(t_y\) は \(y\) 軸に沿って移動を指定します。 |
スケール |
![]() |
\[ \left[\begin{array}{c}s_x & 0 & 0\\0 & s_y & 0\\ 0 & 0 & 1\end{array}\right]\] |
\(s_x\) は \(x\) 軸に沿って倍率を指定します。 \(s_y\) は \(y\) 軸に沿って倍率を指定します。 |
せん断 |
![]() |
\[ \left[\begin{array}{c}1 & sh_y & 0\\sh_x & 1 & 0\\ 0 & 0 & 1\end{array}\right]\] |
\(sh_x\) は \(x\) 軸に沿ってせん断係数を指定します。 \(sh_y\) は \(y\) 軸に沿ってせん断係数を指定します。 |
回転 |
![]() |
\[ \left[\begin{array}{c}\cos(q) & \sin(q) & 0\\-\sin(q) & \cos(q) & 0\\ 0 & 0 & 1\end{array}\right]\] |
\(q\) は回転の角度を指定します。 |
レジストレーション(位置合せ)
2つの画像のレジストレーション(位置合せ)をする代表的な方法として、コントロールポイントレジストレーションと、輝度ベースの自動レジストレーションがあります。コントロール ポイント レジストレーションでは、共通する特徴を手動で選択して、同じ位置にマッピングすることができます。このレジストレーション方法は、区別しやすい特徴を含む画像に最も適しています。輝度ベースの自動レジストレーションは、特定のピクセルを、相対的な輝度(明るさ)のパターンに基づいて同じ位置にマッピングするアルゴリズムです。このアプローチは、膨大な画像のコレクションを使用するワークフローや、自動化されたワークフローが必要な場合に最適です。
画像の強調
コントラストの調整は、輝度(明るさ)値を新しい範囲にマッピングする画像改善アルゴリズムの 1 つです。下図は低コントラストの例をヒストグラムと共に示しています。このヒストグラムは値が範囲の中心に集中していることを意味しています。データ値をマッピングし直して輝度の範囲全体 [0, 255] に分布するようにすると、コントラストを増加することができます。よく使われるアルゴリズムとして、ヒストグラム均等化や適応ヒストグラム均等化があります。
![algo-4 algo-4](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_3.adapt.full.medium.jpg/1718345150023.jpg)
フィルター処理は、画像を変更させたり、強調させたりするアルゴリズムです。たとえば、フィルター処理して、ある特徴を強調したり、取り除いたりします。フィルター処理を使用して実現する処理演算には、平滑化、先鋭化、エッジの強調も含まれます。
画像のフィルター処理は、"たたみ込み" と呼ばれる演算を通して行われます。たたみ込みは、各出力値が、近傍の入力ピクセルの重み付き和となる近傍演算です。重み行列は、"たたみ込みカーネル" と呼ばれます。これは、"フィルター" としても知られています。たたみ込みカーネルは、相関カーネルを 180 度回転させたものです。
たとえば、輝度(明るさ)を表す行列値が以下の場合、
A = [17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9]
たたみ込みカーネルは以下のようになります。
h = [8 1 6 3 5 7 4 9 2]
次の図は、以下の手順に従って出力 (2,4) を計算する方法を示しています。
- 中心要素の周りで、たたみ込みカーネルを 180 度回転します。
- たたみ込みカーネルの中心要素をスライドし、A の (2,4) 要素のトップに配置します。
- 回転したたたみ込みカーネルの中の各重みを、その下に位置する A のピクセルに乗算します。
- 手順 3 の計算結果を加算します。
例えば、場所が (2,4) の出力は、以下のように計算されます。
1 . 2 + 8 . 9 + 15 . 4 + 7 . 7 + 14 . 5 + 16 . 3 + 13 . 6 + 20 . 1 + 22 . 8 = 575
![algo-5 algo-5](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_4.adapt.full.medium.jpg/1718345150037.jpg)
"モルフォロジー" とは、画像を処理する過程で形状ベースの画像処理操作の総称です。モルフォロジー演算は、同じサイズの出力画像を作成します。モルフォロジー演算では、出力内の各ピクセルの値は入力内の対応するピクセルと近傍との比較に基づいています。近傍のサイズと形状を選択すると、入力の特定の形状に敏感なモルフォロジー演算を作成できます。
最も基本的なモルフォロジー演算のアルゴリズムは膨張と収縮です。膨張は画像内のオブジェクトの境界にピクセルを加えます。一方、収縮は境界のピクセルを除去します。画像内のオブジェクトに加えたり、オブジェクトから削除するピクセルの数は、処理するために使用する "構造化要素" のサイズと形状により異なります。モルフォロジーな膨張と収縮操作において、出力の中の任意に与えられたピクセルの状態は、入力のピクセルとその近傍に対して適用するルールにより決定されます。処理するために使用されるルールによって、膨張または収縮のいずれの操作をするかが定義されます。次の表は、膨張と収縮に関するルールを示します。
操作 | ルール |
---|---|
膨張 |
出力ピクセル値は、入力ピクセル近傍の中ですべてのピクセルの "最大" 値です。バイナリ 画像の場合、値 1 のものが存在すると、出力は 1 になります。 |
収縮 |
出力ピクセル値は、入力ピクセル近傍の中ですべてのピクセルの "最小" 値です。バイナリ 画像の場合、値 0 のものが存在すると、出力は 0 になります。 |
ブレ除去
画像のブレ、つまり劣化は多くの要因から生じます。
- カメラを使用して、データを取り込む過程での移動、または長い露光時間を使う場合の被写体の移動。
- ピンぼけの光学系、広角レンズの使用、大気の乱れ、または、露光時間が短いため、取り込んだフォトン数が少ない。
- 共焦点顕微鏡での散乱光の歪み。
ブレを含む劣化した画像は、g = Hf + n という方程式で近似的に記述されます。
ここで、
g:ブレを含む画像
H:歪み演算子。"点像分布関数" (PSF) とも呼ばれます。空間領域で、PSF は、光学システムが光源のブレの度合いを表します。PSF は、光学伝達関数 (OTF) の逆フーリエ変換です。周波数領域で、OTF は、線形、位置不変システムへのインパルスの応答です。OTF は、点像分布関数 (PSF) のフーリエ変換です。歪み演算子は、たたみ込みを行ったときに、歪みを生じます。点像分布関数による歪みは、典型的な歪みの 1 つです。
F:元の真の画像
N:画像の取得時に発生し、画質を乱す加法性ノイズ
ブレ除去の基本的な作業は、このモデルをベースに、歪みを正確に表現している PSF とブレている画像とをアルゴリズムにより分離することになります。
画像解析
オブジェクト解析には、エッジやコーナーそして円およびラインの検出、境界のトレースなどが含まれ、また、画像内のオブジェクトに関する情報の取得も行われます。
画像の中では、エッジは輝度が急激に変化する経路に沿った曲線です。エッジはしばしばオブジェクトの境界に関係しています。エッジ検出アルゴリズムはエッジを特定するために使用されます。そのアルゴリズムは、主に次の 2 つの条件を使用して輝度が急速に変化する場所を探します。
- 輝度の 1 次導関数が指定されたしきい値より大きい場所
- 輝度の 2 次導関数がゼロクロッシングをもつ場所
エッジ検出のアルゴリズムは、ソーベル、ロバーツ、プレウィットなど様々なものがありますが、最も強力なエッジ検出アルゴリズムの一つはキャニー法です。キャニー法は他のエッジ検出法と違って、2 つの異なるしきい値 (強いエッジと弱いエッジの検出用) を使用し、強いエッジに接続する弱いエッジのみを出力に含めます。したがって、他のアルゴリズムよりノイズの影響を受けにくいので、弱いエッジを正確に検出できる可能性が高くなります。
コーナーは、画像間の対応関係を探すときに最も信頼性の高い特徴です。次の図には 3 つのピクセル (オブジェクトの内部に 1 つ、エッジに 1 つ、コーナーに 1 つ)があります。ピクセルがオブジェクトの内部にあると、その周囲 (実線の四角) はその近傍の周囲 (破線の四角) と同様になります。これはすべての方向の近傍ピクセルに当てはまります。オブジェクトのエッジにあるピクセルでは、その周囲は一方の近傍ピクセルの周囲と同じではありませんが、別の方向 (垂直) の近傍に類似します。コーナー ピクセルの周囲はすべての方向で近傍の周囲と異なります。
![algo-6 algo-6](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_5.adapt.full.medium.jpg/1471007732276.jpg)
コーナー検出のアルゴリズムとしては、例えば Harris のコーナー検出法 や Shi and Tomasi の最小固有値法 があります。両方とも差分二乗和行列 (SSD) の固有値に依存するアルゴリズムを使用します。SSD 行列の固有値はピクセルの周囲とその近傍の周囲との違いを表します。周囲と近傍の周囲との差が大きいほど、固有値が大きくなります。固有値が大きいほど、そのピクセルがコーナーにある可能性が高くなります。
また、円およびラインの検出はハフ変換 というアルゴリズムで行うことができます。
テクスチャ解析は画像内の領域をそのテクスチャ内容によって特徴付けるアルゴリズムです。テクスチャ解析は、粗い、滑らか、絹のような光沢、でこぼこ、などのような一般的な材質の記述を、輝度値の空間的な変動の関数として数量化する試みです。その意味では、粗いテクスチャやでこぼこは輝度値の空間的変動を意味します。テクスチャ解析の用途は、リモート センシング、自動検査、医療画像処理などいろいろあります。テクスチャ解析はテクスチャの境界を見つけて、画像をテクスチャによってセグメント化できます。テクスチャ解析のアルゴリズムはオブジェクトが輝度(明るさ)よりはテクスチャによって区別され、従来のある一定の輝度値で区分するしきい値手法が効果的ではない場合に役立ちます。
例えば、輝度の局所変動に関する情報によってテクスチャの特徴を記述できます。たとえば、滑らかなテクスチャの領域では近傍の値の範囲が小さくなり、粗いテクスチャでは値の範囲が大きくなります。同様に、近傍ピクセルの標準偏差を計算すると、その領域のピクセル値の変動の度合いを示すことができます。
画質を最終的に判定するのは実際にそれを見る人ですが、画質を客観的に測定するアルゴリズムも開発されています。これは多くの用途で役立ちます。画質の客観的な測定方法では、多くの場合、測定対象と比較するために、参照画像と呼ばれる歪みのないコピーが存在する必要があります。画質の測定に使用できるアルゴリズムとして、例えば、PSNRとSSIMというものがあります。
PSNR — 画質のPSNR(ピーク S/N 比)測定では、まず二乗平均誤差 (MSE) を計算してから、データ型の最大範囲を MSE で除算します。この方法は、計算は簡単ですが、人間が感じる画質とはずれが生じる場合があります。
SSIM — 画質の SSIM (構造的類似性) 指数の測定では、輝度とコントラストに対して正規化された輝度の局所的なパターンを比較する構造的類似性を測定します。この画質メトリックは、人間の視覚系が構造に基づいた情報の抽出に適しているという原則に基づいています。
セグメント化(セグメンテーション)とは、画像を複数の部分または領域に分割する処理アルゴリズムです。多くの場合、分割はピクセルの特性に基づいて行われます。たとえば、領域を検出する方法の 1 つは、ピクセル値が突然不連続になる部分を探すことです。こうした部分は、通常はエッジを示します。これらのエッジが領域を定義する場合があります。もう 1つのアルゴリズムは、色の値に基づいて領域分割することです。
画像の変換には、フーリエ変換、離散コサイン変換、ラドン変換などがあります。
フーリエ変換は、さまざまな大きさ、周波数、位相の複素指数の和として、画像を表現するものです。フーリエ変換は、強調、解析、復元、圧縮を含む幅広い画像処理アプリケーションで重要な役割を果たします。
離散コサイン変換 (DCT) は、さまざまな大きさと周波数からなる正弦波の和として、表現します。DCT は、標準的画像について、視覚的に重要な情報のほとんどが、DCT の数個の係数に集中しているという性質をもっています。このため、DCT は画像圧縮の用途にしばしば使用されます。たとえば、DCT は、JPEG として知られている国際標準の非可逆圧縮アルゴリズムで中心的な機能を果たしています (この名前は、この標準を策定したワーキング グループの名前、Joint Photographic Experts Group に因んで付けられています)。
ラドン変換は、指定した方向で "投影" を計算するアルゴリズムです。2 次元関数 "\(f(x,y)\)" の投影は、線積分の集合です。ラドン変換はある方向に平行なパスに沿って、すなわち "ビーム" に沿って、複数のソースから線積分を計算します。次の図は、指定した回転角での単一投影を示しています。
![algo-7 algo-7](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_6.adapt.full.medium.jpg/1718345150104.jpg)
たとえば、"f(x,y)" の垂直方向での線積分は "f(x,y)" の "x" 軸上への投影です。そして、水平方向での線積分は "y" 軸上での "f(x,y)" の投影です。
色空間の変換
色を表現する方法として、赤・緑・青のRGB 値として表す方法がよく用いられますが、色を数値的に表現するためには、RGB 以外の他のモデルもあります。種々のモデルは、"色空間" として考えます。これは、ほとんどの色が、2 次元、3 次元、4 次元の座標系にマッピングされているからです。すなわち、色仕様は、2 次元、3 次元または 4 次元空間で座標系を作っています。ある色空間で表現されている色を、違う色空間の数値に置き換えることが色空間の変換になります。
種々の色空間は、ある計算をより簡単に行うように色情報を表現したり、または個々の色をより鮮明にするように、色を識別する方法を提供するために存在しています。たとえば、RGB色空間は、赤、緑、青の色相の混ざりの割合を定義します。HSV色空間は下記の図のように、色を表す色相(Hue)、色の濃さをあらわす彩度(Saturation)、明るさを表す輝度(Value)の3つの数値で色を表します。
![algo-8 algo-8](https://uk.mathworks.com/discovery/image-algorithm/_jcr_content/mainParsys/image_7.adapt.full.medium.jpg/1718345150113.jpg)
そのほかにも、XYZ、xyY、uvL、L*a*b*、YCbCr等の色空間があります。
画像処理アルゴリズム開発環境
Image Processing Toolbox™ならびに、Computer Vision Toolbox™を使用することで、これら多様かつ複雑な処理アルゴリズムを用いたプログラミングを容易に行うことが出来ます。両製品あわせて、500もの画像処理アルゴリズム用の関数が提供され、20年もの長い期間にわたり使われてきています。また近年は、GUIベースの各種ツールも提供され、アルゴリズムがさらに使いやすくなっています。
活用例および役立つ使い方
関連製品情報
- 外部のカメラからの直接画像取込みを可能とする、Image Acquisition Toolbox™ (製品ページ)
- 並列処理やGPGPUを用いて画像処理の高速化を可能にする、Parallel Computing Toolbox™ (製品ページ)
- 機械学習のための機能を強化する、Statistics and Machine Learning Toolbox™ (製品ページ) ならびに Deep Learning Toolbox™ (製品ページ)
- 開発した画像処理アルゴリズムから、Cコードを生成するための、MATLAB Coder™ (製品ページ)
- 開発した画像処理アルゴリズムから、HDLを生成したり、FPGAへ実装するための、HDL Coder™ (製品ページ) ならびに Vision HDL Toolbox™ (製品ページ)