2012-04-25 9 views
2

か、それはBumblebee(または他のPoint Gray Imagingセンサー)に完全に依存していますか? 私は、bumblebee 2ステレオリグに付属のステレオ処理APIをリンクして、一部のオフライン画像を処理しようとしています。 triclopsステレオ関数は、input.calとinput.ppmの形式でコンテキストフラグとキャリブレーションファイルを必要とするように見えます(つまり、2つのステレオ整流画像がぼやけて重なっている1つの画像)。このinput.ppmファイルを他のオフライン画像から取得しても、triclops stereo APIを使用できるようにするにはどうすればよいですか。そして、キャリブレーションファイルinput.calについては、それがオフラインの画像とどのように整合するかを得ることができますか?Triclops Stereo APIを使用してオフラインイメージを処理できますか?

答えて

2

はい、Triclops APIを使用してオフラインイメージを処理できます。あなたが指摘する要件は、カメラと画像ファイルから来る較正ファイル(.cal)です。キャリブレーションファイルは、撮影時間に最適に抽出されますが、設定を変更しない限り、私の経験では常に同じです。 Triclops APIの入力を満たすには、画像変換の方法を提供するPoint Gray Fly Capture APIも使用する必要があります。私のプロジェクトは、あなたが求めていることのすべてを正確に実行しています。フィールド内の生のピクセルインターリーブ画像をキャプチャし、後でFlyCapture APIとTriclops APIを使用して整流した視差画像とステレオペアからの点群を作成します。

キャリブレーションファイルをキャプチャする方法については、Point GrayサンプルとそのAPIドキュメントを参照してください。 flycaptureGetCalibrationFileFromCamera(context, &szCalFile);コンテキストが「カメラコンテキスト」の場合

初期画像ファイルのフォーマットは変換方法を変えますが、ここではC++を使用してrawからstereoへの変換を行っています。私のサイズはRAW画像を1280×960でマルハナバチXB3カラーカメラを使用し、外側の2台のカメラからの画像をつかんだ。これまでのところ、私は全くTriclopsのAPIを使用していませんでした

// Read raw file 
    //pFile = fopen ("FlyCap.raw" , "rb"); 
    pFile = fopen (argv[1] , "rb"); 
    if (pFile==NULL) {fputs ("File error",stderr); exit (1);} 

    // Set raw file size 
    ISize = (numCols*numRows*bytesPerPixel); 

    // allocate memory to contain the whole file: 
    buffer = (unsigned char*) malloc (sizeof(char)*ISize); 
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} 

    // copy the file into the buffer: 
    result = fread (buffer,1,ISize,pFile); 
    if (result != ISize) {fputs ("Reading error",stderr); exit (3);} 

    // Create the FlyCapture Context for processing 
    fe = flycaptureCreateContext(&flycapture); 
    _HANDLE_FLYCAPTURE_ERROR("flycaptureCreateContext()", fe); 

    fe = flycaptureSetColorProcessingMethod(flycapture, FLYCAPTURE_HQLINEAR); 
    _HANDLE_FLYCAPTURE_ERROR("flycaptureSetColorProcessingMethod()", fe); 

    fe = flycaptureSetColorTileFormat(flycapture, FLYCAPTURE_STIPPLEDFORMAT_GBRG); 
    _HANDLE_FLYCAPTURE_ERROR("flycaptureSetColorTileFormat()", fe); 

    //Import the raw image in buffer into FlyCaptureImage structure 
    flycaptureImage.iCols = 1280; 
    flycaptureImage.iRows = 960; 
    flycaptureImage.iNumImages = 2; 
    flycaptureImage.bStippled = true; 
    flycaptureImage.pixelFormat = FLYCAPTURE_RAW16; 
    flycaptureImage.iRowInc = 2560; 
    flycaptureImage.timeStamp.ulSeconds = 100; 
    flycaptureImage.timeStamp.ulMicroSeconds = 100; 
    flycaptureImage.pData = buffer; 

    // Create buffers for holding the color and mono images 
    unsigned char* rowIntColor = 
    new unsigned char[ numCols * numRows * flycaptureImage.iNumImages * 4 ]; 
    unsigned char* rowIntMono = 
    new unsigned char[ numCols * numRows * flycaptureImage.iNumImages ]; 

    // Create a temporary FlyCaptureImage for preparing the stereo image 
    FlyCaptureImage tempColorImage; 
    FlyCaptureImage tempMonoImage; 

    tempColorImage.pData = rowIntColor; 
    tempMonoImage.pData = rowIntMono; 


    // Convert the pixel interleaved raw data to row interleaved format 
    fe = flycapturePrepareStereoImage(flycapture, flycaptureImage, &tempMonoImage, &tempColorImage ); 
    _HANDLE_FLYCAPTURE_ERROR("flycapturePrepareStereoImage()", fe); 

    //Save side-by-side color stereo image 
    fe = flycaptureSaveImage(flycapture, &tempColorImage, stereoimg, FLYCAPTURE_FILEFORMAT_PPM); 
    _HANDLE_FLYCAPTURE_ERROR("flycaptureSaveImage()", fe); 

    printf ("Saving Stereo...\n"); 

注意を。 flycaptureSaveImage();からの出力は、Triclopsメソッドに供給されます。その時点でカラー対モノを扱うオプションがいくつかあります。 TriclopsのAPIである 'stereoto3dpoints.cpp'に付属しているPoint Greyのサンプルを見てください。これがあなたを助けることを願っています。

関連する問題