パターン検出とマッチングのお勉強(10)
参考:Archives
やりたいこと
パターン検出とマッチングについて学ぶ
教科書
テンプレートマッチング
テンプレートマッチング:予め標準パターンをテンプレートとして用意しておき、このテンプレートを用いて入力画像とのマッチングを行う
位置を検出することもでき、探索範囲に対して類似度を調べ、その中から最も類似する位置を検出する
類似度
類似度を調べるには以下の2つがよく利用される
また、以下が使われることもある。
サブピクセル位置推定
サブピクセル位置推定:対応点の座標の小数値を推定する技術(サブピクセル推定)
参考: 機械の目が見たセカイ -コンピュータビジョンがつくるミライ(9) カメラを用いた3次元計測(3) - サブピクセル推定 | マイナビニュース
高速探索法
探索範囲すべての位置での類似度の計算(全探索)は計算時間が多くかかることがある。
以下に効率化手法を示す。
残差逐次検定法
残差があるしきい値を超えたら、検出位置ではないとし、次の位置での計算にうつる方法
しきい値は自動的に決める方法があり、最初はしきい値を決めず計算し、それを最初のしきい値とし、次々計算していく中でそのしきい値を超えない場合、その値をしきい値に変更する。
こうすることで、常に真の最小値に到達することが保証されている。
疎密探索法
画像情報を何段階化の解像度で表現し、解像度の疎密性を利用することで、類似度や相違度の最大値位置や最小値位置を効率的に探索することができる。
イメージピラミッドを作り、低解像度から探索を行い、探索された位置に対して高解像度画像に上げていき探索を行う。こうすることで高速に探索できる。
参考:画像認識 第4章-物体追跡:Object Tracking- - とある学生のお勉強日記
参照画素の選択による高速化
同時生起行列の確率を計算し、確率が低い(独自性が高い)画素を類似度計算に用いる参照画素とする。
こうすることで、もし選択された画素が1%であれば、100倍高速化される。
エッジ情報を用いたチャンファーマッチング
テンプレートマッチングの一種であり、入力画像とテンプレート画像間のエッジ相違度に基づいて探索を行う手法
参考: Archives
ヒスログラム情報を用いたアクティブ探索
カラーヒストグラム
カラー空間を量子化した際の各色番号に対する類度を表したもの
類似度の算出は以下の2つがある。
ヒストグラムインタセクション
バタチャリヤ係数
参考:
www.slideshare.net
アクティブ探索
テンプレートと入力画像上のある領域のカラーヒストグラムの類似度が低ければ、周辺の重なりを持つ領域の類似度も低いという考え方を利用して、周辺領域の類似度計算を省く
コーナー検出全体まとめ
参考: qiita.com
ハリスのコーナー検出
参考:
FASTによるコーナー検出
決定木をトラバーサル(横切る)するだけでコーナーを検出できる
参考:
DoG画像を用いた特徴点とスケールの検出
画像間の拡大縮小に関係なく、対応点を決めることができる
参考:
Cannyのエッジ検出アルゴリズム
アルゴリズム:Canny法によるエッジ検出 — OpenCV-Python Tutorials 1 documentation
参考:
SIFT
スケールと回転に不変な特徴記述
参考:
SIFT (Scale-Invariant Feature Transform, スケール不変の特徴変換)の紹介 — OpenCV-Python Tutorials
https://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O
2値特徴量
BRIEF: BRIEF (Binary Robust Independent Elementary Features, 二値頑健独立基本特徴) — OpenCV-Python Tutorials
ORB: ORB (Oriented FAST and Rotated BRIEF, 方向付きFASTと回転BRIEF) — OpenCV-Python Tutorials 1 documentation
対応点マッチング
参考: MIRU2013チュートリアル:SIFTとそれ以降のアプローチ
図形要素検出
ハフ変換
参考:
一般化ハフ変換
ランダム化ハフ変換
特徴統合性理論
顕著性マップ
参考: コンピュータビジョンのセカイ - 今そこにあるミライ(44) 自動作成を行うために用いられることの多い3つの重要度マップ手法 | マイナビニュース
所感
ロボットの認識器を作る上でとても大事な章だと思う。なかなか難しいところもある。。。
顕著性マップなど人間の視覚システムに基づいて考えられている理論は面白い。
領域処理のお勉強(9)
参考: Willow Garage ブログの非公式翻訳: OpenCV 2.1をリリース
やりたいこと
領域処理について学ぶ
教科書
目次
- やりたいこと
- 教科書
- 目次
- 領域のテクスチャ
- 隣接画素の統合による領域分割処理
- 画素特徴量のクラスわけによる領域分割処理
- ミーンシフトを用いた画像分割処理
- 対象物と背景の間のエッジを利用した領域分割処理
- グラフカットを用いた領域分割
- 領域分割の利用例
- 所感
領域のテクスチャ
テクスチャ:繰り返しの輝度パターンを指す
テクスチャの繰り返しパターンを数値化する方法を以下に示す
周波数特徴量
2次フーリエ変換を用いるとテクスチャの特徴を波という観点から見ることができる。
領域分割し、その領域のパワースペクトルを測ることでテクスチャを数値化できる。
ガボールフィルタ
参考:
www.slideshare.netガボールフィルタ:正弦波・余弦波にガウス関数で窓をかけた関数になっており、パラメータを操作して、様々な方向と強度をもつフィルタを多数準備して、特徴抽出を行う。
このフィルタ群をフィルタバンクとよび、抽出された特徴量の群はtextonとする。
同時生起行列を用いた統計的特徴量
参考: グレー レベルの同時生起行列の作成 - MATLAB & Simulink - MathWorks 日本
同時生起行列:離れた2つの場所にある画素対の値から画素値の一様性、方向性、コントラストなどの性質を表す特徴量を求めるもの
同時生起行列を用いて計算するおもな特徴量は次の7種類がある
隣接画素の統合による領域分割処理
参考: 領域拡張法のテスト: メモブログ
領域統合法:類似した特徴量を持ち空間的に隣接した画素の集合に画像を分割する手法
画素特徴量のクラスわけによる領域分割処理
参考: 画像処理論
画素をその特徴量に基づいて特徴空間に基づいて特徴空間に写像し、その特徴空間でクラス分けし、各クラスに属する画像群を領域として画像を分割する方法
ミーンシフトを用いた画像分割処理
ミーンシフト法 → 画像領域の分割や対象画像の追跡に用いられる
基本原理
ある任意の点から半径hの超球を考え、その範囲にある点群の平均を計算し、その位置に観測点を移動する。同様の操作を繰り返すと、観測点は最大勾配の方向に移動し、やがて極大点に収束する
確率密度関数の推定
参考:
www.slideshare.net確率密度関数の勾配
勾配法:確率密度関数のある点から勾配の大きい方に移動して極大点を探索する方法
参考:
www.slideshare.net勾配法を用いた極大探索
このミーンシフト法では確率密度関数が大小が自動的に計算されオーバーシュートや振動がないことで知られている
参考:
クラスタリングへの応用
各点にミーンシフト法を実行し、収束位置がしきい値以下なら同じクラスタに入れる。
特徴としては全ての点でこの処理が必要だが並列化でき、クラス数をあらかじめ設定する必要がない。
参考:
www.slideshare.net対象物と背景の間のエッジを利用した領域分割処理
スネーク:エッジを閉曲線として抽出する
スネークでは複数の対象物や鋭い屈曲がある閉領域を正しく抽出できないという欠点がある。
参考: 動的輪郭モデル
輪郭抽出
グラフカットを用いた領域分割
グラフカット:全画面を対象と背景の2種類にラベル付するときに最小となるコスト関数を与え、コスト最小となるラベルの組み合わせを効率良く求める方法
参考:
コスト関数の意味:グラフィカルモデル入門
GrabCut
領域分割の利用例
合成画像を作るときによく用いられる。つなぎ目の不自然さをなくすために以下のような方法がある。
マッティング:部分画像の境界の画素値を同じ位置に重なる背景画像の画素値の平均値で置き換える処理
アルファブレンディング: 画像のアルファブレンドを行うときに陥りがちな罠 - どらの日記
参考: 合成のなじみを良くする「エッジブレンディング」のテクニック - コンポジゴク
所感
背景除去や特徴量を用いたセグメンテーションの方法などどれも興味深い。
これらと深層学習の両知識を増やしてコスパの良いロボットの認識器をどんどん考えていきたい。
Xamarinで遊んでみる
やりたいこと
レシピ
教科書
インストール
Mac OS Update
Xcode Update
Visual Studio for mac Install
実機の準備(例:iOS11.03のiPhone6s)
Xcodeの設定
Visual Studioでiphoneでの実機ビルドを行う為に、Xcodeでダミープロジェクトをつくってバンドル識別子を取得する必要がある
アカウントの登録
プロジェクトの作成(ここでバンドル識別子が取得できる)
Single View Application
参考:
Visual Studioのプロジェクトの作成(設定)・ビルド
新しいプロジェクトを作る
Single View Application
作成したプロジェクトのInfo.plistのバンドル識別子を上記の物に変更する
上方タブのDebug -> iPhoneに設定し、横の▷(実行ボタン)をクリック
iPhone上で設定→一般→プロファイル→信頼をクリック
上記手順で実行できる
Xamarinの初期コード構成
Main.cs
- アプリケーションのエントリーポイント
Info.plist
- アプリケーション名やバージョンなどを設定できるファイル
Main.storyboard
- 画面を定義する為のストーリーボードファイル
ViewController.cs
- ストーリーボードの画面に対してロジックを奇術するためのクラス
いくつかコードをトライ
ボタンなど基本の操作のサンプル
磁気センサ
GPS
加速度センサ
加速度センサを使う
ViewControllerを以下を参考に書きかえ
上記コードの解説
画面サイズ基準でラベルサイズを指定
// Viewのサイズを取得 layoutW = View.Bounds.Width; layoutH = View.Bounds.Height; // Viewサイズを元にLabelサイズを指定 textW = layoutW / 2; textH = layoutH / 6;
デバッグ出力
System.Diagnostics.Debug.WriteLine("Width: {0}, Height: {1}", layoutW, layoutH);
ラベルの作成
// Label作成&配置 var sensorText = new UILabel(new CGRect(layoutW / 2 - textW / 2, layoutH / 2 - textH / 2, textW, textH)); sensorText.BackgroundColor = UIColor.FromRGB(192, 192, 192); sensorText.Lines = 0; sensorText.TextAlignment = UITextAlignment.Center; sensorText.LineBreakMode = UILineBreakMode.TailTruncation; View.AddSubview(sensorText);
加速度の表示&反映
Frameとは:[iPhone] UIView の frame と bounds の違い | Sun Limited Mt.
var textLoc = sensorText.Frame; motionManager = new CMMotionManager(); if (motionManager.AccelerometerAvailable) { // Accelerometer Update間隔 motionManager.AccelerometerUpdateInterval = 0.015; // UpdateがQueueに入る度に処理を行う(多分) motionManager.StartAccelerometerUpdates(NSOperationQueue.CurrentQueue, (data, error) => { sensorText.Text = string.Format("X = {0:N4}\nY = {1:N4}", data.Acceleration.X, data.Acceleration.Y); // 現在の位置を取得 nowX = sensorText.Frame.X; nowY = sensorText.Frame.Y; System.Diagnostics.Debug.WriteLine("nowX: {0}, nowY: {1}", nowX, nowY); // Viewをはみ出さないようにAccelerometerの値によってLabelを移動 if (nowX + (nfloat)data.Acceleration.X * 10 > 0 && nowX + (nfloat)data.Acceleration.X * 10 < layoutW - textW) textLoc.X = nowX + (nfloat)data.Acceleration.X * 10; if (nowY - (nfloat)data.Acceleration.Y * 10 > 0 && nowY - (nfloat)data.Acceleration.Y * 10 < layoutH - textH) textLoc.Y = nowY - (nfloat)data.Acceleration.Y * 10; sensorText.Frame = textLoc; }); }
動作画面
この画面の中央に加速度が表示される
Bluetoothを使う
ハマり個所
所感
これからロボットの操作用IFにスマホを使っていきたい♪
3Dセグメンテーションのお勉強
やりたいこと
3Dセグメンテーションについて学ぶ
教科書
GitHub - timzhang642/3D-Machine-Learning: A resource repository for 3D machine learning
RANSAC
自然界のデータにはたくさんノイズがある ノイズがあると、法則性をうまく見つけられないことがある そんなノイズをうまく無視するのがRANSAC
参考:
Robust linear model estimation using RANSAC — scikit-learn 0.19.1 documentation
study-ransac/ransac.ipynb at master · smurakami/study-ransac · GitHub
Point Net
www.slideshare.net
SEGCloud
論文:https://arxiv.org/pdf/1710.07563.pdf
6-DoF Object Pose from Semantic Keypoints
6-DoF Object Pose from Semantic Keypoints
Git:object3d/code at master · geopavlakos/object3d · GitHub
Good!!!
3D Bounding Box Estimation Using Deep Learning and Geometry
論文: https://arxiv.org/pdf/1612.00496.pdf
Sliding Shapes for 3D Object Detection in Depth Images
Sliding Shapes for 3D Object Detection in Depth Images
Object Detection in 3D Scenes Using CNNs in Multi-view Images
論文:https://stanford.edu/class/ee367/Winter2016/Qi_Report.pdf
Deep Sliding Shapes for Amodal 3D Object Detection in RGB-D Images
Good!!!
DeepContext: Context-Encoding Neural Pathways for 3D Holistic Scene Understanding
Voxel Net
論文: https://arxiv.org/pdf/1711.06396.pdf
Git: GitHub - jeasinema/VoxelNet-tensorflow: A 3D object detection system for autonomous driving.
PointNets
論文: https://arxiv.org/pdf/1711.08488.pdf
Git: GitHub - charlesq34/frustum-pointnets: Frustum PointNets for 3D Object Detection from RGB-D Data
Good!!!
(おまけ)三次元のデータ形式
PCD
PLY
参考
2値化画像処理のお勉強(8)
やりたいこと
2値画像処理について学ぶ
教科書
二値化
参考:画像処理(二値化)
2値化
2値化は文字をファックスで送る場合やOCRによって文字認識を行う場合などに必要となる処理である。
以下に2値化の方法を示す。
p-タイル法
画像中の文字の占める領域の画素数が文字の大きさと撮影条件からあらかじめ予測できる場合に、予測された画素数に応じてしきい値を決める手法。未知画像には適さない。
モード法
山と山の間の谷の底をしきい値とする。谷の底を自動かつ安定に検出するためにノイズ除去が必要。
参考:画像処理(二値化)
判別分析法
分離度が大きくなるようにしきい値を決める。
分離度:クラス間分散とクラス内分散の比で定義される
参考: C++でOpenCVを使って判別分析法(大津の2値化)を自作してみる | ITハット
連結性
参考:
輪郭追跡
参考: 2値画像の基本処理と計測 - メディア情報処理 - アットウィキ
輪郭追跡手順
ラスタスキャンで画素が変化する場所を探索
右回りに黒を探索
見つかった黒画素に移動。追跡済みの場合は終了でそうでない場合は一つ前に戻る。
輪郭追跡の応用
チェインコード
文字認識
参考: 文字認識 | 文字認識の技術水準について | メディアドライブ
収縮・膨張処理
収縮:背景、穴に接する対象の画素を一回りはぎ取る処理。連結性を保持しない処理。
膨張:背景、穴に接する対象の画素に画素を一回り加える処理。連結成分同士が繋がる時があり、こちらも連結性を保持しない処理。
クロージング:同じ回数だけ膨張して収縮する処理。画像の小さな穴を除くことができる。
→
オープニング:同じ回数だけ収縮して膨張する処理。画像の小さな連結成分を除くことができる。
→
参考:膨張・収縮・オープニング・クロージング 画像処理ソリューション
収縮・膨張処理の応用例
画像信号を背景とパターン部分に2値化したのち、膨張・収縮処理を繰り返し行い、ノイズを除去したうえで比較し、欠陥を検出する方式などがある。
ラスタスキャンによるラベリング
二値化画像処理された画像において、白の部分(または黒の部分)が連続した画素に同じ番号を割り振る処理を ラベリングと言います。
通常、同じ番号ごとの面積(画素数)や幅、高さなどの特徴量を求めて欠陥検査や分類処理などに用いられます。
ラベリングには、二値化された画像の縦、横方向に連続している部分を同じラベルにする4連結と、 縦、横、斜め方向に連続している部分を同じラベルにする8連結との2種類の処理があります。
2値化画像
4連結を用いたラベリング
8連結を用いたラベリング
輪郭追跡による距離変換画像
2値画像における対象物の各々に対し、その画像から最も近い背景画素に至る距離を求めてその画素の濃度値とする変換を距離変換という。この変換により得られる画像を距離変換画像という。
[f:id:robonchu:2018050122
形状特徴パラメータ
2値化画像中の連結成分は形状の特徴量によって分類できる。その特徴を数値化したものを形状特徴パラメータと呼ぶ。
重心
外接長方形
面積
周囲超
オイラー数
モーメント特徴
参考:Re - ImageJで学ぶ!: 第24回 2値画像の形状解析で学ぶ!
距離
市街地距離(4近傍距離)
チェス盤距離(8近傍距離)
参考: クラスター分析の手法①(概要) | データ分析基礎知識
ベクトル化処理
細線化処理:連結成分の連結性を保存したまま画素を削る処理を繰り返す
細線化された2値画像の画素は特徴点である端点、分岐点、通過点の3種類に分類される。
参考: パターン認識の前処理に必要な二値画像の細線化:CodeZine(コードジン)
細線化手法
ラスタスキャンを行い、注目画像を中心に3x3の画素値のパターンを観測し、注目画素が以下3つの条件を満たすとき、白画素にする
境界上にある黒画素であること
白画素に変更しても連結性が保存されること
端点でないこと
画素値の更新方法として以下の2つがある
逐次法:更新した画像をそのまま使い,次処理に移る
並列法:消去可能かどうかを検証する検証用画像と,画素値の更新を行う更新用画像を別々に持ち,更新用画像に結果を反映していきます.そして,全画素の処理が終了したら,更新用画像を,次処理の検証用画像とする
細線の特徴点抽出
細線化処理によって、端点、分岐点、孤立点、通過点の特徴点に分類する。特徴点と特徴点に区切られた画素列をセグメントという。
2分割法
セグメントを線分近似しCADシステムで扱える線分の始終点の座標列に変換することをベクトル化と呼ぶ。
線分近似でよく用いられる再帰的な分割法である2分割法の手順を以下に示す。
画素列の始点終点を繋いだ直線に対して、各画素からの距離を計算する
最大距離があるしきい値以下の場合、その直線を線分として採用。そうでない場合、その画素で画素列を分割し分割された画素列で前の手順から再帰的に繰り返す。
画素列の分割がなくなれば終了。
参考: 【C++】細線化した画像のセグメント分割 - Qiita
角点検出
画素を結ぶ線分のなす角度が小さい時に角点とし、画素列を分割する。この方法を用いると角点を線分の始終点にできるが、なめらかに曲がっている曲線に対して精度よく線分近似できない。
そのため、角点を検出して分割点とした後、分割点を2分割法で線分近似する方法が用いられる。
ベクトル化の応用例
人手で作った地図データから、自動で画像データをベクトル化し、家屋を検出するなど手間を省略するシステムなどがある。
所感
2値化画像の処理ひとつとっても奥が深い。。。
幾何学的変換のお勉強(8)
参考:Okutomi lab
やりたいこと
画像の位置や形を変化させる画像の幾何学的変換について学ぶ
教科書
線形変換
[ [x`] , [y`] ] = [ [a, b] , [c, d] ] * [ [x] , [y] ]
で表すことができる変換を線形変換という
拡大・縮小
[ [x`] , [y`] ] = [ [s_x, 0] , [0, s_y] ] * [ [x] , [y] ]
回転
参考: オープンメディアラボ(宮崎慎也・山田雅之・遠藤守・中貴俊 研究室)
[ [x`] , [y`] ] = [ [cosθ, -sinθ] , [sinθ, cosθ ] * [ [x] , [y] ]
鏡映
X軸
[ [x`] , [y`] ] = [ [1, 0] , [0, -1 ] * [ [x] , [y] ]
Y軸
[ [x`] , [y`] ] = [ [-1, 0] , [0, 1 ] * [ [x] , [y] ]
X=Y
[ [x`] , [y`] ] = [ [0, 1] , [1, 0 ] * [ [x] , [y] ]
スキュー
X軸方向へスキュー
[ [x`] , [y`] ] = [ [1, b] , [0, 1 ] * [ [x] , [y] ] b = tanθ
Y軸方向へスキュー
[ [x`] , [y`] ] = [ [1, 0] , [c, 1 ] * [ [x] , [y] ] c = tanθ
合成変換
ここの変換行列の積により、合成変換を表す行列を計算できる
合成変換ではここの変換の順番を変えると結果が異なる点に注意!
同次座標とアフィン変換・射影変換
同次座標
同次座標:2次元平面上の点をu=[ [x], [y], [m] ]の形で表現する形式を同次座標表現と呼ぶ.実際の座標値は,[x/m y/m]の値を持つ.
参考:第10回目
アフィン変換
任意の線形変換と平行移動を組み合わせた変換をアフィン変換と呼ぶ
平行移動
[ [x`] , [y`] , [1] ] = [ [1, 0 , t_x ] , [0, 1 , t_y ] , [0, 0, 1] ]* [ [x] , [y] , [1] ]
線形変換
[ [x`] , [y`] , [1] ] = [ [a, b , 0 ] , [c, d , 0 ] , [0, 0, 1] ]* [ [x] , [y] , [1] ]
アフィン変換
[ [x`] , [y`] , [1] ] = [ [a, b , t_x ] , [c, d , t_y ] , [0, 0, 1] ]* [ [x] , [y] , [1] ]
ユークリッド変換
[ [x`] , [y`] , [1] ] = [ [cosθ, -sinθ , t_x ] , [sinθ, cosθ , t_y ] , [0, 0, 1] ]* [ [x] , [y] , [1] ]
相似変換
[ [x`] , [y`] , [1] ] = [ [s * cosθ, - s * sinθ , t_x ] , [s * sinθ, s * cosθ , t_y ] , [0, 0, 1] ]* [ [x] , [y] , [1] ]
射影変換
参考: 5.3@ËeÏ·
任意の四角形を別の任意の四角形に移すような変換
[ [x`] , [y`] , [1] ] = [ [h11, h12 , h13 ] , [h21, h22 , h23 ] , [h31, h32 , h33 ] ]* [ [x] , [y] , [1] ]
すべての変換を包含するようなもの↓
参考: 幾何学変換の関係 - ぱたヘネ
画像の再標本化
変換後の画像を再び縦横等間隔に標本化された位置の集まりとして表現すること
この際、下記に述べる補間を出力画像中のすべての画素位置に対して行う
参考: ブラウザによって画質が変わる!?ブラウザ別画像処理法 | WEB制作ブログ
ニアレストネイバー
求めたい位置に最も近い画素位置の値をそのまま利用する
高速だが、なめらかなエッジがギザギザになって現れるジャギーが多い
参考: 画素の補間(Nearest neighbor,Bilinear,Bicubic) 画像処理ソリューション
バイリニア補間
周りの4点の画素値の重み付きの平均値を求めることになるため、平滑化の効果が生じる。ジャギーが目立たなくなるが、エッジがなまる傾向にある。
参考: 画素の補間(Nearest neighbor,Bilinear,Bicubic) 画像処理ソリューション
バイキュービック補間
周りの16点の画素値を用いて補間する。バイリニア補間に比べてシャープで自然な画像になる。
参考: 画素の補間(Nearest neighbor,Bilinear,Bicubic) 画像処理ソリューション
イメージモザイキングとその概略処理手順
複数の画像をつなぎ合わせるような処理のことをイメージモザイキングという。以下に手順を示す。
特徴点の検出とマッチング
マッチング:画像間での対応を求める
このマッチング手法としてSIFTなどがある。
参考:
幾何学的変換の推定
イメージモザイキングでは射影変換がよく用いられる。
最低、対応する4組の点の特徴点を用いることで解が導出できる。
特徴点にはアウトライヤ(誤った対応点)があるため、それを含んだ状態でもパラメータを推定する必要がある。
その方法として、RANSACがよく利用される。以下にRANSACでの射影変換のパラメータ推定手順を示す。
必要最低限のデータ(4組)をランダムに選択する
選択した4点からパラメータを計算
パラメータを用いて他の点が正しく変換できているかチェックする。ここで正しい物をインライアというインライアの数を数えて記憶。
上記を繰り返し、インライアの最も多い射影変換のパラメータをインライアの結果として出力する。
参考: 【お勉強してみた】RANSACのおはなし - Qiita
画像の幾何学的変換と合成
画像をつなぐときに明るさの違い等によりつなぎ目が目立つことがある。
目立たなくする方法として、画像の重なった部分でアルファブレンディングの考え方を利用した画素の重み付き平均する方法等がある。
参考: OpenCVで遊ぼう!: OpenCVで自動的にパノラマ写真を作る(OpenCV Panography)
平面・円筒面・球面パノラマ
撮影対象が平面、もしくは、カメラが光学中心を回転中心として回転し撮影した画像であれば原理的に射影変換により、2つの画像をつなぎ合わせることができる。
平面パノラマでは原理的に画角が180度以上のパノラマ画像を生成することはできない。
それに対し、合成画像の投影面を円筒面や球面にすることで、より広い範囲のパノラマ画像を生成することができる。
参考: EOS MとPhotoShopでパノラマ合成(Photomarge) | GANREF
平面パノラマにおいて、空間上の直線はパノラマ画像上でも直線になるが、円筒面・球面パノラマにおいては直線性が保たれないことに注意!
所感
最近はやりの360度カメラの仕組み等がわかって楽しい♪
画像の復元と生成(6)
参考:1307(月)ピンボケ写真修正。アンシャープマスク他 - 四級猫 . .
やりたいこと
画像復元の原理について学ぶ
教科書
ぼけ・ぶれ画像の復元
画像の劣化モデル
点拡がり関数:点広がり関数と線広がり関数とは? | ギモンらど!!
参考: クラスター変分法と確率的情報処理 --Belief Propagation と画像処理アルゴリズム-- - ppt download
焦点ボケによる劣化に対する点拡がり関数のモデル化
カメラの焦点ぼけによる劣化は原画像では点であったものが広がりをもつようになる劣化である。また、広がりは方向によらず一定。
- ローパスフィルタと同じガウス分布により表現できる
参考: Pythonで画像処理(ローパスフィルタと畳み込み) - cBlog
カメラのぶれによる劣化に対する点拡がりモデル関数のモデル化
カメラの動きが等速直線運動で近似できる場合の点拡がり関数はカメラのブレ方向θにのみ、幅Wに一次元に広がっている関数で近似できる。
点拡がり関数のモデルのパラメータ推定
劣化画像の2次フーリエ変換が周波数領域で周期的に0になる性質を利用してモデルパラメータを推定することができる
逆フィルタ・ウィーナフィルタによる画像復元
逆フィルタが発散し、劣化画像に含まれるノイズ成分が増幅され、復元画像に大きなノイズが生じることがある。
周波数領域におけるノイズを考慮したものとして、ウィーナフィルタがある。
参考: 1.5. Scipy: 高水準の科学技術計算 — Scipy lecture notes
さまざまな画像復元・生成
ノイズ除去
以下の2つの仮定を行うとノイズは独立同一分布に従う。また、モデルとして独立同一なガウス分布がよく用いられる。
ノイズの確率密度分布が画像全体で変化しない
ノイズは画素ごとに独立である
また、単純な線形フィルタではノイズ除去の際にエッジがなまることが多く、エッジを保存するような非線形フィルタが用いられることが多い。
画像の性質を拘束に利用する拘束付き最小2乗法によりノイズ除去を行う方法がある。以下にキーワードを記載する。
事後確率最大化法(MAP法)
尤度
事前確率
マルコフ確率場
上記の事前確率をモデル化したり、拘束の汎関数設計は困難なことが多いため、パッチベース手法がよく取られる。
パッチベース手法
画像超解像
標本化により劣化した画像から高周波成分を復元する処理を 画像超解像 と呼ぶ。以下の2つがある。
参考: 次世代デジカメ技術なぅ(2):デジカメにリコンフィギュラブルな頭脳を――カシオ「EXILIMエンジンHS」 (3/3) - MONOist(モノイスト)
ハイダイナミックレンジ画像
ダイナミックレンジ:観測可能な最大値と最小値の比
8bit量子化では明暗差がある画像ではダイナミックレンジが不足してしまう
そのため、露出設定の異なるダイナミックレンジの狭い複数の画像を用いてダイナミックレンジの広いハイダイナミックレンジ画像を生成する方法がある。
露出設定を変えて撮影した複数の画像からハイダイナミックレンジ画像を合成して、トーンマッピングすることにより明暗領域を同時に観察できる。
ガイド画像を利用した画像処理
ジョイントバイラテラルフィルタ:複数枚の入力画像を使ってバイラテラルフィルタを計算するフィルタ
ガイデットフィルタ:Bilateral Filterのようなエッジ保存型のフィルターで高速な動作が特徴
ライトフィールド撮影
ライトフィールド:Light Field Imaging by Kawaguchi Tatsuya
参考: プロジェクト | 九州大学 大学院システム情報科学研究院 情報知能工学部門 イメージ・メディア理解研究室
コンピューテーションフォトグラフィ
コンピュテーショナルフォトグラフィでは、光学によって得られた像は中間生成物に位置づけられる。撮影時の光の方向や角度、被写体までの距離など、さまざま情報を記録し、あとからデジタル処理で画像を生成する。これにより、撮影後のピント調整やぶれの除去など、従来のカメラでは不可能だった機能を実現する。
参考: コンピュテーショナルフォトグラフィ:Computational Photography:研究開発:日立
例:符号化露光
参考: 20160612 第34回cv勉強会@関東 コンピュテーショナルフォトグラフィ
所感
機械学習を使わずとも、ピントをあとから変えたり、高解像度化を行えるのは便利