Особенности в OpenCV (cvFindCornerSubPix, cvGoodFeaturesToTrack, cvPreCornerDetect) / OpenCV / Recog.ru - Распознавание образов для программистов


Особенности в OpenCV (cvFindCornerSubPix, cvGoodFeaturesToTrack, cvPreCornerDetect)

Описание нескольких функций, имеющих отношение к особенностям.

cvFindCornerSubPix
Уточняет местоположение углов.
void cvFindCornerSubPix(
	const CvArr* image,
	CvPoint2D32f* corners,
	int count,
	CvSize win,
	CvSize zero zone,
	CvTermCriteria criteria 
);

Параметры:
image – входное изображение;
corners – начальные координаты входных углов;
count – количество углов;
win – половина длины стороны окна поиск. Например, для win (5,5) окно поиска будет (5*2+1, 5*2+1) = (11, 11);
zone — половина размера мертвых регион в середине зоны поиска, над которой суммирование в формуле ниже не делается. Это иногда используется, чтобы избежать возможных особенностей автокорреляционной матрицы. Значение (-1, -1) означает, что нет такого размера.
criteria – критерий прекращения итерационного процесса утончения угла. Процесс прекращается или после достижения определенного количества итераций, или после достижения определенной точности. Можно использовать оба критерия.
Функция осуществляет приближение для точного определения местоположения угла (см. рис. ниже).


Субпиксельное уточнение угла основано на том, что каждый вектор из центра q к точке p, расположенный в окрестности q, ортогонален к градиенту изображения в p в зависимости от изображения и замеренных шумов. Рассмотрим выражение
(1)
где DI – градиент изображения в одной из точек pi в окрестности q. Значение q должно быть найдено такой, что выражение (1) минимизируется. Система уравнений может быть установлена при обнулении (1):

где градиенты суммируются в окрестности («окне поиска») q. Вызов первого градиента G и второго градиента b дает:

Алгоритм устанавливает центр окрестности окна в этом новом центре q и затем выполняет итерации пока центр не будет попадать в заданный порог.

cvGoodFeaturesToTrack
Определяет сильные углы на изображении
void cvGoodFeaturesToTrack(
	const CvArr* image,
	CvArr* eigImage, CvArr* tempImage,
	CvPoint2D32f* corners,
	int* cornerCount,
	double qualityLevel,
	double minDistance,
	const CvArr* mask=NULL,
	int blockSize=3,
	int useHarris=0,
	double k=0.04 
);

Параметры:
image – входное 8битное или 32бита (floating-point) 1-канальное изображение;
eigImage – временное 32битное (floating-point) изображение, размером такое же как image;
tempImage – еще одно временное изображение, формат и размер как в eigImage;
corners – выходной параметр, детектированные углы;
cornerCount – выходной параметр, количество углов;
qualityLevel – множитель дл минимума/максимума собственного значения; определяет минимальное допустимое качество углов;
minDistance – минимальное расстояние между углами;
mask – интересующий регион (маска), если NULL, то анализируется все изображение;
blockSize – размер блока при вызове cvCornerMinEigenVal или cvCornerHarris;
useHarris – если не 0, то используется cvCornerHarris, иначе cvCornerMinEigenVal;
k – дополнительный параметр для Харриса.

Функция находит углы с большими собственными значениями.

cvPreCornerDetect
Расчет карты особенностей для детектирования углов.
void cvPreCornerDetect(
	const CvArr* image,
	CvArr* corners,
	int apertureSize=3 
);

Параметры:
image – входное изображение;
corners –изображение, хранящее кандидаты углов;
apertureSize параметр для оператора Собела.

Функция вычисляет

где D с одним символом – обозначает одну из первых производных изображения, а D с двумя символами обозначает вторую производную изображения.
Углы могут быть найдены как локальные максимумы.
  • 0
  • 06 июня 2012, 15:44
  • vidikon

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.