Skip to content

DNET_ImageProcessingCV

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

画像処理とコンピュータビジョン

概要

画像処理とコンピュータビジョンについて纏める。

  • 高性能 & 廉価なカメラ、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).

compへの入力

  • 静止画
    • 画像形式
# 形式 拡張子
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プロトコル)を使用して読み込む。

ロボット・ビジョンのカメラ・センサ

2Dカメラ

≒ デジカメ

3Dセンサ

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 の画質劣化「(式数変更が無いなら)なし」は
「(色数変更が無いなら)なし」の誤変換と判断し修正した。

BMPファイル・フォーマット

  • Windowsの標準

  • 拡張子は*.bmp

  • 各画素の色・濃度を量子化した値のリスト

  • 圧縮が無いためファイルサイズが大きくなる。

  • 圧縮する場合は、RLE(ランレングス)を使用する。

PICTファイル・フォーマット

  • Macintoshの標準
  • 拡張子は*.pct
  • ベクトル画像とビットマップ画像を保持

TIFFファイル・フォーマット

  • TIFF : Tagged Image File Format

  • 多くのOSでサポートされている。

  • 拡張子は*.tif

  • 高密度のビットマップ画像を保存

  • 圧縮は可逆的で他の形式に変換可能

PNGファイル・フォーマット

  • PNG : Portable Network Graphics

  • GIFの特許問題で、代替として開発、広まった。

  • 拡張子は*.png

  • 透過属性を表現できる。

  • 圧縮は可逆的で他の形式に変換可能

JPEGファイル・フォーマット

  • JPEG : Joint Photographic Experts Group

  • デジカメの多くは、JPEGを標準形式とする。

  • 拡張子は*.jpg

  • 圧縮は非可逆的なので

    • 繰り返し編集すると劣化する。
    • 色数の少ない画像は劣化が大きい。
    • シャープネスの強い画像はファイルサイズが大きくなる傾向がある。
      ※ シャープネス : 写真の輪郭や境界線を検出して強調する機能

GIFファイル・フォーマット

  • GIF : Graphics Interchange Format

  • Internetの帯域負荷を軽減する画像形式

  • 拡張子は*.gif

  • bit深度は8bitで256色までに制限される。

  • 透明を表現可(半透明は表現不可)。

  • アニメーションを表現できる。

  • LZW圧縮アルゴリズムが採用されている。

移行メモ(正誤): 元ページで PNG / GIF の拡張子が双方「.tif」と
なっていたため、それぞれ「
.png」「*.gif」に修正した。
また JPEG の「レm化が大きい」は「劣化が大きい」の誤記と判断し修正した。

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の輝度成分を引いた信号

    • U(Cb)
    • V(Cr)
  • 特徴

    • 人の視覚特性を利用している。
    • 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

ソラリゼーション

ネガ画像、ポジ画像混在のような画像が生成される。

ポスタリゼーション

出力画素値が数段階に制限される。

         ┌─
       ┌┘
     ┌┘
   ┌┘
 ─┘

疑似カラー処理

グレースケールに色付けする。

  • 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)などの論理演算
    • アルファブレンディング(半透明な画像を重ねる技法)
  • マスク合成

  • 背景差分

  • フレーム間差分

ライブラリ

オープンソース

OpenCV

OpenCV

LTI-Lib

LGPLライセンス

VXL

ImageMagick

  • GPL互換でより制限が緩い独自ライセンス

  • 画像を操作したり表示したりするためのソフトウェアスイート

  • ImageMagick は

    • コマンドラインから利用する方法
    • 他のプログラムから呼び出して使う方法

がある。

その他

  • HEIF
    • tifig
      HEIF を 参照したり、jpgに変換するツール
    • libheif
      HEIF を JPEG や PNG に変換するツール

プロダクト

IPP(Integrated Performance Primitives)

Intel社、商用。

  • Intelプロセッサ上でのさらなる自動最適化を行う。
  • OpenCV 3.0にて、Intel IPPのサブセットがIPPCVとして寄贈

移行メモ(正誤): 元ページの見出し「PPI(Integrated Performance Primitives)」は
本文の「Intel IPP」と整合しないため「IPP」とした。

HALCON

MVTec社、商用、産業用

PatMax

Cognex社、商用、産業用

MIL(Matrox Imaging Library)

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の検索(動画検索)
      • ビデオクリップで本編の頭出し(動画検索)

アプリケーション

オープンソース(アプリケーション)

GIMP

プロダクト(アプリケーション)

CamDictionary

カメラで撮影した文字をリアルタイム認識・翻訳する。

  • 幾何学変換処理
  • 二値化処理

Zaim

レシートを撮影すると店舗、品目、価格を自動認識する。

  • 幾何学変換処理
  • 二値化処理

Corel Paint it! Now

写真を風景画に変換する。

  • 平滑化処理
  • エッジ検出処理

ゾンビブース2

撮影した顔をゾンビ風に変換する。

  • 色空間変換処理
  • 画像間演算処理

Tags: 移行, 画像処理, コンピュータビジョン, OpenCV, 要素技術, 開発基盤

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally