Subversion Repositories seema-scanner

Rev

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

Rev 226 Rev 242
Line 38... Line 38...
38
    CameraSettings cameraSettings;
38
    CameraSettings cameraSettings;
39
    cameraSettings.shutter = settings.value("camera/shutter", 16.666).toFloat();
39
    cameraSettings.shutter = settings.value("camera/shutter", 16.666).toFloat();
40
    cameraSettings.gain = 0.0;
40
    cameraSettings.gain = 0.0;
41
 
41
 
42
    camera0->setCameraSettings(cameraSettings);
42
    camera0->setCameraSettings(cameraSettings);
43
 
-
 
44
    camera1->setCameraSettings(cameraSettings);
43
    camera1->setCameraSettings(cameraSettings);
45
 
44
 
46
    // Start capturing
45
    // Start capturing
47
    camera0->startCapture();
46
    camera0->startCapture();
48
    camera1->startCapture();
47
    camera1->startCapture();
Line 250... Line 249...
250
 
249
 
251
    for(unsigned int i=0; i<angles.size(); i++)
250
    for(unsigned int i=0; i<angles.size(); i++)
252
        acquireCalibrationSet(angles[i]);
251
        acquireCalibrationSet(angles[i]);
253
}
252
}
254
 
253
 
255
void SMCaptureWorker::acquireFrameSequence(float angle){
254
void SMCaptureWorker::acquireFrameSequenceLDR(SMFrameSequence &frameSequence){
256
 
-
 
257
    if(!setupSuccessful)
-
 
258
        return;
-
 
259
 
-
 
260
    if(angle != -1.0)
-
 
261
        rotateTo(angle);
-
 
262
 
255
 
263
    CameraFrame frame;
256
    CameraFrame frame;
264
    SMFrameSequence frameSequence;
-
 
265
 
257
 
266
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
258
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
267
 
259
 
268
        // display pattern
260
        // display pattern
269
        projector->displayPattern(i);
261
        projector->displayPattern(i);
Line 301... Line 293...
301
        frameSequence.frames0.push_back(frameCVStacked0);
293
        frameSequence.frames0.push_back(frameCVStacked0);
302
        frameSequence.frames1.push_back(frameCVStacked1);
294
        frameSequence.frames1.push_back(frameCVStacked1);
303
 
295
 
304
    }
296
    }
305
 
297
 
-
 
298
 
-
 
299
}
-
 
300
 
-
 
