-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_ImageProcessingCV
画像処理とコンピュータビジョンについて纏める。
- 高性能 & 廉価なカメラ、CPUの登場
- アルゴリズムの成熟
- OpenCV等のライブラリ
により、コンピュータビジョン(CV)開発を、
より生産的に行うことができるようになってきた。
与えられた画像に対して何らかの処理を行い出力する。
- コンピュータビジョン(computer vision :CV)
- 撮影対象を認識・判別して、対象の状態をデータで出力する。
- 顔検出
- 顔認証
- 検査装置
- 監視装置
- 安全装置
- ロボティクス
-
ピンホールではなくレンズを使う(=カメラ)、ピントがずれる事がある。
-
CCDやCMOSのイメージセンサを受光素子の平面上に配列した
エリアイメージセンサでレンズで集光した光(光子)を受けて、
電気信号に変換して被写体の画像を生成する。- 単板式 : RGBのカラーフィルタを、R=1/4, G=1/2, B=1/4の市松模様に配置。
- 3板式 : RGBをプリズムを使って別々のエリアイメージセンサで受け取る。
移行メモ(正誤): 元ページの単板式の比率「R=4/N, G=2/N, B=4/N」は
ベイヤー配列(R:G:B = 1:2:1)の記述が崩れたものと判断し
「R=1/4, G=1/2, B=1/4」とした。また「3版式」は「3板式」の
誤変換と判断し修正した(以降も同様)。
-
ピンホールカメラモデル
-
撮像物との距離は焦点距離に対して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).
- 色情報
- 静止画
- 画像形式
| # | 形式 | 拡張子 |
|---|---|---|
| 1 | Windows bitmaps | BMP, DIB |
| 2 | JPEG files | JPEG, JPG, JPE |
| 3 | Portable Network Graphics | PNG |
| 4 | Portable Image Format | PBM, PGM, PPM |
| 5 | Sun rasters | SR, RAS |
| 6 | TIFF files | TIFF, TIF |
移行メモ(正誤): 元表の「Potable Netwprk Graphics」「Potable Image Format」は
「Portable Network Graphics」「Portable Image Format」の誤記と判断し修正した。
-
読み込み
ファイルパスを指定して読み込む。 -
動画
- カメラ
| # | カメラ | 説明 |
|---|---|---|
| 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操作用 |
移行メモ: 元表は OS 行を横セル結合(
|>|)で見出しとしていたため、
OS 列に展開し、結合セルは 〃 / - に置き換えた。
- 読み込み
- APIをサポートしている場合、カメラ番号を指定して読み込む。
- ファイルの場合、パスを指定して読み込む。
- Wi-Fiカメラの場合、URL(HTTPプロトコル)を使用して読み込む。
≒ デジカメ
3Dなのでカメラではなくセンサ
-
データ
アプリケーション毎に使い分ける。-
2D
-
RDG-D(2D深度画像)
・2D画像の各画素に紐付いた奥行き情報を記述
・シンプルでセンサとの相性が良い
・2D CNNのテクニックが使い易い。
・全周形状が扱い難い。 -
MultiView画像
・多点カメラ画像によって3D形状を記述
・2D CNNのテクニックが使い易い。
・全周形状が扱える。
・実環境で計測し難い。
・実スケール性を活用し難い。
-
-
直接3Dを記述
-
3D Voxel
・2DのPixelに対し3DのVoxelで3D形状を記述
・シンプルなデータ形式
・3D CNNで処理し易い。
・データ量が多くなるので扱える解像度は低い。 -
メッシュ
・頂点、辺、面によって3D形状を記述
・省データで高解像度、レンダリングとの相性が良い。
・頂点、辺、面を上手く扱うのが難しい。辺、面はセンサから得られない。 -
点群
・点群によって3D形状を記述
・シンプルでセンサとの相性が良い。
・接続情報がなく深層学習で処理し難い。
-
-
-
種類
-
ステレオ法
2Dカメラを組み合わせる手法-
パッシブステレオ法
・三角測量の原理、見え方の差(視差)から距離を計測する手法
・対象にテクスチャが無い場合、ランダムなパタンを投影するなどが必要。 -
アクティブステレオ法
・パッシブステレオ法の片方のカメラを投光機に置き換えたモノ。
・スリット光、近赤外線の歪みやズレから距離を計測する。
・Kinect(1.0)では、赤外線を使用した三角測量の原理で深度値を算出。
-
-
ToF方式
光の到達時間を利用した手法-
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)がある。
移行メモ(正誤): 元表の GIF の画質劣化「(式数変更が無いなら)なし」は
「(色数変更が無いなら)なし」の誤変換と判断し修正した。
-
Windowsの標準
-
拡張子は*.bmp
-
各画素の色・濃度を量子化した値のリスト
-
圧縮が無いためファイルサイズが大きくなる。
-
圧縮する場合は、RLE(ランレングス)を使用する。
- Macintoshの標準
- 拡張子は*.pct
- ベクトル画像とビットマップ画像を保持
-
TIFF : Tagged Image File Format
-
多くのOSでサポートされている。
-
拡張子は*.tif
-
高密度のビットマップ画像を保存
-
圧縮は可逆的で他の形式に変換可能
-
PNG : Portable Network Graphics
-
GIFの特許問題で、代替として開発、広まった。
-
拡張子は*.png
-
透過属性を表現できる。
-
圧縮は可逆的で他の形式に変換可能
-
JPEG : Joint Photographic Experts Group
-
デジカメの多くは、JPEGを標準形式とする。
-
拡張子は*.jpg
-
圧縮は非可逆的なので
- 繰り返し編集すると劣化する。
- 色数の少ない画像は劣化が大きい。
- シャープネスの強い画像はファイルサイズが大きくなる傾向がある。
※ シャープネス : 写真の輪郭や境界線を検出して強調する機能
-
GIF : Graphics Interchange Format
-
Internetの帯域負荷を軽減する画像形式
-
拡張子は*.gif
-
bit深度は8bitで256色までに制限される。
-
透明を表現可(半透明は表現不可)。
-
アニメーションを表現できる。
-
LZW圧縮アルゴリズムが採用されている。
移行メモ(正誤): 元ページで PNG / GIF の拡張子が双方「.tif」と
なっていたため、それぞれ「.png」「*.gif」に修正した。
また JPEG の「レm化が大きい」は「劣化が大きい」の誤記と判断し修正した。
白と黒の2階調画像
- 8 bitの256階調画像
- 通常はグレースケール画像
-
8 bitの256階調画像
-
GIFなどで使用されている。
-
24bit色から8bit色(256色)を
選択したカラーマップを使用する。
R(5bit), G(5bit), B(6bit) の16bit
R(8bit), G(8bit), B(8bit) の24bit = 16,777,216色
- 赤(red), 緑(green), 青(blue)の3色の組み合わせで色彩を表現する方法
- 混ぜると白色になるので加法混色(additive mixture)と呼ばれる。
- 印刷物はcyan, magenta, yellowの減法混色(subtractive mixture)。
- 立方体モデル。
-
輝度信号 : Y
-
色差信号
色差とはRBG色からYの輝度成分を引いた信号- U(Cb)
- V(Cr)
-
特徴
- 人の視覚特性を利用している。
- YUV : アナログビデオ用
- YCbCr : デジタルビデオ用
- 色相(hue), 彩度(saturation), 明度(value)の組み合わせで色彩を表現する方法
- 明るさの変動を受け難く、特定の色、色合いを変えるなどの画像処理が容易になる。
- また、特定の色領域を画像中から抽出する処理に利用される。
- 六角錐モデル。
移行メモ(正誤): 元ページの「色合いを返る」は「色合いを変える」の
誤変換と判断し修正した。
略
- RGB → YUV変換する。
- Y(輝度信号)を用いる。
-
補正前・後の対応関係を表した校正曲線。
-
階調変換関数(プログラム)では、ルックアップテーブルを用いる。
-
y=f(x)
- x=補正前のデータ値(入力データ)
- y=補正後のデータ値(出力データ)
/
/
/
/
/
コントラスト調整
- 明るい部分は、さらに明るく、
- 暗い部分は、さらに暗く。
─
/
/
/
/
─
コントラスト調整により、自然な輝度、色彩に調整される。
┌ x ┐1/γ
f(x) = 255 * │── │
└ 255 ┘
濃淡値が反転する。
f(x) = 255-x
ネガ画像、ポジ画像混在のような画像が生成される。
出力画素値が数段階に制限される。
┌─
┌┘
┌┘
┌┘
─┘
グレースケールに色付けする。
- R
──
/
/
/
/
──
- G
─
/ \
/ \
/ \
/ \
/ \
- B
──
\
\
\
\
──
拡大・縮小、回転、並進などの処理を行う。
- 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┘
- y軸に対する鏡映変換
┌x'┐ ┌ -1 0 ┐┌x┐
└y'┘ = └ 0 1 ┘└y┘
- x軸に対する鏡映変換
┌x'┐ ┌ 1 0 ┐┌x┐
└y'┘ = └ 0 -1 ┘└y┘
- 以下の軸に対する鏡映変換
- 軸
┌x'┐ ┌ conθ ┐
└y'┘ = t└ sinθ ┘
- 鏡映変換
┌x'┐ ┌cos2θ sin2θ┐┌x┐
└y'┘ = └sin2θ -cos2θ┘└y┘
正方形・長方形を平行四辺形に歪ませる。
- x軸に対するせん断変形
┌x'┐ ┌ 1 tanθ ┐┌x┐
└y'┘ = └ 0 1 ┘└y┘
- y軸に対するせん断変形
┌x'┐ ┌ 1 0 ┐┌x┐
└y'┘ = └ tanφ 1 ┘└y┘
移行メモ(正誤): 元ページのせん断変形の 2 項目が
いずれも「鏡映変換」と書かれていたが、節の内容から「せん断変形」とした。
整数値となる画素の中心があるものとし、
線形変換の変換先に画素値を与える方法。
画素の中心が、変換元から、どの変換先の画素に移動するか?
を確認し、変換先の画素値を決定する。
変換先の画素に、変換元の画素の中心が無い場合、
変換先を逆変換し、変換先から、どの変換元の画素に移動するか?
を確認し、変換先の画素値を決定する。
-
再標本化で座標が正の整数にならない場合、
周辺の画素値を使用して補間を行う。- 変換元の位置 : (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┘
-
fは画素値
-
dx
x座標の距離- dx1 : 1との差
- dx2 : 2との差
-
dy
y座標の距離- dy1 : 1との差
- dy2 : 2との差
-
双三次補間法
双一次補間法の強化版だが計算量が増える。- 周囲の
- 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┘
-
fは画素値
-
dx, dy
x座標, y座標の距離- dx1 : 1との差
- dx2 : 2との差
- dx3 : 3との差
- dx4 : 4との差
- dy1 : 1との差
- dy2 : 2との差
- dy3 : 3との差
- dy4 : 4との差
-
wx, wy
重み。以下のように計算する。- wxn=h(dxn)
- wyn=h(dyn)
-
関数h
- sinc関数を3次多項式で近似
┌ 3 2
│ |t| - 2|t| + 1 ( |t| ≦ 1 )
│ 3 2
h(t)=│-|t| + 5|t| - 8|t| + 4 ( 1 < |t| ≦ 2 )
│
└ 0 ( 2 < |t| )
並行移動や透視変換などは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ライセンス
-
コンピュータビジョン向けライブラリ
-
参考
- OpenCV - Wikipedia
https://ja.wikipedia.org/wiki/OpenCV
- OpenCV - Wikipedia
LGPLライセンス
-
BSDライセンス
-
コンピュータビジョン向けライブラリ
-
参考
- VXL - Wikipedia
https://en.wikipedia.org/wiki/VXL
- VXL - Wikipedia
-
GPL互換でより制限が緩い独自ライセンス
-
画像を操作したり表示したりするためのソフトウェアスイート
-
ImageMagick は
- コマンドラインから利用する方法
- 他のプログラムから呼び出して使う方法
がある。
- 参考
- ImageMagick - Wikipedia
https://ja.wikipedia.org/wiki/ImageMagick - 「さようなら ImageMagick」の考察
https://qiita.com/yoya/items/2076c1f5137d4041e3aa
- ImageMagick - Wikipedia
- HEIF
- tifig
HEIF を 参照したり、jpgに変換するツール - libheif
HEIF を JPEG や PNG に変換するツール
- tifig
Intel社、商用。
- Intelプロセッサ上でのさらなる自動最適化を行う。
- OpenCV 3.0にて、Intel IPPのサブセットがIPPCVとして寄贈
移行メモ(正誤): 元ページの見出し「PPI(Integrated Performance Primitives)」は
本文の「Intel IPP」と整合しないため「IPP」とした。
MVTec社、商用、産業用
Cognex社、商用、産業用
Matrox社、商用、産業用
- メディアドライブ > ライブラリ SDK
-
画像分類・画像検索
https://mediadrive.jp/products/library/image-classification/index.html- 静止画像の自動画像分類、検索ライブラリ。
- 大規模な画像セットを、任意の数に自動分類
- 画像をクエリーとして、データベース中から類似した画像を検索
-
画像認識 物体検出 類似画像検索
https://mediadrive.jp/products/library/image-recognition/index.html- 画像認識、物体検出、類似画像検索機能を搭載した高精度画像認識システム。
- カメラ撮影された物体が何の物体かを認識する「画像認識」
- 1枚の画像中からクエリー画像と同じ物体を検出する「物体検出」
- 複数の画像から類似した画像を検索する「類似画像検索」
-
CrossMediator Basic v.3.0
https://mediadrive.jp/products/library/crossmediatorbasic/index.html- ビデオデータから発言/セリフの検索(音声検索)
- 曲名は判らないけど曲を見つけたい(ハミング検索)
- ビデオデータから好きなCMの検索(動画検索)
- ビデオクリップで本編の頭出し(動画検索)
-
-
GPLライセンス
-
ビットマップ画像編集・加工ソフトウェア(ペイントソフト)。
-
参考
- GIMP - Wikipedia
https://ja.wikipedia.org/wiki/GIMP - GIMPを使ってコマンドラインから画像を変換する。 - ぱたヘネ
http://d.hatena.ne.jp/natsutan/20110611/1307766376 - GIMPで絵を描く方法
- GIMP - Wikipedia
カメラで撮影した文字をリアルタイム認識・翻訳する。
- 幾何学変換処理
- 二値化処理
レシートを撮影すると店舗、品目、価格を自動認識する。
- 幾何学変換処理
- 二値化処理
写真を風景画に変換する。
- 平滑化処理
- エッジ検出処理
撮影した顔をゾンビ風に変換する。
- 色空間変換処理
- 画像間演算処理
Tags: 移行, 画像処理, コンピュータビジョン, OpenCV, 要素技術, 開発基盤
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。