「.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をプリズムを使って別々のエリアイメージセンサで受け取る。
イメージスキャナ †
イメージセンサを受光素子の線状に配列したエリアイメージセンサで、
被写体上を走査し受けた光(光子)を電気信号に変換して被写体の画像を生成。
RDG-Dカメラ †
- 被写体のカラー情報だけでなく、被写体までの距離情報を画素単位に測定する。
- 得られる距離画像には各画素毎に深度値(Kinectでは11bit)が割り当てられる。
- 被写体までの距離を図る方式には、以下のものがある。
- パターン投影式 : 構造化されたパターンを投射しパターンのズレを計測
Kinectでは、赤外線を使用した三角測量の原理で深度値を算出。
- TOF方式 : レーザーの往復時間を光の位相差を使用して深度値を算出。
画像形式 †
- アナログ信号(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プロトコル)を使用して読み込む。
画像のデジタル化 †
空間のデジタル化 †
- 元画像を標本化間隔で縦横に分割(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 ┘
透視変換 †
透視変換は、三次元空間に配置された二次元画像を様々な視点から見るような変換。
ライブラリ †
オープンソース †
- 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 †
撮影した顔をゾンビ風に変換する。
顔認識 †
まだまだ、精度は低いもよう。
スマホネイティブ組込 †
まだ、笑顔情報程度しか取得できないもよう。
Google Face API †
正確な名称が不明だが、Google Play servicesの、
Face Detection とか、Face API などと呼ばれている。
画像内の顔が笑顔であるかどうかを0から1の数値で取得できるもよう。
APIとしてはこちら。
Swift Core Image(iOS) †
hasSmileプロパティで true or false のデータとして取得するもよう。
APIとしてはこちら。
Windows.Media.FaceAnalysis?(Windows) †
クラウドサービス型 †
AIと連動しており、もう少々、高度なことができるもよう(年齢・性別の推定など)。
Microsoft Cognitive Services - Face API and Emotion API †
- Microsoft Cognitive Services
IBM Bluemix の AlchemyAPI Face Detection †
IBM に統合された AlchemyAPI 社の人工知能 API が IBM Bluemix で公開されている。