Перейти к содержимому
Compvision.ru
sanchez

разбор stitching_detailed.cpp

Recommended Posts

Можете немного пояснить несколько пунктов по коду из stitching_detailed.cpp

1)

Ptr<detail::BundleAdjusterBase> adjuster;
	if (ba_cost_func == "reproj") adjuster = new detail::BundleAdjusterReproj();
	else if (ba_cost_func == "ray") adjuster = new detail::BundleAdjusterRay();

не могу понять что делают эти два метода(Ray и Reproj).

2)

vector<double> focals;
	for (size_t i = 0; i < cameras.size(); ++i)
	{
		focals.push_back(cameras[i].focal);
	}

	sort(focals.begin(), focals.end());
	float warped_image_scale;
	if (focals.size() % 2 == 1)
		warped_image_scale = static_cast<float>(focals[focals.size() / 2]);
	else
		warped_image_scale = static_cast<float>(focals[focals.size() / 2 - 1] + focals[focals.size() / 2]) * 0.5f;

что обозначают warped_image_scale и focals?

3)

dilate(masks_warped[img_idx], dilated_mask, Mat());
resize(dilated_mask, seam_mask, mask_warped.size());
mask_warped = seam_mask & mask_warped;

что делает функция dilate?

4)и последнее, как выполняется blending(каким алгоритмом). поясню: переменная blend_type может принимать значения NO, FEATHER или MULTIBAND. мне интересно, как работают MULTIBAND и NO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Bundle Andjustment это глобальная оптимизация параметров камер, там видимо 2 разных метода.

2. Считается медиана focal length от всех камер?

3. Морфологическая операция на бинарной маске http://docs.opencv.org/2.4/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html

4. 

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/src/blenders.cpp#L126

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/src/blenders.cpp#L541

[По Multiband blending paper: BA83] Burt, P., and Adelson, E. H., A Multiresolution Spline with Application to Image Mosaics. ACM Transactions on Graphics, 2(4):217-236, 1983.

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/include/opencv2/stitching/detail/blenders.hpp

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/src/blenders.cpp

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 12.05.2017 at 11:51, mrgloom сказал:

1. Bundle Andjustment это глобальная оптимизация параметров камер, там видимо 2 разных метода.

2. Считается медиана focal length от всех камер?

3. Морфологическая операция на бинарной маске http://docs.opencv.org/2.4/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html

4. 

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/src/blenders.cpp#L126

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/src/blenders.cpp#L541

[По Multiband blending paper: BA83] Burt, P., and Adelson, E. H., A Multiresolution Spline with Application to Image Mosaics. ACM Transactions on Graphics, 2(4):217-236, 1983.

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/include/opencv2/stitching/detail/blenders.hpp

https://github.com/opencv/opencv/blob/3240f2a6b790bb9df086d390233c74a04ad63124/modules/stitching/src/blenders.cpp

 

спасибо. можете чуть пояснить по второму пункту: у камеры есть параметр focal - а что он значит(например параметр R отвечает за вращение)? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

focal это видимо focal length параметр камеры

http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html

 

Можете еще почитать Computer Vision: Algorithms and Applications Richard Szeliski раздел Image stitching

http://szeliski.org/Book/


 

 

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1) наверняка очень глупый вопрос, но всё же: 

    Ptr<RotationWarper> warper = warper_creator->create(static_cast<float>(warped_image_scale * seam_work_aspect));

    for (int i = 0; i < num_images; ++i)
    {
        Mat_<float> K;
        cameras[i].K().convertTo(K, CV_32F);
        float swa = (float)seam_work_aspect;
        K(0,0) *= swa; K(0,2) *= swa;
        K(1,1) *= swa; K(1,2) *= swa;

        corners[i] = warper->warp(images[i], K, cameras[i].R, INTER_LINEAR, BORDER_REFLECT, images_warped[i]);
        sizes[i] = images_warped[i].size();

        warper->warp(masks[i], K, cameras[i].R, INTER_NEAREST, BORDER_CONSTANT, masks_warped[i]);
    }

Здесь последняя строка делаем warp

и потом в конце(где последний for), там есть строка:

mask.create(img_size, CV_8U);
mask.setTo(Scalar::all(255));
warper->warp(mask, K, cameras[img_idx].R, INTER_NEAREST, BORDER_CONSTANT, mask_warped);

так чем они отличаются, и зачем делать одно и тоже

2) там же есть corners. по идее это верхний левый угол изображения. но когда я вывожу в консоль их, там координаты: у одного изображения [-308, 1227] и у второго [-183, 1221]. так что это за углы? (не знаю важно это или нет, но размер изображений 640*480)

3) 

Ptr<SeamFinder> seam_finder;
seam_finder = new detail::GraphCutSeamFinder(GraphCutSeamFinderBase::COST_COLOR);
seam_finder->find(images_warped_f, corners, masks_warped);

что делает seam_finder? если я правильно понял, то он находит швы, но как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1) Не смог этого быстро понять по коду, попробуйте вынести stitching_detailed.cpp в отдельный файл и добавляйте код постепенно(или только то что нужно) и смотрите на входные данные, это позволит понять на что влияет каждый шаг пайплайна.

2) Скорее всего это просто не в координатах изображения, а все изображения варпятся на некоторую координатную сетку.

3) Находит минимальный разрез на графе, пиксели это вершины графа, edges можно задавать просто как разницу между изображениями, но может это делается как то более умно

например

http://www.maths.lth.se/matematiklth/personal/petter/rapporter/panorama2.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×