DennerV

Пользователи
  • Количество публикаций

    10
  • Зарегистрирован

  • Посещение

Репутация

0 Новичек

О DennerV

  • Звание
    Бывалый
  1. С гомографиейй так до конца и не разобрался Прочел здесь http://stackoverflow.com/questions/28725273/opencv-drawmatches-error, что matches содержит сопоставление между точками matches[0].TrainIdx и matches[0].QueryIdx, так ли это? Правильно ли я понял? Посчитал длины отрезков соседних точек - вроде как сходится, по координатам тоже похоже. Подскажите, как используя имеющеюся координаты повернуть второе изображение так, чтоб точки встали по координатам точек первого изображения?
  2. В моем случае отрицательных координат быть не должно, во всяком случае больших маленьких чисел, потому-что картинки почти одинаковые. findHomography возвращает Мат типа double, это не я придумал На выходных подумаю/почитаю, может что в голову да и придет Спасибо
  3. под z я имел ввиду 1 когда умножаю координаты на матрице то получаю отрицательные координаты, а такого уже быть не может Может неправильно что-то перевожу или порядок спутал Умножение: return new[] {a[0]*b[0, 0] + a[1]*b[1, 0] + a[2]*b[2, 0], a[0]*b[0, 1] + a[1]*b[1, 1] + a[2]*b[2, 1], a[0]*b[0, 2] + a[1]*b[1, 2] + a[2]*b[2, 2]} Получение b, написал выше, тип должен быть дубл?
  4. var srcPoints = modelKeyPoints.ToArray().Select(x => x.Point).ToList().GetRange(0, Math.Min(modelKeyPoints.Size, observedKeyPoints.Size)).ToArray(); var destPoints = observedKeyPoints.ToArray().Select(x => x.Point).ToList().GetRange(0, Math.Min(modelKeyPoints.Size, observedKeyPoints.Size)).ToArray(); Mat hom = new Mat(); CvInvoke.FindHomography(srcPoints, destPoints, hom, HomographyMethod.Ransac, 5); var arr = hom.GetData(); var b = new double[,] { {BitConverter.ToDouble(arr, 0), BitConverter.ToDouble(arr, 8), BitConverter.ToDouble(arr, 16)}, {BitConverter.ToDouble(arr, 24), BitConverter.ToDouble(arr, 32), BitConverter.ToDouble(arr, 40)}, {BitConverter.ToDouble(arr, 48), BitConverter.ToDouble(arr, 56), BitConverter.ToDouble(arr, 64)} }; for (var i = 0; i < matches.Size; i++) { var match = matches[i].ToArray(); if (mask.GetData(i)[0] == 0) continue; foreach (var e in match) { var a = new double[] {modelKeyPoints[e.QueryIdx].Point.X, modelKeyPoints[e.QueryIdx].Point.Y, 1.0}; var c = multiplication(a, b); MessageBox.Show(string.Format("Point: {0}", c)); } } массив b после перевода из байт в дубл содержит отрицательные числа, что мне кажется неправильным. Или я не так перевел? Какой порядок координат должен быть? (x, y, z)?
  5. После findHomography получил Mat 3x3? немного не понятно как координату умножить на матрицу, т.е. М1(1, 2) * М2(3, 3). Размеры же не совпадают, или нужно еще какие-то преобразования произвести? Я тут подумал, может не обязательно сопоставлять все точки, а можно найти матрицу гомографии и по ней сразу трансформировать все изображение?
  6. Как это можно сделать (сопоставление) самому? Допустим есть modelDescriptors - 50 точек и observedDescriptors 100 - точек, общие - пусть будет 20 точек. Каким образом пробежаться по modelDescriptors и найти/не найти точкам пару в observedDescriptors . Например: modelDescriptors [0] - пара не найдена modelDescriptors [1], координаты (25, 37) - пара observedDescriptors[8], координаты (183, 347) modelDescriptors [2], координаты (75, 81) - пара observedDescriptors[14], координаты (7, 34) modelDescriptors [3] - пара не найдена что-то в этом духе Как связаны modelKeyPoints и modelDescriptors? Порядковыми номерами или есть какие-то внутренние идентификаторы?
  7. Подскажите как происходит сопоставление найденных точек? В примере drawMatches и все. Мне же нужно взять несколько общих точек на обоих изображениях, знать их координаты, чтоб можно было оценить положение, разнице в размере. Откуда берется дистанция между точками?
  8. Скажем так, у меня скорее лабораторный образец, а не промышленная установка, поэтому с освещением худо-бедно можно решить. Как вариант расстраиваю бестеневую лампу/линзу с кольцевой подсветкой, линзу выкинуть, на ее место поставить камеру. Пока не опробовал, использую окно и белые листы бумаги) Насчет смещений я тоже думал об этом, самый простой вариант найти разность изображений (AbsDiff) а после найти контуры. Слишком маленькие контуры отсеивать, мелкие (небольшие смещения) уйдут, крупные (элементы/пустые места), останутся, тут уж придется действовать методом тыка. На данный момент проблема с точным позиционированием полученного изображения относительно контрольного
  9. Спасибо, буду разбирать пример Не подойдет, я потому-что заранее не известно что искать, Т.е. задача заключается в сравнении 2-х плат в показать расхождения (отсутствующий или лишний элемент), например показать синий кусок пластика на фото
  10. Добрый день! Стоит задача в сравнении изображения с камеры с эталонным изображением. На данный момент реализован поиск объекта и поворот изображения. Сравнение пытался сделать через AbsDiff, проблема в том, что из-за качества картинки изображения получаются не пиксель в пиксель, а с небольшим смещением и/или поворотом в 1-2 градуса. Придумал что можно использовать SURF. Найти общие ключевые точки и при из помощи более точно позиционировать (если нудно масштабировать) изображения. Нашел пример использования SURF. Подскажите как получить отдельно общие точки? Может есть более лучший способ сравнения 2 изображений, чтоб получить их отличия? Пример изобрадения