「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
画像処理とコンピュータビジョンについて纏める。
- 高性能 & 廉価なカメラ、CPUの登場
- アルゴリズムの成熟
- OpenCV等のライブラリ
により、コンピュータビジョン(CV)開発を、
より生産的に行うことができるようになってきた。
画像処理 †
与えられた画像に対して何らかの処理を行い出力する。
コンピュータビジョン †
- コンピュータビジョン(computer vision :CV)
- 撮影対象を認識・判別して、対象の状態をデータで出力する。
- 顔検出
- 顔認証
- 検査装置
- 監視装置
- 安全装置
- ロボティクス
基礎 †
画像入力 †
デジカメ †
- ピンホールではなくレンズを使う(=カメラ)、ピントがずれる事がある。
- CCDやCMOSのイメージセンサを受光素子の平面上に配列したエリアイメージセンサで
レンズで集光した光(光子)を受けて、電気信号に変換して被写体の画像を生成する。
- 単板式 : RGBのカラーフィルタを、R=4/N, G=2/N, B=4/Nの市松模様に配置。
- 3版式 : RGBをプリズムを使って別々のエリアイメージセンサで受け取る。
- 撮像物との距離は焦点距離に対して3ケタ以上
大きいことが多くピンホールカメラモデルと一致する。
- カメラのキャリブレーション
透視変換で世界座標系からイメージ座標系へ変換
- 外部パラメーター:3D世界座標系から3Dカメラ座標系への剛体変換
- 内部パラメーター:3Dカメラ座標系から2Dイメージ座標系への射影変換
イメージスキャナ †
イメージセンサを受光素子の線状に配列したエリアイメージセンサで、
被写体上を走査し受けた光(光子)を電気信号に変換して被写体の画像を生成。
画像形式 †
- アナログ信号(RBG) ---> A/D変換(標本化・量子化)
- 標本化
- 量子化
- レベル2 : 2値画像
- レベル3 : グレースケール
- 256段階 : 8bit量子化 ---> 8bit画像
- モノクロ画像
画像がある1つの色の濃淡を表している場合
- グレースケール画像
画像が明るさの濃淡を表している場合
- RBGフォーマット
- 3版式では3枚のモノクロ画像、単板式ではRAWフォーマット形式
- これらを色変換(デモザイキング)処理する。
- YUVフォーマット
- 色情報
- 輝度信号(Y)
- 輝度信号と青色信号との差(U or Cb)
- 輝度信号と赤色信号との差(V or Cr)
- フォーマット
- YUV444 : 1pixel 24bit(Y=8, U=8, V=8).
- YUV422 : 1pixel 16bit(Y=8, U=4, V=4).
- YUV411 : 1pixel 12bit(Y=8, U=2, V=2).
compへの入力 †
- 静止画
- 画像形式
# | 形式 | 拡張子 |
1 | Windows bitmaps | BMP, DIB |
2 | JPEG files | JPEG, JPG, JPE |
3 | Potable Netwprk Graphics | PNG |
4 | Potable Image Format | PBM, PGM, PPM |
5 | Sun rasters | SR, RAS |
6 | TIFF files | TIFF, TIF |
- 動画
- カメラ
# | カメラ | 説明 |
1 | NTSCカメラ | アナログビデオ信号を出力、Bt8x8のVideo Capture Chipsetが必要 |
2 | USBカメラ | WebカメラなどUVC(USB Video Class)と言う規格でVFW or V4L driverがインストールされ、デバイス認識される。 |
3 | IEEE 1394カメラ | IEEE 1394準拠のVideo Capture Chipsetが必要、一昔主流だった。 |
4 | GigE Visionカメラ | AIAによる規格でLAN+専用ドライバで認識される。 |
- OpenCVでサポートされるAPI
# | OS | API | 説明 |
1 | Windows |
1-1 | | DirectShow? | Windows用のマルチメディア拡張API群、DirectXに含まれる |
1-2 | | Video For Windows(VFW) | Windows3.1でリリースされた動画再生用 |
1-3 | | CMU 1394 Digital Camera Driver | IEEE 1394カメラ制御用 |
1-4 | | Matrox Imaging Library(MIL) | Matrox社の画像処理ライブラリ |
1-5 | | OpenNI Camera Driver | Kinect、Xtion操作用 |
2 | Linux |
2-1 | | libdc1394 | IEEE 1394カメラ制御用 |
2-2 | | GigE Vision Camera Driver | GigE Visionカメラ制御用 |
2-3 | | unicap | 異なる種類のキャプチャデバイスにアクセスするためのライブラリ |
2-4 | | Video For Linux(V4L) | Linux用ビデオキャプチャ・ライブラリ |
2-5 | | OpenNI Camera Driver | Kinect、Xtion操作用 |
3 | OS X |
3-1 | | QuickTime? | OS X用のマルチメディア拡張API群 |
3-2 | | OpenNI Camera Driver | Kinect、Xtion操作用 |
- 読み込み
- APIをサポートしている場合、カメラ番号を指定して読み込む。
- ファイルの場合、パスを指定して読み込む。
- Wi-Fiカメラの場合、URL(HTTPプロトコル)を使用して読み込む。
ロボット・ビジョンのカメラ・センサ †
2Dカメラ †
≒ デジカメ
3Dセンサ †
3Dなのでカメラではなくセンサ
- RDG-D(2D深度画像
・2D画像の各画素に紐付いた奥行き情報を記述
・シンプルでセンサとの相性が良い
・2D CNNのテクニックが使い易い。
・全周形状が扱い難い。
- MultiView?画像
・多点カメラ画像によって3D形状を記述
・2D CNNのテクニックが使い易い。
・全周形状が扱える。
・実環境で計測し難い。
・実スケール性を活用し難い。
- 3D Voxel
・2DのPixelに対し3DのVoxelで3D形状を記述
・シンプルなデータ形式
・3D CNNで処理し易い。
・データ量が多くなるので扱える解像度は低い。
- メッシュ
・頂点、辺、面によって3D形状を記述
・省データで高解像度、レンダリングとの相性が良い。
・頂点、辺、面を上手く扱うのが難しい。辺、面はセンサから得られない。
- 点群
・点群によって3D形状を記述
・シンプルでセンサとの相性が良い。
・接続情報がなく深層学習で処理し難い。
- パッシブステレオ法
・三角測量の原理、見え方の差(視差)から距離を計測する手法
・対象にテクスチャが無い場合、ランダムなパタンを投影するなどが必要。
- アクティブステレオ法
・パッシブステレオ法の片方のカメラを投光機に置き換えたモノ。
・スリット光、近赤外線の歪みやズレから距離を計測する。
・Kinect(1.0)では、赤外線を使用した三角測量の原理で深度値を算出。
- Direct TOF方式
照射したレーザパルスの光が返ってくるまでの時間を計測する方式
- Indirect TOF方式
・照射した周期的レーザ光と反射光の位相差を計測する方式
・遠距離の測定には向かない、外乱光に弱い。低価格。
・Kinect2.0で採用され空間分解能が約2倍になった。
その他カメラ †
- イベントカメラ
- 生物の網膜から発想を得たセンサ
- フレームの各点における輝度を出力するという発想
ではなく、輝度の変化を検知して出力するという発想
画像のデジタル化 †
空間のデジタル化 †
- 元画像を標本化間隔で縦横に分割(width個 * height個 = 解像度)して、
- 画素、ピクセル化する(width個 * height個 の整数の集合になる)。
- x=width, y=height, 画像の左上が(x=0, y=0)になる。
画素値のデジタル化 †
- 各画素の輝度を整数値に変換する処理を量子化という。
- 量子化後の値を画素値(pixel value)という。
- 各画素のbit数をbit深度(bit depth)、色深度(color depth)という。
- bpp(bit per pixel)という単位で表現する。
- 通常8bit(0-255)だが、暗所と発光体が混在する画像取得が困難(高階調→18bit)。
- チャンネル
- グレースケール画像:1チャンネル
- RBGフォーマット:RBGの3チャンネル
カラー画像、グレースケール画像 †
フォーマット †
内容¥形式 | BMP | PNG | JPEG | GIF |
色数 | モノクロ2階調 24bitフルカラー | 24bitフルカラー 48bitカラー | 24bitフルカラー | モノクロ2階調 8bitカラー |
色空間 | RGB | RGB グレースケール | RGB CMYK YCbCr? グレースケール | RGB |
透過 | ✕ | ◯ | ✕ | ◯ |
アニメーション | ✕ | △ | ✕ | ◯ |
画質劣化 | なし | なし | あり | (式数変更が無いなら)なし |
データサイズ | 非常に大きい | 中 | 非常に小さい | 非常に小さい |
可逆的な形式(loss less)と、非可逆な形式(lossy)がある。
BMPファイル・フォーマット †
- Windowsの標準
- 拡張子は*.bmp
- 各画素の色・濃度を量子化した値のリスト
- 圧縮が無いためファイルサイズが大きくなる。
- 圧縮する場合は、RLE(ランレングス)を使用する。
PICTファイル・フォーマット †
- Macintoshの標準
- 拡張子は*.pct
- ベクトル画像とビットマップ画像を保持
TIFFファイル・フォーマット †
- TIFF : Tagged Image File Format
- 多くのOSでサポートされている。
- 拡張子は*.tif
- 高密度のビットマップ画像を保存
- 圧縮は可逆的で他の形式に変換可能
PNGファイル・フォーマット †
- PNG : Portable Network Graphics
- GIFの特許問題で、代替として開発、広まった。
- 拡張子は*.tif
- 透過属性を表現できる。
- 圧縮は可逆的で他の形式に変換可能
JPEGファイル・フォーマット †
- JPEG : Joint Photographic Experts Group
- デジカメの多くは、JPEGを標準形式とする。
- 拡張子は*.jpg
- 圧縮は非可逆的なので
- 繰り返し編集すると劣化する。
- 色数の少ない画像はレm化が大きい。
- シャープネスの強い画像はファイルサイズが大きくなる傾向がある。
※ シャープネス : 写真の輪郭や境界線を検出して強調する機能
GIFファイル・フォーマット †
- GIF : Graphics Interchange Format
- Internetの帯域負荷を軽減する画像形式
- 拡張子は*.tif
- bit深度は8bitで256色までに制限される。
- 透明を表現可(半透明は表現不可)。
- アニメーションを表現できる。
- LZW圧縮アルゴリズムが採用されている。
bit深度 †
1 bit 画像 †
白と黒の2階調画像
8 bit 画像 †
- 8 bitの256階調画像
- 通常はグレースケール画像
インデックス・カラー画像 †
- 8 bitの256階調画像
- GIFなどで使用されている。
- 24bit色から8bit色(256色)を
選択したカラーマップを使用する。
16 bit (ハイ)カラー画像 †
R(5bit), G(5bit), B(6bit) の16bit
24 bit カラー画像 †
R(8bit), G(8bit), B(8bit) の24bit = 16,777,216色
色空間 †
RGB色空間 †
- 赤(red), 緑(green), 青(blue)の3色の組み合わせで色彩を表現する方法
- 混ぜると白色になるので加法混色(additive mixture)と呼ばれる。
- 印刷物はcyan, magenta, yellowの減法混色(subtractive mixture)。
- 立方体モデル。
YUV(YCbCr?)色空間 †
- 輝度信号 : Y
- 色差信号
色差とはRBG色からYの輝度成分を引いた信号
- 特徴
- 人の視覚特性を利用している。
- YUV : アナログビデオ用
- YCbCr? : デジタルビデオ用
HSV色空間 †
- 色相(hue), 彩度(saturation), 明度(value)の組み合わせで色彩を表現する方法
- 明るさの変動を受け難く、特定の色、色合いを返るなどの画像処理が容易になる。
- また、特定の色領域を画像中から抽出する処理に利用される。
- 六角錐モデル。
色空間の変換 †
略
画像処理 †
RBGからグレースケール変換 †
- RGB → YUV変換する。
- Y(輝度信号)を用いる。
トーンカーブ †
- 補正前・後の対応関係を表した校正曲線。
- 階調変換関数(プログラム)では、ルックアップテーブルを用いる。
- y=f(x)
- x=補正前のデータ値(入力データ)
- y=補正後のデータ値(出力データ)
/
/
/
/
/
折れ線トーンカーブ †
コントラスト調整
- 明るい部分は、さらに明るく、
- 暗い部分は、さらに暗く。
─
/
/
/
/
─
ガンマ変換 †
コントラスト調整により、自然な輝度、色彩に調整される。
┌ x ┐1/γ
f(x) = 255 * │── │
└ 255 ┘
ネガポジ反転 †
濃淡値が反転する。
f(x) = 255-x
ソラリゼーション †
ネガ画像、ポジ画像混在のような画像が生成される。
ポスタリゼーション †
出力画素値が数段回に制限される。
┌─
┌┘
┌┘
┌┘
─┘
疑似カラー処理 †
グレースケールに色付けする。
幾何変換 †
拡大・縮小、回転、並進などの処理を行う。
線形変換 †
- x' = ax + by
- y' = cx + dy
┌x'┐ ┌a b┐┌x┐
└y'┘ = └c d┘└y┘
x' = A x
拡大・縮小 †
- 拡大
┌2.0 0.0┐
A = └0.0 2.0┘
- 縮小
┌0.5 0.0┐
A = └0.0 0.5┘
- x軸のみ縮小, y軸は据置
┌0.5 0.0┐
A = └0.0 1.0┘
回転 †
原点を中心に、時計回りに、θだけ回転する。
┌x'┐ ┌cosθ -sinθ┐┌x┐
└y'┘ = └sinθ cosθ┘└y┘
鏡映変換 †
せん断変形 †
正方形・長方形を平行四辺形に歪ませる。
再標本化と補間 †
整数値となる画素の中心があるのもとし、
線形変換の変換先に画素値を与える方法。
画素の中心が、変換元から、どの変換先の画素に移動するか?
を確認し、変換先の画素値を決定する。
再標本化 †
変換先の画素に、変換元の画素の中心が無い場合、
変換先を逆変換し、変換先から、どの変換元の画素に移動するか?
を確認し、変換先の画素値を決定する。
補間 †
- 再標本化で座標が正の整数にならない場合、
周辺の画素値を使用して保管を行う。
- 変換元の位置 : (x, y)
- 変換先の画素値 : I(x, y)
- 最近傍法
- 最も近い画素の中心 (x, y) を、四捨五入により求める。
- 最も近い画素の画素値 I(x, y) を、そのまま変換先の画素値として使用する。
- 計算が単純で高速だが、拡大率を高くするとジャギーが発生する。
- 双一次補間法
ジャギーは発生しないが、エッジがぼやける。
- 周囲の
- 4座標 ( (1, 1), (1, 2), (2, 1), (2, 2) ) の
- 画素値 ( f11, f12, f21, f22 ) を
用いた重み付き平均を線形補間により計算する。
┌f11 f21┐┌dx1┐
I(x, y) = (dy1, dy2)└f12 f22┘└dx2┘
- 双三次補間法
双一次補間法の強化版だが計算量が増える。
- 周囲の
- 16座標 ( (1, 1), - (4, 4) )の
- 画素値 ( f11, ..., f44 )を
用いた重み付き平均を線形補間により計算する。
┌f11 f21 f32 f41┐┌wx1┐
│f12 f22 f32 f42││wx2│
│f13 f23 f33 f43││wx3│
I(x, y) = (wy1, wy2, wy3, wy4 )└f14 f24 f34 f44┘└wx4┘
- dx, dy
x座標, y座標の距離
- dx1 : 1との差
- dx2 : 2との差
- dx3 : 3との差
- dx4 : 4との差
- dy1 : 1との差
- dy2 : 2との差
- dy3 : 3との差
- dy4 : 4との差
アフィン変換と透視変換 †
同次座標の導入 †
並行移動や透視変換などは2*2行列では表現できないので、
同次座標 ( homogeneous coordinates ) を導入する。
┌x'┐
u=│y'│
└1 ┘
┌x'┐ ┌1 0 tx┐┌x┐
│y'│=│0 1 ty││y│
└1 ┘ └0 0 1 ┘└1┘
u' = A u
同次座標を用いた一般的な線形変換
┌x'┐ ┌a b 0┐┌x┐
│y'│=│c d 0││y│
└1 ┘ └0 0 1┘└1┘
u' = L u
アフィン変換 †
アフィン変換とは、線形変換 + 平行移動変換
u' = TL u = Au
┌x'┐ ┌1 0 tx┐┌a b 0┐┌x┐ ┌a b tx┐┌x┐
│y'│=│0 1 ty││c d 0││y│=│c d ty││y│
└1 ┘ └0 0 1 ┘└0 0 1┘└1┘ └0 0 1 ┘└1┘
で、一般的なアフィン変換の変換行列は、以下のようになる。
┌a b tx┐
A = │c d ty│
└0 0 1 ┘
透視変換 †
透視変換は、三次元空間に配置された二次元画像を様々な視点から見るような変換。
その他 †
やりきれないので、一覧だけ。
濃淡変換 †
カラー → グレーなど
- 濃度ヒストグラムを用いた変換
入力画像のヒストグラムを弄って出力画像にする。
- ネガポジ変換(明度の反転
- 疑似濃淡変換(ディザリング
二値画像処理 †
カラー・グレー → 白黒
フィルタ処理 †
ノイズ除去やエッジ検出など
複数画像利用 †
- 画像間演算
- 加算処理・減算処理などの算術演算
- 論理和(OR)・論理積(AND)などの論理演算
- アルファブレンディング(半透明な画像を重ねる技法
ライブラリ †
オープンソース †
- BSDライセンス
- コンピュータビジョン向けライブラリ
LTI-Lib †
LGPLライセンス
VXL †
- BSDライセンス
- コンピュータビジョン向けライブラリ
ImageMagick? †
- GPL互換でより制限が緩い独自ライセンス
- 画像を操作したり表示したりするためのソフトウェアスイート
- ImageMagick? は
- コマンドラインから利用する方法
- 他のプログラムから呼び出して使う方法
がある。
その他 †
- HEIF
- tifig
HEIF を 参照したり、jpgに変換するツール
- libheif
HEIF を JPEG や PNG に変換するツール
プロダクト †
PPI(Integrated Performance Primitives) †
Intel社、商用。
- Intelプロセッサ上でのさらなる自動最適化を行う。
- OpenCV 3.0にて、Intel IPPのサブセットがIPPCVとして寄贈
HALCON †
MVTec社、商用、産業用
PatMax? †
Cognex社、商用、産業用
MIL(Matrox Imaging Library) †
Matrox社、商用、産業用
メディアドライブ †
アプリケーション †
オープンソース †
GIMP †
- GPLライセンス
- ビットマップ画像編集・加工ソフトウェア(ペイントソフト)。
プロダクト †
CamDictionary? †
カメラで撮影した文字をリアルタイム認識・翻訳する。
Zaim †
レシートを撮影すると店舗、品目、価格を自動認識する。
Corel Paint it! Now †
写真を風景画に変換する。
ゾンビブース2 †
撮影した顔をゾンビ風に変換する。