Недавно я пытался сшить изображения низкого качества (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, но я не уверен, что он сильно изменится. Итак, вопрос: как я могу сделать процесс сшивания более устойчивым, несмотря на низкое качество изображений? Кроме того: определение рентабельности инвестиций влияет только на производительность или также на вероятность фактического сшивания?
Результат не так плох, учитывая качество входных изображений!
Чтобы улучшить качество вывода, я бы сделал (в порядке приоритета):
Я полагаю, что проблема в том, что вы фотографируете области без текстуры, и трудно выделить хорошие отличительные точки из таких гладких областей.
Я нашел этот вопрос, который был очень полезным для меня. Я исследую эту тему, и у меня есть несколько советов для вас:
О поиске похожих изображений:
О внешнем виде сшитых изображений:
Есть еще одна функция в конвейере Stitcher. Попробуй использовать:
stitcher.setSeamFinder (новая деталь :: GraphCutSeamFinder (GraphCutSeamFinderBase :: COST_COLOR))
stitcher.setBlender (деталь :: Blender :: createDefault (Blender :: MULTI_BAND, false))
stitcher.setExposureCompensator (detail :: ExposureCompensator :: createDefault (ExposureCompensator :: GAIN_BLOCKS))
Может быть, это будет полезно для вас!