mrgloom 242 Жалоба Опубликовано June 10, 2011 пожалуй создам отдельную тему по сопоставлению изображений, чтобы объединить документы и темы с этим связанные и буду ее потихоньку наполнять. перед ссылкой идет название статьи и в скобках авторы, чтобы можно было восстановить данные если что, в некоторых случаях еще и комментарии. возможно надо изменить название темы и\или тэги. Keywords: mosaicking,image stitching,point matching,SIFT,SURF,MSER,ASIFT,RANSAC,FAST,Harris corner detector,corner detector,Region descriptors,Region detectors. Russian tags: склейка изображений, панорамные изображения. Литература: 1. Computational Methods for Automatic Image Registration (Marco Zuliani) - целый талмуд(докторская вроде). http://vision.ece.ucsb.edu/publications/zuliani_thesis06.pdf 2. A Mathematical Comparison of Point Detectors(M. Zuliani, C. Kenney and B. S. Manjunath) http://vision.ece.ucsb.edu/publications/04IVRMarco.pdf 3. A Condition Number for Point Matching with Application to Registration and Post-Registration Error Estimation C. S. Kenney, B. S. Manjunath, M. Zuliani, G. Hewer, A. Van Nevel. http://vision.ece.ucsb.edu/publications/03PamiRegistrationMarco.pdf 4. An Axiomatic Approach to Corner Detection C. S. Kenney M. Zuliani B. S. Manjunath http://vision.ece.ucsb.edu/publications/05CVPRZuliani.pdf 5. Automatic Panoramic Image Stitching using Invariant Features(Matthew Brown and David G. Lowe) -один из основных документов от создателя SIFT. http://cvlab.epfl.ch/~brown/papers/ijcv2007.pdf 6. Multi-Image Matching using Invariant Features(Matthew Alun Brown) - часть докторсокй http://cvlab.epfl.ch/~brown/papers/phd.pdf +30-40 еще будет Рассматриваемые подтемы: Region detectors-Region descriptors: (нахождение особых точек, выбор метода, детектора) Методы детекторы: Harris-Laplace,Different-of-Gaussians, Laplace-of-Gaussians, Теория: 1. Scale & Affine Invariant Interest Point Detectors (KRYSTIAN MIKOLAJCZYK AND CORDELIA SCHMID) -рассмотрены несколько детекторов. http://www.robots.ox.ac.uk/~vgg/research/affine/det_eval_files/mikolajczyk_ijcv2004.pdf 2. Ближе к практике, исходникам, реализациям: 1.FAST Corner Detection -- Edward Rosten -FAST c исходниками. http://mi.eng.cam.ac.uk/~er258/work/fast.html 2.бинарники Harris-Laplace,Different-of-Gaussians, Laplace-of-Gaussians ||+ Affine http://lear.inrialpes.fr/people/dorko/downloads.html 3.Некоторое сравнение методов(affine invariant) http://www.robots.ox.ac.uk/~vgg/research/affine/index.html Point matching and filtering:(сопоставление и отсев точек) -- Bundle Adjustment: (выравнивание изображений) -- Image blending: (бесшовная склейка) 1.POISSON LOCAL COLOR CORRECTION FOR IMAGE STITCHING(Mohammad Amin Sadeghi, Seyyed Mohammad Mohsen Hejrati and Niloofar Gheissari) 2.A Multiresolution Spline With Application to Image Mosaics(PETER J. BURT and EDWARD H. ADELSON) 3.Eliminating Ghosting and Exposure Artifacts in Image Mosaics (Matthew Uyttendaele,Ashley Eden,Richard Szeliski) Темы на форуме: почти полный цикл для склейки изображений http://www.compvision.ru/forum/index.php?showtopic=449 обсуждение вопроса выравнивания изображений после склейки http://www.compvision.ru/forum/index.php?showtopic=517 выравнивание яркости, блендинг. http://www.compvision.ru/forum/index.php?showtopic=508 http://www.compvision.ru/forum/index.php?showtopic=428 Обзоры на русском: http://courses.graphicon.ru/files/courses/vision/2010/cv_2010_03.pdf потом дополню и обобщу еще. 2 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TroyashkA 12 Жалоба Опубликовано June 15, 2011 http://szeliski.org/Book/ хорошая книжка http://habrahabr.ru/blogs/3d_graphics/83434/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано February 1, 2012 Блендинг при помощи Лаплассовых пирамид. Сравнительные результаты блендинга разными методами: http://www.cs.brown.edu/courses/csci1950-g/results/proj2/steveg/ Примеры на матлабе: http://www.alecjacobson.com/weblog/?p=940 Исходник на opencv (источник): #include "opencv2/opencv.hpp" using namespace cv; class LaplacianBlending { private: Mat_<Vec3f> left; Mat_<Vec3f> right; Mat_<float> blendMask; vector<Mat_<Vec3f> > leftLapPyr,rightLapPyr,resultLapPyr; Mat leftSmallestLevel, rightSmallestLevel, resultSmallestLevel; vector<Mat_<Vec3f> > maskGaussianPyramid; //masks are 3-channels for easier multiplication with RGB int levels; void buildPyramids() { buildLaplacianPyramid(left,leftLapPyr,leftSmallestLevel); buildLaplacianPyramid(right,rightLapPyr,rightSmallestLevel); buildGaussianPyramid(); } void buildGaussianPyramid() { assert(leftLapPyr.size()>0); maskGaussianPyramid.clear(); Mat currentImg; cvtColor(blendMask, currentImg, CV_GRAY2BGR); maskGaussianPyramid.push_back(currentImg); //highest level currentImg = blendMask; for (int l=1; l<levels+1; l++) { Mat _down; if (leftLapPyr.size() > l) { pyrDown(currentImg, _down, leftLapPyr[l].size()); } else { pyrDown(currentImg, _down, leftSmallestLevel.size()); //smallest level } Mat down; cvtColor(_down, down, CV_GRAY2BGR); maskGaussianPyramid.push_back(down); currentImg = _down; } } void buildLaplacianPyramid(const Mat& img, vector<Mat_<Vec3f> >& lapPyr, Mat& smallestLevel) { lapPyr.clear(); Mat currentImg = img; for (int l=0; l<levels; l++) { Mat down,up; pyrDown(currentImg, down); pyrUp(down, up, currentImg.size()); Mat lap = currentImg - up; lapPyr.push_back(lap); currentImg = down; } currentImg.copyTo(smallestLevel); } Mat_<Vec3f> reconstructImgFromLapPyramid() { Mat currentImg = resultSmallestLevel; for (int l=levels-1; l>=0; l--) { Mat up; pyrUp(currentImg, up, resultLapPyr[l].size()); currentImg = up + resultLapPyr[l]; } return currentImg; } void blendLapPyrs() { resultSmallestLevel = leftSmallestLevel.mul(maskGaussianPyramid.back()) + rightSmallestLevel.mul(Scalar(1.0,1.0,1.0) - maskGaussianPyramid.back()); for (int l=0; l<levels; l++) { Mat A = leftLapPyr[l].mul(maskGaussianPyramid[l]); Mat antiMask = Scalar(1.0,1.0,1.0) - maskGaussianPyramid[l]; Mat B = rightLapPyr[l].mul(antiMask); Mat_<Vec3f> blendedLevel = A + B; resultLapPyr.push_back(blendedLevel); } } public: LaplacianBlending(const Mat_<Vec3f>& _left, const Mat_<Vec3f>& _right, const Mat_<float>& _blendMask, int _levels): left(_left),right(_right),blendMask(_blendMask),levels(_levels) { assert(_left.size() == _right.size()); assert(_left.size() == _blendMask.size()); buildPyramids(); blendLapPyrs(); }; Mat_<Vec3f> blend() { return reconstructImgFromLapPyramid(); } }; Mat_<Vec3f> LaplacianBlend(const Mat_<Vec3f>& l, const Mat_<Vec3f>& r, const Mat_<float>& m) { LaplacianBlending lb(l,r,m,4); return lb.blend(); }[/code] 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах