我最近试图在OpenCV中缝合由直升机拍摄的低质量,低分辨率(320x180)图像。这是我得到的:
http://postimg.org/gallery/1rqsycyk/
拍摄的照片几乎是最低点,你可以看到很多重叠。每次拍摄之间都是翻译,我试图将物体放在地面上,使场景几乎保持平面,不会影响单应性的要求。无论如何,在拼接过程中不会考虑很多图片。
这是另一个例子,(只有三个图像拼接在一起):
http://postimg.org/gallery/1wpt3lmo/
我正在使用Surf Featuredetector,并认为低质量的图像不适合它,但我不确定。
这是我使用的代码,我在类似的问题OpenCV non-rotational image stitching上找到它并决定使用它,因为它比我的工作更好:
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类,但我不确定它是否会发生很大变化。所以问题是:尽管图像质量低,但如何使拼接过程更加稳健?另外:定义ROI对性能或实际拼接的可能性有影响吗?
答案 0 :(得分:3)
考虑到输入图像的质量,结果并没有那么糟糕!
为了提高输出质量,我会(优先顺序):
答案 1 :(得分:2)
我认为问题在于你拍摄了无纹理区域的照片,并且很难从这些平滑区域中提取出很好的独特关键点。
答案 2 :(得分:2)
我发现了这个问题,这对我很有帮助。我调查了这个主题,我还有其他一些提示:
关于寻找类似图像:
关于拼接图像的外观: Stitcher管道中还有一些其他功能。尝试使用:
stitcher.setSeamFinder(new detail :: GraphCutSeamFinder(GraphCutSeamFinderBase :: COST_COLOR))
stitcher.setBlender(detail :: Blender :: createDefault(Blender :: MULTI_BAND,false))
stitcher.setExposureCompensator(detail :: ExposureCompensator :: createDefault(ExposureCompensator :: GAIN_BLOCKS))
也许这会对你有所帮助!