エピポーラ幾何、ステレオマッチングの実装

こちらのページの関数をすべてラップしました。まだリリースはしてません。
http://opencv.jp/opencv-1.1.0/document/opencvref_cv_epipolar.html


cvFindStereoCorrespondenceBMとcvFindStereoCorrespondenceGCを試しに動かしてみました。先ほどのOpenCVリファレンスマニュアルのページと、こちらのサイトを参考にさせて頂きました。
http://rest-term.com/archives/1072/


コードはこちら。

// 入力画像の読み込み
using (IplImage imgLeft = new IplImage("tsukuba_left.png", LoadMode.GrayScale))
using (IplImage imgRight = new IplImage("tsukuba_right.png", LoadMode.GrayScale))
{
    // 視差画像, 出力画像の領域を確保
    using (IplImage dispBM = new IplImage(imgLeft.Size, BitDepth.S16, 1))
    using (IplImage dispLeft = new IplImage(imgLeft.Size, BitDepth.S16, 1))
    using (IplImage dispRight = new IplImage(imgLeft.Size, BitDepth.S16, 1))
    using (IplImage dstBM = new IplImage(imgLeft.Size, BitDepth.U8, 1))
    using (IplImage dstGC = new IplImage(imgLeft.Size, BitDepth.U8, 1))
    {
        // 距離計測とスケーリング  
        using (CvStereoBMState stateBM = new CvStereoBMState(StereoBMPreset.Basic, 16))
        using (CvStereoGCState stateGC = new CvStereoGCState(16, 2))
        {
            Cv.FindStereoCorrespondenceBM(imgLeft, imgRight, dispBM, stateBM);  
            Cv.FindStereoCorrespondenceGC(imgLeft, imgRight, dispLeft, dispRight, stateGC, false);  
                          
            Cv.ConvertScale(dispBM, dstBM, 1);
            Cv.ConvertScale(dispLeft, dstGC, -16);

            using (CvWindow windowBM = new CvWindow("Stereo Correspondence BM", dstBM))
            using (CvWindow windowGC = new CvWindow("Stereo Correspondence GC", dstGC))
            {
                Cv.WaitKey();
            }
        }
    }
}

実践OpenCV 2.4―映像処理&解析

実践OpenCV 2.4―映像処理&解析