USB カメラで簡単な画像処理

USB カメラで画像を取り込み初歩的な画像処理を行ってみる   (2009/02/13)


  USBカメラから入力された画像に、簡単な画像処理や、入力画像の位置補正を行うソフトです。

USBカメラから画像を取り込み、簡単な画像処理を行います。
USB_CamIPV.zip
 (18,500)
md5: 0bdf498247b97b7fd9201c0dbc24694e
sha1: 1a059b3522efe9b882a6437af347bf92f15eb322

Detection and elimination of drift
入力映像にドリフト※がある時、画像処理で補正し表示位置を一定に保ちます。
※ドリフト:X軸方向やY軸方向に流れる現象
USB_CamV.zip
 (15,664)
md5: b7037728824fd1a1d12fb089b3fca241
sha1: 935b9e09733558a843ea77772276f98f30da0cbc


はじめに

色々な製品の機能の一部として画像処理が利用されているですが、一般の方には、なじみのない事だと思います。
カメラのピントあわせや、綺麗な肌色を再現するために、写した画像から人の顔を見つけて、マークする処理などが
画像処理技術の応用例です。 医療画像を対象とした医療画像処理、検査装置等に利用される工業用画像処理、
その他様々さ分野で画像処理は利用されています。
医療で用いられているX線CT、MRIが、工業用の非破壊検査で使用されるなど、特定分野で発達してきた技術が、
別の分野に応用され、広がっていくケースも多々あります。

高度な画像処理は別の機会に譲るとして、ここでは初歩の画像処理の例を紹介したいと考えています。

実際の動画に処理を行いますので、各画像処理に関する雰囲気がつかめると思います。

画像に関して

画像は、画素と呼ばれる単位で構成されます。
画素( ドット | pixel )を、横方向と縦方向に並べていく事で、画像が作成されます。また、画素は個別の色情報を持っています。
画像は、縦横の大きさと、各画素の色情報で構成されています。

画像処理概念

例、横 640ドット x 縦480ドット RGB各8ビット (8ビットで256階調が表現できます)

カラー画像 (画像を以下の要素で表現)
 赤(0~255 の256段階の明るさで表現)
 青(0~255 の256段階の明るさで表現)
 黄(0~255 の256段階の明るさで表現)

