From: <hug...@li...> - 2011-01-17 16:56:07
|
branch: details: http://hugin.hg.sourceforge.net/hgweb/hugin/hugin/hgrepo/h/hu/hugin/hugin/rev/a7cd27506f76 changeset: 4852:a7cd27506f76 user: tmodes date: Mon Jan 17 17:53:45 2011 +0100 description: [cpfind] Correctly apply crop for non-remapped stereographic fisheye images Necessary after changes in e875943da999 diffstat: src/hugin_cpfind/cpfind/PanoDetectorLogic.cpp | 24 ++++++++++++++++++++++-- 1 files changed, 22 insertions(+), 2 deletions(-) diffs (40 lines): diff -r 1ed54f00f624 -r a7cd27506f76 src/hugin_cpfind/cpfind/PanoDetectorLogic.cpp --- a/src/hugin_cpfind/cpfind/PanoDetectorLogic.cpp Sun Jan 16 16:33:18 2011 +0100 +++ b/src/hugin_cpfind/cpfind/PanoDetectorLogic.cpp Mon Jan 17 17:53:45 2011 +0100 @@ -222,14 +222,34 @@ } else { - if(iPanoDetector._panoramaInfoCopy.getImage(ioImgInfo._number).hasActiveMasks()) + const SrcPanoImage &SrcImg=iPanoDetector._panoramaInfoCopy.getImage(ioImgInfo._number); + if(SrcImg.hasActiveMasks()) { if(mask.width()!=aImageInfo.width() || mask.height()!=aImageInfo.height()) { mask.resize(aImageInfo.size().width(),aImageInfo.size().height(),255); }; //copy mask from pto file into alpha layer - vigra_ext::applyMask(vigra::destImageRange(mask), iPanoDetector._panoramaInfoCopy.getImage(ioImgInfo._number).getActiveMasks()); + vigra_ext::applyMask(vigra::destImageRange(mask), SrcImg.getActiveMasks()); + }; + //apply crop in case of stereographic fisheye images + if(SrcImg.getProjection()==SrcPanoImage::FISHEYE_STEREOGRAPHIC && + SrcImg.getCropMode()==SrcPanoImage::CROP_CIRCLE && + !SrcImg.getCropRect().isEmpty()) + { + vigra::Rect2D cR = SrcImg.getCropRect(); + hugin_utils::FDiff2D m( (cR.left() + cR.width()/2.0), + (cR.top() + cR.height()/2.0) ); + + double radius = std::min(cR.width(), cR.height())/2.0; + //create full mask if necessary + if(mask.width()!=aImageInfo.width() || mask.height()!=aImageInfo.height()) + { + mask.resize(aImageInfo.size().width(),aImageInfo.size().height(),255); + }; + //..crop everything outside the circle + vigra_ext::circularCrop(vigra::destImageRange(mask), m, radius); + }; }; |