Низкое качество строчки с помощью OpenCV

Недавно я пытался сшить изображения низкого качества (320×180), снятые квадрокоптером, в OpenCV. Вот что я получил:

http://postimg.org/gallery/1rqsycyk/

Снимки сделаны почти надиром и, как вы видите, сильно перекрывают друг друга. Между каждым кадром есть перевод, и я пытался разместить объекты на земле, которые держат сцену почти плоской, чтобы не нарушать требования для гомографии. Во всяком случае, в процессе сшивания не учитывается достаточно много снимков.

Вот еще один пример (только три изображения сшиты вместе):

http://postimg.org/gallery/1wpt3lmo/

Я использую Surf Featuredetector и считаю, что низкое качество изображений не подходит для этого, но я не уверен в этом.

Вот код, который я использую, я нашел его по аналогичному вопросу OpenCV без вращения изображений и решил использовать его, так как он работал лучше, чем у меня:

    Mat pano;
Stitcher stitcher = Stitcher::createDefault(false);

stitcher.setWarper(new PlaneWarper());
stitcher.setFeaturesFinder(new detail::SurfFeaturesFinder(1000,3,4,3,4));
stitcher.setRegistrationResol(0.1);
stitcher.setSeamEstimationResol(0.1);
stitcher.setCompositingResol(1);
stitcher.setPanoConfidenceThresh(1);
stitcher.setWaveCorrection(true);
stitcher.setWaveCorrectKind(detail::WAVE_CORRECT_HORIZ);
stitcher.setFeaturesMatcher(new detail::BestOf2NearestMatcher(false,0.3));
stitcher.setBundleAdjuster(new detail::BundleAdjusterRay());
Stitcher::Status status = Stitcher::ERR_NEED_MORE_IMGS;
try{
status = stitcher.stitch(picturesTaken, pano);
}
catch(cv::Exception e){}

Мое другое предположение состоит в том, чтобы сделать процесс сшивания вручную вместо использования класса Stitcher, но я не уверен, что он сильно изменится. Итак, вопрос: как я могу сделать процесс сшивания более устойчивым, несмотря на низкое качество изображений? Кроме того: определение рентабельности инвестиций влияет только на производительность или также на вероятность фактического сшивания?

4

Решение

Результат не так плох, учитывая качество входных изображений!

Чтобы улучшить качество вывода, я бы сделал (в порядке приоритета):

  1. оценка искажения камеры, чтобы исправить ее и упростить сопоставление
  2. выполнить некоторую гистограмму или выравнивание освещения перед сшивкой
  3. попробуйте увеличить временной промежуток между картинками или используйте другую брошюровщику. Часть размытия на выходе создается брошюровщиком при объединении изображений в области их наложения.
3

Другие решения

Я полагаю, что проблема в том, что вы фотографируете области без текстуры, и трудно выделить хорошие отличительные точки из таких гладких областей.

2

Я нашел этот вопрос, который был очень полезным для меня. Я исследую эту тему, и у меня есть несколько советов для вас:

О поиске похожих изображений:

  • Вы устанавливаете SURFFeatureFidner с minHessian = 1000. Это действительно большое значение (OpenCV предлагает 300, я иногда использую 100). Вот почему есть только совпадения не всех изображений.
  • Вы устанавливаете PanoConfidendceThresh на «1», возможно, вам следует установить «0,8», он будет сшивать больше изображений.

О внешнем виде сшитых изображений:
Есть еще одна функция в конвейере Stitcher. Попробуй использовать:

  • stitcher.setSeamFinder (новая деталь :: GraphCutSeamFinder (GraphCutSeamFinderBase :: COST_COLOR))

  • stitcher.setBlender (деталь :: Blender :: createDefault (Blender :: MULTI_BAND, false))

  • stitcher.setExposureCompensator (detail :: ExposureCompensator :: createDefault (ExposureCompensator :: GAIN_BLOCKS))

Может быть, это будет полезно для вас!

2
По вопросам рекламы [email protected]