濃淡画像(画像を以下の要素で表現)
 輝度  (0~255 の256段階の明るさで表現

白黒二値画像(画像を以下の要素で表現)
 輝度 (0、255 or 1 の2段階の明るさで表現)

座標系に関して

画像に限らずモニター等もそうですが、2次元の表示物の位置を指定するのに座標系が用いられます。通常は、
X方向、Y方向という2つの成分を用いて表現する、直交座標系が使用されます。ここで問題となるのは、原点の
位置とX軸、Y軸の正の向きの決め方です。多くの直交座標系では左下を原点とし、右方向をX軸の正の向き、
上方向をY軸の正の向きとしますが、一般的な画像の表記では、左上を原点とし、右方向をX軸の正の向きに、
下方向をY軸の正の向きとしますので、時として混乱を引き起こすことがあります。
BMPファイルでは、左下を原点とする画像が標準で、左上を原点とする画像を記録する時は、縦方向の長さに
マイナスを付けて表現します。
(ヘッダー情報+原点(y=0)から横1列分のデータ+y=1の列の横1列分のデータ+........+最後の行のデータ)
ヘッダー情報に、縦横の大きさやY軸の方向、一画素あたりの色を表現するビット数などが格納されています。

画像処理

元の画像データに何某かの処理を行い、結果を得る事が画像処理です。
結果は、画像であるかも知れませんし、特徴量を現す数値や文字(列)かも知れません。画像に対する操作に
よって結果は異なります。また、複数の操作を連続して行う場合も多々あります。

ここでの処理は、元の画像データに処理を施して、結果の画像を得るタイプの処理です。
処理の形態には、以下の3通りが含まれます。

1、対象画素に、処理を行い結果の画素を得る
   例、ネガポジ変換 明るさの反転(処理結果 = 255 - 元の画素の明るさ)処理

2、対象画素の近傍の画素の情報を参照して、 処理を行い結果の画素の値を決定する。
   例、中間値フィルタ(メディアン・フィルタ)  対象画素と近接する周辺の8画素を輝度順に並び
     換え、その真ん中になった値を出力する処理

3、画像全体の画素を参照して、処理を行い結果の画素の値を決定する。
   例、このアプリケーションの内部で使用している処理ですが、全ての明るさを調べその最大値と
     最小値を見つけ出し、画像の輝度を、表示用の輝度範囲 (0~255) に割り当てる処理


● アプリケーションソフト (USB_CamIPV) で可能な処理
通常表示 フレーム差分 ゾーベル X方向 最小値 3x3
グレイ表示 単純差分表示 ゾーベル Y方向 最大値 3x3
反転表示 差分表示 ローパスフィルタ 3 中間値 3x3
2 フレーム加算 ラプラシアン A ハイパスフィルタ 3 平均値 3x3
4 フレーム加算 ラプラシアン B ローパスフィルタ 5
8 フレーム加算 ラプラシアン C ハイパスフィルタ 5


画像処理の結果

● アプリケーションを起動した状態
アプリケーションを起動した状態
USB カメラを接続(ドライバもインストール済みで Windows がデバイスを正しく認識済み)し、
アプリケーションを起動した状態。

アプリケーションは、Video for Windows の機能を使用して、USB カメラからデータを取得して
いますので、デバイス(USBカメラ)は、
Video for Windows に対応している必要があります。


● 処理結果の表示ウインドウ
処理結果の表示ウインドウ
左側は、USBカメラからの入力画像を表示するウインドウです。
右側のウインドウは、処理結果の出力用です。



通常表示
通常表示の状態
右側の処理結果の出力画面には、入力画像と同じ画像が表示されています。

入力画像を無変換で、出力ウインドウに転送しています。



グレイ表示
グレイ表示
右側の処理結果の出力画面には、グレースケール(0~255)画像が表示されています。



反転表示
反転表示
右側の処理結果の出力画面には、ポジ画像が表示されています。



2 フレーム加算
2 フレーム加算
右側の処理結果の出力画面には、現在の画像情報と、1フレーム前の画像を加算し、結果を2分の1に変換した画像が表示されています。
フレーム間で大きな動きの変化があると、薄らとダブった画像になります。



4 フレーム加算
4 フレーム加算
右側の処理結果の出力画面には、現在の画像情報と、直前の3フレームの画像を全て加算し、結果を4分の1に変換した画像が表示されています。
フレーム間で大きな動きの変化があると、薄らとダブった画像になります。 (動きのある部分が消されます)



8 フレーム加算
8 フレーム加算
右側の処理結果の出力画面には、現在の画像情報と、直前の7フレーム時計の針部分の画像を全て加算し、結果を8分の1に変換した画像が表示されています。

フレーム間で大きな動きの変化があると、8フレームを平均化しますので、動きのあった部分は薄らとした(消された)画像になりますが動きが少ないので、ぶれた画像の様に表示されています。




フレーム差分
フレーム差分
右側の処理結果の出力画面には、現在の画像情報と、1フレーム前の画像とで減算処理を行いオフセット値 127 を加えた結果をの画像が表示されています。

非常に分かりにくいので、針の部分を強調表示した画像を下に添付します。
針部分




単純差分表示
単純差分表示
右側の処理結果の出力画面には、単純差分表示が指定された時の画像データと、現在入力された画像データ間で減算処理を行い、その絶対値を計算した画像が表示されています。



差 分表示
差分表示
右側の処理結果の出力画面には、差分表示が指定された時の画像データと現在入力された画像データ間で減算処理を行い、赤、青、緑の差分の二乗和のルートをとった値が、閾値 18 を超える場合は、現在の画像を表示し、閾値以内の場合は、差分データの絶対値の画像を表示する処理の結果が表示されています。



ラプラシアン A (濃淡画像に変換後)
ラプラシアン A (濃淡画像に変換後)
フィルタ
 0 -1  0
-1  4 -1
 0 -1  0
右側の処理結果の出力画面には、エッジ部分を抽出する処理の一種であるラプラシアンの処理を行った結果の画像が表示されています。

入力画像の処理対象画素と周辺(3x3)の画素の値に、フィルターで定義されている係数を賭け加算した結果を、見易い画像に変換した結果の画像
ラプラシアンのフィルターパタンは、左に記載してある係数を使用



ラプラシアン B (濃淡画像に変換後)
ラプラシアン B (濃淡画像に変換後)
フィルタ
-1 -1 -1
-1  8 -1
-1 -1 -1
右側の処理結果の出力画面には、エッジ部分を抽出する処理の一種であるラプラシアンの処理を行った結果の画像が表示されています。

入力画像の処理対象画素と周辺(3x3)の画素の値に、フィルターで定義されている係数を賭け加算した結果を、見易い画像に変換した結果の画像
ラプラシアンのフィルターパタンは、左に記載してある係数を使用



ラプラシアン C (濃淡画像に変換後)
ラプラシアン C (濃淡画像に変換後)
フィルタ
 1 -2  1
-2  4 -2
 1 -2  1
右側の処理結果の出力画面には、エッジ部分を抽出する処理の一種であるラプラシアンの処理を行った結果の画像が表示されています。

入力画像の処理対象画素と周辺(3x3)の画素の値に、フィルターで定義されている係数を賭け加算した結果を、見易い画像に変換した結果の画像
ラプラシアンのフィルターパタンは、左に記載してある係数を使用



ゾーベル X方向 (濃淡画像に変換後)
ゾーベル X方向 (濃淡画像に変換後)
フィルタ
-1  0  1
-2  0  2
-1  0  1
右側の処理結果の出力画面には、エッジ部分を抽出する処理の一種であるゾーベルの処理を行った結果の画像が表示されています。

入力画像の処理対象画素と周辺(3x3)の画素の値に、フィルターで定義されている係数を賭け加算した結果を、見易い画像に変換した結果の画像
ラプラシアンのフィルターパタンは、左に記載してある係数を使用 X方向の強調用



ゾーベル Y方向 (濃淡画像に変換後)
ゾーベル Y方向 (濃淡画像に変換後)
フィルタ
-1 -2 -1
 0  0  0
 1  2  1
右側の処理結果の出力画面には、エッジ部分を抽出する処理の一種であるゾーベルの処理を行った結果の画像が表示されています。

入力画像の処理対象画素と周辺(3x3)の画素の値に、フィルターで定義されている係数を賭け加算した結果を、見易い画像に変換した結果の画像
ラプラシアンのフィルターパタンは、左に記載してある係数を使用 Y方向の強調用



ローパスフィルタ 3 (濃淡画像に変換後)
ローパスフィルタ 3 (濃淡画像に変換後)
右 側の処理結果の出力画面には、対象の画素を中心とした 3 x 3 の範囲を処理範囲とし、その範囲中の画素の輝度合計を算出し、9(処理範囲の総画素数)で割る事で、対象となる画素の場所に対応した値とする処理を行った結果の画像が表示(見易い画像に変換した結果の画像)されています。 (高周波成分が除去される)



ハイパスフィルタ 3 (濃淡画像に変換後)
ハイパスフィルタ 3 (濃淡画像に変換後)
右側の処理結果の出力画面には、対象の画素を中心とした 3 x 3 の範囲を処理範囲とし、対象画素の輝度の8倍から対象画素の周辺画素(8画素)の輝度合計を減算し、9(処理範囲の総画素数)で割る事で、対象となる画素の場所に対応した値とする処理を行った結果の画像が表示(見易い画像に変換した結果の画像)されています。
(低周波成分が除去される)



ロー パスフィルタ 5 (濃淡画像に変換後)
ローパスフィルタ 5 (濃淡画像に変換後)
右側の処理結果の出力画面には、対象の画素を中心とした 5 x 5 の範囲を処理範囲とし、その範囲中の画素の輝度合計を算出し、25(処理範囲の総画素数)で割る事で、対象となる画素の場所に対応した値とする処理を行った結果の画像が表示(見易い画像に変換した結果の画像)されています。 高周波成分が強く除去される)