301
void SMCaptureWorker::acquireFrameSequenceHDR(SMFrameSequence &frameSequence){
-
 
302
 
-
 
303
    QSettings settings;
-
 
304
    QString shuttersString = settings.value("camera/shuttersHDR").toString();
-
 
305
    QStringList list = shuttersString.split("/");
-
 
306
    std::vector<float> shutters(list.size());
-
 
307
    for(int i=0; i<list.size(); i++)
-
 
308
        shutters[i] = list[i].toFloat();
-
 
309
    if(shutters.empty()){
-
 
310
        std::cerr << "Could not read HDR shutter times" << std::endl;
-
 
311
        return;
-
 
312
    }
-
 
313
 
-
 
314
    int nShutters = shutters.size();
-
 
315
 
-
 
316
    std::vector<SMFrameSequence> frameSequences(nShutters);
-
 
317
 
-
 
318
    CameraSettings cameraSettings;
-
 
319
 
-
 
320
    for(int i=0; i<nShutters; i++){
-
 
321
 
-
 
322
        // Set camera shutter
-
 
323
        cameraSettings.shutter = shutters[i];
-
 
324
 
-
 
325
        // assert that shutter is given in ms
-
 
326
        assert(cameraSettings.shutter < 2000.0);
-
 
327
 
-
 
328
        camera0->setCameraSettings(cameraSettings);
-
 
329
        camera1->setCameraSettings(cameraSettings);
-
 
330
 
-
 
331
        // Project/acquire sequence
-
 
332
        acquireFrameSequenceLDR(frameSequences[i]);
-
 
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;
-
 
339
 
-
 
340
    // Merge into HDR
-
 
341
    frameSequence.frames0.resize(nFrames);
-
 
342
    frameSequence.frames1.resize(nFrames);
-
 
343
 
-
 
344
    float shutterMean = 0.0;
-
 
345
    for(unsigned int i=0; i<shutters.size(); i++)
-
 
346
        shutterMean += shutters[i]/shutters.size();
-
 
347
 
-
 
348
    for(unsigned int i=0; i<nFrames; i++){
-
 
349
        frameSequence.frames0[i].create(nRows, nCols, CV_32F);
-
 
350
        frameSequence.frames1[i].create(nRows, nCols, CV_32F);
-
 
351
 
-
 
352
    }
-
 
353
 
-
 
354
    #pragma omp parallel for
-
 
355
    for(int r=0; r<nRows; r++){
-
 
356
        for(int c=0; c<nCols; c++){
-
 
357
 
-
 
358
            for(int j=nShutters-1; j>=0; j--){
-
 
359
 
-
 
360
                uchar s0 = frameSequences[j].frames0[0].at<uchar>(r,c);
-
 
361
 
-
 
362
                if(s0 < 250){
-
 
363
                    for(unsigned int i=0; i<nFrames; i++)
-
 
364
                        frameSequence.frames0[i].at<float>(r,c) = (shutterMean/shutters[j]) * frameSequences[j].frames0[i].at<uchar>(r,c);
-
 
365
 
-
 
366
                    break;
-
 
367
                }
-
 
368
            }
-
 
369
 
-
 
370
            for(int j=nShutters-1; j>=0; j--){
-
 
371
 
-
 
372
                uchar s1 = frameSequences[j].frames1[0].at<uchar>(r,c);
-
 
373
 
-
 
374
                if(s1 < 250){
-
 
375
                    for(unsigned int i=0; i<nFrames; i++)
-
 
376
                        frameSequence.frames1[i].at<float>(r,c) = (shutterMean/shutters[j]) * frameSequences[j].frames1[i].at<uchar>(r,c);
-
 
377
 
-
 
378
                    break;
-
 
379
                }
-
 
380
            }
-
 
381
        }
-
 
382
        //cvtools::writeMat(frame0i, QString("frame0_%1.mat").arg(i).toLatin1(),  QString("frame0_%1").arg(i).toLatin1());
-
 
383
    }
-
 
384
 
-
 
385
    // Set camera shutter back to default
-
 
386
    cameraSettings.shutter = settings.value("shutter", 66.666).toFloat();
-
 
387
 
-
 
388
    camera0->setCameraSettings(cameraSettings);
-
 
389
    camera1->setCameraSettings(cameraSettings);
-
 
390
 
-
 
391
    // TODO: we need to somehow make the debayer function cvtColor accept floating point images...
-
 
392
}
-
 
393
 
-
 
394
 
-
 
395
void SMCaptureWorker::acquireFrameSequence(float angle){
-
 
396
 
-
 
397
    if(!setupSuccessful)
-
 
398
        return;
-
 
399
 
-
 
400
    if(int(angle) != -1.0)
-
 
401
        rotateTo(angle);
-
 
402
 
-
 
403
    SMFrameSequence frameSequence;
-
 
404
 
-
 
405
    QSettings settings;
-
 
406
    if(settings.contains("camera/shuttersHDR"))
-
 
407
        acquireFrameSequenceHDR(frameSequence);
-
 
408
    else
-
 
409
        acquireFrameSequenceLDR(frameSequence);
-
 
410
 
-
 
411
 
306
    if(rotationStage && rotationStage->Handle)// TODO is this the right check
412
    if(rotationStage && rotationStage->Handle)// TODO is this the right check
307
        frameSequence.rotationAngle = rotationStage->getAngle();
413
        frameSequence.rotationAngle = rotationStage->getAngle();
308
    else
414
    else
309
        frameSequence.rotationAngle = 0;
415
        frameSequence.rotationAngle = 0;
310
 
416