ginrou/ginrou-private
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
まだ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); }
////////////////////////////////////////////////