ハ イパスフィルタ 5 (濃淡画像に変換後)
ハイパスフィルタ 5 (濃淡画像に変換後)
右側の処理結果の出力画面には、対象の画素を中心とした 5 x 5 の範囲を処理範囲とし、対象画素の輝度の24倍から対象画素の周辺画素(24画素)の輝度合計を減算し、25(処理範囲の総画素数)で割る事で、対象となる画素の場所に対応した値とする処理を行った結果の画像が表示(見易い画像に変換した結果の画像)されています。
(低周波成分が強く除去される)



最小値 3x3 (濃淡画像に変換後)
最小値 3x3 (濃淡画像に変換後)
右側の処理結果の出力画面には、対象の画素を中心とした 3 x 3 の範囲を処理範囲とし、その範囲中の画素の輝度で最も低い値を、対象となる画素の場所に対応した値とする処理を行った結果の画像が表示されています。



最大値 3x3 (濃淡画像に変換後)
最大値 3x3 (濃淡画像に変換後)
右側の処理結果の出力画面には、対象の画素を中心とした 3 x 3 の範囲を処理範囲とし、その範囲中の画素の輝度で最も高い値を、対象となる画素の場所に対応した値とする処理を行った結果の画像が表示されています。



中間値 3x3 (濃淡画像に変換後)
中間値 3x3 (濃淡画像に変換後)
右側の処理結果の出力画面には、対象の画素を中心とした 3 x 3 の範囲を処理範囲とし、その範囲中の画素をその輝度でソート(並び替え)処理を行い、ソート後の結果の中央の値を、対象となる画素の場所に対応した値とする処理を行った結果の画像が表示されています。



平均値 3x3 (濃淡画像に変換後)
平均値 3x3 (濃淡画像に変換後)
右側の処理結果の出力画面には、対象の画素を中心とした 3 x 3 の範囲を処理範囲とし、その範囲中の画素の輝度の合計値を算出し、9(処理範囲の総画素数)で割った値を、対象となる画素の場所に対応した値とする処理を 行った結果の画像が表示されています。
(このケースでは、処理自体は ローパスフィルタ 3 と同じ)


最後に

細かい説明もなく、あまりにも初歩的な内容ですが、自分の目で確認する事は理解に役立つと思います。
これを機会に、画像処理に興味関心を持って頂ければ幸いです。




go to TopPage go to CategoryTop