ginrou / ginrou-private

for resaerch

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

まだReadmeファイルはかけてません

久しぶりに触ったときに思い出せるように関数とか色々書いとく


ディレクトリについて
bin/ コンパイルしたオブジェクトファイルが入ってる
img/ 実験で使う画像とかを入れておく
lib/ 日浦先生に頂いたソースが入ってる
     主に使ってるのは matrix.hとか
src/ 自分で書いたソースが入ってるのはだいたいここ

各ソースコードについて

////////////////////////////////////////////////
batch
実験のバッチ処理を行うソースが入ってる。ほとんどスクリプト的な使い方
////////////////////////////////////////////////

////////////////////////////////////////////////
blur
画像のぼかす(blur)処理を行う
IMG* blur(IMG *img, IMG* psf); 畳み込み演算でぼけを生成
IMG* blurFilter( IMG *img, IMG *psf); フーリエ変換をつかってぼかす
IMG* blurWithPSFMap( IMG* img, Mat psf[], IMG* psfMap); 各画素ごとにぼけカーネルが違う
////////////////////////////////////////////////

////////////////////////////////////////////////
deblur
日浦先生のFFTライブラリを用いてdeblurを行う
どうもバグがあるっぽい
////////////////////////////////////////////////

////////////////////////////////////////////////
deblur2
オープンソースのFFTライブラリ、FFTWを用いてdeblurを行う

IMG* deblurFFTW( IMG* img, IMG* psf)
 最も基本的な関数で、IMG形式の観測画像とPSFを渡してdelburを行う。
 imgとPSFは決して同じサイズでなくてもよい
////////////////////////////////////////////////

////////////////////////////////////////////////
expsystem
今までの実験とかのシステムを残しておいてまとめたファイル

IMG* currentSystemDispmap
 現在の自分のシステムの奥行き推定システム


IMG* currentSystemDispmap2
 depth推定で、CAPairと同じ手法を採用した

IMG* CodedAperturePairDispmap
 Coded aperture pair for DFD
 paramは奥行きとPSF径に関するパラメータ
 psfSize = param[0] * depth + param[1]になるように


IMG* CodedAperturePairDispmap2
 上の関数を書き直した

IMG* DepthFromDeocus
 ピント位置を変更したDFD
 paramは奥行きとPSF径に関するパラメータ
 psfSize = param[0] * depth + param[1]になるように
////////////////////////////////////////////////


////////////////////////////////////////////////
imageData
画像構造体IMG の定義とそのユーテリティ関数を集めたファイル
typedef struct _IMG{
  int width;
  int height;
  unsigned char *data;
}IMG;

typedef struct _IMG_COL{
  int width;
  int height;
  IMG* channel[3];//img[0] = b, img[1] = g, img[2] = r
}IMG_COL;
////////////////////////////////////////////////


////////////////////////////////////////////////
imageProcessing
簡単だけどよく使うような処理を集めたファイル
resizeImage(const  IMG* src, IMG* dst)
 画像のリサイズ(拡大縮小)

double imageNormL1(const IMG* img)
 L1ノルムの計算

void normalizeMat(Mat src, Mat dst)
 L1ノルムで正規化

void convertScaleImage( const IMG* src,  IMG* dst, double scale, double shift)
 画像の線形変換 dst[i] = scale * img[i] + shift

void putnoise(const IMG* src, IMG* dst, double mean, double var)
 平均mean, 分散varのホワイトノイズを付加

void flipImage( IMG* img, int horizontal, int vertcial);
 画像をひっくり返す

////////////////////////////////////////////////



////////////////////////////////////////////////
include.h
インクルードファイルをまとめて指定するファイル
ほかにも#defineの定義はこの辺にまとめる
////////////////////////////////////////////////


////////////////////////////////////////////////
psf
PSF関連の処理をいろいろと入れておく。k
大本のPSFからリサイズとシフトをしながらパラメータ通りのpsfを作って行くのが主な仕事

void makeShiftPSF(Mat psf[MAX_DISPARITY], int cam);
 視差が0からMAX_DISPARITYまでの間でのshiftを作る

void makeBlurPSF( IMG* psf[MAX_DISPARITY], IMG* aperture, int maxDepth, double param[2]);
 ぼけ径だけを考慮したPSFをつくる

void makeShiftBlurPSF( Mat psf[MAX_DISPARITY], int cam, IMG* aperture, double par[2]);
 shiftとresizeの両方を考慮した場合

void makeShiftBlurPSFFreq( int height, int width, int cam, fftw_complex* dst[MAX_DISPARITY], IMG* aperture, double param[2] );
 周波数領域でのPSFを作って返す
////////////////////////////////////////////////


////////////////////////////////////////////////
stereo
ステレオ法の実装
アルゴリズムとしては、ピラミッド法に近いと思う
原画像の1/4スケールの画像を作り、再帰呼び出しを行う
十分小さくなったらウィンドウマッチングで対応点を探索
得られた結果を元に,一つ小さいサイズでの視差の前後を探索する
IMG* stereoRecursive( IMG_COL* srcLeft, IMG_COL* srcRight, Mat* FundMat, int maxDisparity, int minDisparity);
 この関数がステレオ法実装のメイン

IMG* stereoInitialDisparityMap( IMG_COL* srcLeft, IMG_COL* srcRight,Mat* FundMat,int maxDisparity);
 初期解の生成

IMG* stereoNextDisparityMap( IMG_COL* srcLeft, IMG_COL* srcRight, Mat* FundMat,IMG* prevDispMap,int maxDisparity,int nextHeight,int nextWidth);
 再帰呼び出し
////////////////////////////////////////////////


////////////////////////////////////////////////
util
実験とかをしやすくするためのユーティリティ

void showImage(  const IMG *img, int keyWait);
 画像を表示

void showDispMap( const IMG* img);
 視差マップを表示

void startClock(void);
 計算時間の計測スタート

double getPassedTime(void);
 経過した時間[ミリ秒]を取得

void printPassedTime(void);
 経過した時間を表示

// 手前の一行を消す
#define _ClearLine() { fputs("\r\x1b[2K", stdout); fflush(stdout); }
////////////////////////////////////////////////


About

for resaerch


Languages

Language:C++ 57.9%Language:C 41.0%Language:Perl 0.9%Language:Shell 0.2%