Subversion Repositories seema-scanner

Rev

Rev 244 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 244 Rev 245
Line 194... Line 194...
194
        return;
194
        return;
195
 
195
 
196
    if(angle != -1.0)
196
    if(angle != -1.0)
197
        rotateTo(angle);
197
        rotateTo(angle);
198
 
198
 
199
    projector->displayWhite();
199
    //projector->displayWhite();
200
 
200
 
201
    // just for safe measures
201
    // just for safe measures
202
    QTest::qSleep(500);
202
    QTest::qSleep(500);
203
 
203
 
204
    CameraFrame frame;
204
    CameraFrame frame;
Line 251... Line 251...
251
        acquireCalibrationSet(angles[i]);
251
        acquireCalibrationSet(angles[i]);
252
}
252
}
253
 
253
 
254
void SMCaptureWorker::acquireFrameSequenceLDR(SMFrameSequence &frameSequence){
254
void SMCaptureWorker::acquireFrameSequenceLDR(SMFrameSequence &frameSequence){
255
 
255
 
-
 
256
 
-
 
257
 
256
    CameraFrame frame;
258
    CameraFrame frame;
257
 
259
 
258
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
260
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
259
 
261
 
260
        // display pattern
262
        // display pattern
Line 311... Line 313...
311
        return;
313
        return;
312
    }
314
    }
313
 
315
 
314
    int nShutters = shutters.size();
316
    int nShutters = shutters.size();
315
 
317
 
316
    std::vector<SMFrameSequence> frameSequences(nShutters);
-
 
317
 
-
 
318
    CameraSettings cameraSettings;
318
    CameraSettings cameraSettings;
319
 
319
 
320
    for(int i=0; i<nShutters; i++){
320
    for(int i=0; i<nShutters; i++){
321
 
321
 
322
        // Set camera shutter
322
        // Set camera shutter
Line 327... Line 327...
327
 
327
 
328
        camera0->setCameraSettings(cameraSettings);
328
        camera0->setCameraSettings(cameraSettings);
329
        camera1->setCameraSettings(cameraSettings);
329
        camera1->setCameraSettings(cameraSettings);
330
 
330
 
331
        // Project/acquire sequence
331
        // Project/acquire sequence
332
        acquireFrameSequenceLDR(frameSequences[i]);
332
        SMFrameSequence frameSequenceLDR;
333
 
-
 
334
    }
-
 
335
 
-
 
336
    unsigned int nFrames = frameSequences[0].frames0.size();
-
 
337
    int nRows = frameSequences[0].frames0[0].rows;
-
 
338
    int nCols = frameSequences[0].frames0[0].cols;
333
        acquireFrameSequenceLDR(frameSequenceLDR);
339
 
-
 
340
    // Debayer images, since cvtColor cannot debayer floating point images
-
 
341
    for(int j=0; j<nShutters; j++){
-
 
342
        for(unsigned int i=0; i<nFrames; i++){
-
 
343
            cv::cvtColor(frameSequences[j].frames0[i], frameSequences[j].frames0[i], CV_BayerBG2GRAY);
-
 
344
            cv::cvtColor(frameSequences[j].frames1[i], frameSequences[j].frames1[i], CV_BayerBG2GRAY);
-
 
345
        }
-
 
346
    }
-
 
347
 
334
 
348
    // Merge into HDR
-
 
349
    frameSequence.frames0.resize(nFrames);
-
 
350
    frameSequence.frames1.resize(nFrames);
-
 
351
 
-
 
352
    float shutterMean = 0.0;
-
 
353
    for(unsigned int i=0; i<shutters.size(); i++)
-
 
354
        shutterMean += shutters[i]/shutters.size();
-
 
355
 
-
 
356
    for(unsigned int i=0; i<nFrames; i++){
-
 
357
        frameSequence.frames0[i].create(nRows, nCols, CV_32F);
335
        frameSequence.frames0.insert(frameSequence.frames0.end(), frameSequenceLDR.frames0.begin(), frameSequenceLDR.frames0.end());
358
        frameSequence.frames1[i].create(nRows, nCols, CV_32F);
336
        frameSequence.frames1.insert(frameSequence.frames1.end(), frameSequenceLDR.frames1.begin(), frameSequenceLDR.frames1.end());
359
 
337
 
360
    }
338
    }
361
 
339
 
362
    frameSequence.frames0[0].setTo(0.0);
-
 
363
    frameSequence.frames1[0].setTo(0.0);
340
    frameSequence.shutters = shutters;
364
 
-
 
365
    #pragma omp parallel for
-
 
366
    for(int j=nShutters-1; j>=0; j--){
-
 
367
 
-
 
368
        cv::Mat mask0 = (frameSequences[j].frames0[0] < 250) & (frameSequence.frames0[0] == 0);
-
 
369
        cv::Mat mask1 = (frameSequences[j].frames1[0] < 250) & (frameSequence.frames1[0] == 0);
-
 
370
 
-
 
371
        for(unsigned int i=0; i<nFrames; i++){
-
 
372
            cv::add((shutterMean/shutters[j]) * frameSequences[j].frames0[i], frameSequence.frames0[i], frameSequence.frames0[i], mask0);
-
 
373
            cv::add((shutterMean/shutters[j]) * frameSequences[j].frames1[i], frameSequence.frames1[i], frameSequence.frames1[i], mask1);
-
 
374
 
-
 
375
        }
-
 
376
    }
-
 
377
 
341
 
378
    // Set camera shutter back to default
342
    // Set camera shutter back to default
379
    cameraSettings.shutter = settings.value("shutter", 66.666).toFloat();
343
    cameraSettings.shutter = settings.value("shutter", 66.666).toFloat();
380
 
344
 
381
    camera0->setCameraSettings(cameraSettings);
345
    camera0->setCameraSettings(cameraSettings);
382
    camera1->setCameraSettings(cameraSettings);
346
    camera1->setCameraSettings(cameraSettings);
383
 
347
 
384
    // TODO: we need to somehow make the debayer function cvtColor accept floating point images...
-
 
385
}
348
}
386
 
349
 
387
 
350
 
388
void SMCaptureWorker::acquireFrameSequence(float angle){
351
void SMCaptureWorker::acquireFrameSequence(float angle){
389
 
352