Что такое «запрос» и «обучение» в функциях openCV2D

Везде в features2D классах я вижу термины query и train. Например, у matches есть trainIdx и queryIdx, а у Matchers есть train() метод.

Я знаю определение слов train и query на английском языке, но не могу понять значение этих свойств или методов.

P.S. Я понимаю, что это очень глупый вопрос, но, может быть, это потому, что английский не мой родной язык.


person Larry Cinnabar    schedule 26.05.2012    source источник


Ответы (3)


Чтобы завершить ответ sansuiso, я полагаю, что причина выбора этих имен должна заключаться в том, что в каком-то приложении у нас заранее есть набор изображений (обучающих изображений), например, 10 изображений, сделанных в вашем офисе. Для этих изображений можно извлечь признаки и вычислить дескрипторы признаков. И во время выполнения системе передается изображение для запроса обученной базы данных. Следовательно, изображение запроса относится к этому изображению. Мне очень не нравится, как они назвали эти параметры. Если у вас есть пара стереоизображений и вы хотите сопоставить функции, эти имена не имеют смысла, но вы должны выбрать соглашение, говорящее, что всегда называйте левое изображение изображением запроса, а правое изображение — обучающим изображением. Я защитил докторскую диссертацию по компьютерному зрению, и некоторые соглашения об именах в OpenCV кажутся мне действительно запутанными/глупыми. Так что, если вы находите это запутанным или глупым, вы не одиноки.

person fireant    schedule 26.05.2012
comment
Проще говоря, обучение — это заранее изученное изображение (извлеченные признаки), а запрос — это изображение, которое вы пытаетесь сопоставить с уже обученными. - person Rui Marques; 11.06.2012
comment
Раньше я называл эти вещи по-другому: я называл train как ethalon, а query как sample. - person Larry Cinnabar; 22.10.2012
comment
@Shambool, у меня вопрос, кажется глупым, но меня сильно смутил. если я помещу 2 trainDescripters trainA и trainB в flann matcher для поезда. затем идет запрос изображения queryC, будет ли алгоритм сопоставления выполняться как для поезда A, так и для поезда B с запросом C? - person Ethan Wang; 28.01.2014
comment
Согласитесь, глупые имена. Лучше srcIdx, dstIdx или firstIdx, secondIdx. - person nn0p; 18.12.2015

  • train: эта функция строит внутреннее состояние классификатора, чтобы сделать его работоспособным. Например, подумайте об обучении SVM или о построении kd-дерева из эталонных данных. Возможно, вы сбиты с толку, потому что в литературе этот шаг часто называют обучением.

  • query — это действие по поиску ближайших соседей к набору точек, и, в более широком смысле, оно также относится ко всему набору точек, для которых вам нужен ближайший сосед. Вспомните, что вы можете запросить соседей 1 точки или целую партию в одном и том же вызове функции (путем складывания точек признаков в матрицу).

  • trainIdx и queryIdx относятся к индексу пинты в наборе ссылок/запросов соответственно, т. е. вы запрашиваете у сопоставителя ближайшую точку (сохраненную в позиции trainIdx) к какой-либо другой точке (хранящейся в позиции queryIdx). Конечно, trainIdx известно после вызова функции. Если ваши точки хранятся в матрице, индексом будет линия рассматриваемого объекта.

person sansuiso    schedule 26.05.2012
comment
Этот ответ дает понять, что trainIdx и queryIdx относятся к первому и второму наборам (дескриптор/ключевая точка) соответственно. - person Greg Kramida; 19.02.2015
comment
@GregKramida Я думаю, что все наоборот. Когда совпадения получены с matcher.match(descriptors1, descriptors2, matches), тогда queryIdx будет индексироваться в keypoints1, а trainIdx в keypoints2. ср. stackoverflow.com/a/13320083/2397253 - person oarfish; 29.11.2015
comment
@oarfish, да, ты прав. Мне интересно, если я должен удалить комментарий, чтобы он никого не смущал. - person Greg Kramida; 30.11.2015
comment
@greg Первое и второе в какой системе отсчета? В методе knnMatch первый аргумент — это запрос, а второй — train: ">docs.opencv.org/3.2.0/db/d39/ - person dividebyzero; 08.02.2017
comment
@dividebyzero, да. - person Greg Kramida; 08.02.2017

Я понимаю «запрос» и «обучение» очень наивным, но полезным способом: «обучение»: данные или изображение предварительно обрабатываются для получения базы данных «запрос»: входные данные или изображение, которые будут запрашиваться в базе данных, которую мы обучили. до. Надеюсь, это поможет и вам.

person thunderY    schedule 15.02.2016
comment
Это не наивно, это так. Или то, что должно быть... Это означает, что одна точка поезда может быть назначена более чем одной точке запроса, с одной стороны. А также вы можете назначить все точки запроса, но некоторые точки поезда могут никогда не быть назначены. - person dividebyzero; 08.02.2017