Ask Your Question

Revision history [back]

exposure compensation module not giving giving desired output

Im am following the stitching pipeline of opencv to compensate exposure errors followed by a blending operation. however, the input images resembles exactly the output as if no processing has been done. When I checked the exposure_compensation.cpp file in opencv, the gains obtained are indeed very very low. For example, for the gain compensation function, what I get is [a,b] = [0.9434352570028618; 1.050340462492959].

Here is the code: /// input images ////

imModel371 = imread("../data/stitching/PS_Pyr2_371.png"); imModel377 = imread("../data/stitching/ImgdRGB.png");

/// Compute Masks ///////////////////

int num_images = 2;
vector<cv::Point> corners(2);
vector<UMat> images_warped(num_images);
vector<Size> sizes(num_images);
vector<UMat> mask_warp(num_images);

cv::Mat I[num_images];
cv::Mat mask[num_images];
 I[0] = imModel371.clone();
 I[1] = imModel377.clone();
Mat mask1(I[0].size(), CV_8U);

// Mask defines visible region of 1st image mask1(Rect(200, 0, (mask1.cols * .75), (mask1.rows) )).setTo(255); mask[0] = (mask1 & cvMask8U)255; mask[1] = (mask1 & cvMask8U)255; I[0].copyTo(images_warped[0]); I[1].copyTo(images_warped[1]);

  mask[0].copyTo(mask_warp[0]);
  mask[1].copyTo(mask_warp[1]);

  cv::namedWindow("Blending Mask",WINDOW_NORMAL);
  cv::imshow("Blending Mask", mask_warp[0]);
  cv::waitKey(0);

///Prepare Exposure Compensator ///////////////////

int expos_comp_type = ExposureCompensator::GAIN; Ptr<exposurecompensator> compensator = ExposureCompensator::createDefault(expos_comp_type);

  for (int img_idx = 0; img_idx < num_images; ++img_idx)
      corners[img_idx]= cv::Point(0,0);


  cout<<"feed compensator"<<endl;

  compensator->feed(corners, images_warped, mask_warp);
  cout<<"apply compensator"<<endl;

  for (int img_idx = 0; img_idx < 2; ++img_idx)
     {
     compensator->apply(img_idx, corners[img_idx], images_warped[img_idx], mask_warp[img_idx]);

  }
  cv::namedWindow("Exposure Compensation 1",WINDOW_NORMAL);
  cv::imshow("Exposure Compensation 1", images_warped[0]);
  cv::namedWindow("Exposure Compensation 2",WINDOW_NORMAL);
  cv::imshow("Exposure Compensation 2", images_warped[1]);
  cv::waitKey(0);

/// Prepare for blending /////////////////// ... .. ... ...