Jump to content
Compvision.ru

All Activity

This stream auto-updates     

  1. Yesterday
  2. Last week
  3. Earlier
  4. Еще ссылка в тему: https://github.com/RaubCamaioni/OpenCV_Position И статья к проекту: https://medium.com/analytics-vidhya/using-homography-for-pose-estimation-in-opencv-a7215f260fdd
  5. У них на канале много интересного. Вот http://pullenti.ru SDK для работы с текстом. Извлечения текста из doc, rtf, pdf и тд. А так же сильный инструмент для обработки текста. Особенно понравилась демо пример.
  6. Набрел недавно на прикольный набор инструментов для обработки текстов на русском языке: https://github.com/natasha Просто чтобы не забыть ) Хочу в перспективе соединить со зрением, (другими датчиками) слухом и голосом :)
  7. Добрый день. Имеется общий вопрос. Где можно почитать про поддержку стандартом UVC формата RGB (RGB24). Есть ли примеры написания дескрипторов?
  8. А что такое сдвиги? Матрица гомографии хранит сдвиг центра в координатах H[0, 2] и H[1, 2]. Понятно, что с учётом поворота, наклона и изменения размера, для каждого пикселя будет свой сдвиг. И чтобы его получить, надо дополненные координаты пикселя умножить на матрицу гомографии. То есть [xi_new, yi_new, 1] = H * [xi, yi, 1]. Ещё можно предположить, что требуется найти разложение матрицы гомографии на составляющие (на роизведение матриц для отдельных преобразований): сдвиг, вращение, скейл... Это тоже решается, но, кажется, не однозначно.
  9. Что-то не получается у меня нормальные сдвиги получить. Может подскажете как получить сдвиги по X и Y?
  10. Гомография же задаёт в общем случае перспективное преобразование. В этом случае, между плоскостями двух снимков есть 2 угла: поворота и наклона. И они, кажется, связаны друг с другом. Если мы имеем дело с аффинным преобразованием, то да - у нас есть один угол поворота и всё.
  11. Почему может не работать? Как тогда правильно?
  12. 1. Радианы. Но в общем случае твой способ может не работать. 2. Сдвиг - это H[0, 2] и H[1, 2]. Но для разных пикселей он разный.
  13. Угол поворта камеры определяю след.образом angle = math.atan2(H[1, 0], H[0, 0]) где H - матрица гомографии. Вопрос - в чем он измеряется? И еще вопрос: Из матрицы гомографии можно получить сдвиг изображения?
  14. d=w-(xc2-xc1) d - перекрытие w - ширина xc1 , xc2 - координаты центров \\\\\\\\\\\о////////// \\\\\\\\\\o/////////// -- без перекрытия \\\\\\\\\\\о//////XXXX\\\\\\o/////////// - с перекрытием
  15. Как теперь с этим всем хозяйством получить, насколько изображения перекрывают друг друга? У меня есть список дистанций между изображениями Часть списка для примера: {'filename1': 'dji_0666.jpg', 'filename2': 'dji_0667.jpg', 'distance': 1.4510858010828085} {'filename1': 'dji_0663.jpg', 'filename2': 'dji_0664.jpg', 'distance': 1.4625754772170405} {'filename1': 'dji_0652.jpg', 'filename2': 'dji_0653.jpg', 'distance': 1.7807144386327662} {'filename1': 'dji_0659.jpg', 'filename2': 'dji_0660.jpg', 'distance': 1.8890964513768231} {'filename1': 'dji_0644.jpg', 'filename2': 'dji_0645.jpg', 'distance': 1.9983018138089903} {'filename1': 'dji_0655.jpg', 'filename2': 'dji_0656.jpg', 'distance': 2.1954923719218247} {'filename1': 'dji_0647.jpg', 'filename2': 'dji_0648.jpg', 'distance': 2.3366167661177} И есть реальные размеры на каждом изображении. Понимаю, что нужно порог задать и всё такое. Но как воплотить в код, не пойму Вообще задача сводится к построению мозайки изображений
  16. Поздравляю ! Да, я не знал как это называется ) Но все равно сводится к треугольнику ))
  17. Можно же через GSD,не? Image Width: 4000px Image Height: 3000px Sensor Width: 13.2mm Sensor Height: 4.55 mm Focal Length: 3.57 mm Высота полета 91.088004м Далее по формуле (https://www.propelleraero.com/blog/ground-sample-distance-gsd-calculate-drone-data/) расчитываем GSD и получаем cm/px. В моем случае для одного из изображений -3.94 cm/px Далее 4000*3.94 и 3000*3.94 В итоге ширина/высота = 157,6м/118,2м Ну не красотенюшка ли?)
  18. Ну так угол зрения камеры знаете, высоту съемки тоже, треугольник вам в помощь )
  19. Построить граф в виде матрицы

    Да не, все вроде верно, просто не внимательно прочитал. Я думал вы в сторону hungarian-algorithm клоните )
  20. Что Вы имеете ввиду? Где мне исправить?
  21. Нужно измерить на сколько изображения перекрывают друг друга Имеется lat,lon для каждого изображения Вычисляю разницу в метрах для каждого изображения from math import sin, cos, sqrt, atan2, radians R = 6373.0 #для первых двух изображений lat1 = radians(123.114661) lon1 = radians(38.426805) lat2 = radians(123.114650) lon2 = radians(38.426831) dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2 c = 2 * atan2(sqrt(a), sqrt(1 - a)) distance = R * c distance_in_meters=distance * 1000 >>> distance_in_meters 1.9983018138089903 Теперь мне надо найти реальные размеры изображения. Не пиксельные, а в метрах. Как это сделать? Изображения представляют собой аэрофотоснимки с дрона.
  22. Построить граф в виде матрицы

    Только расстояние между дескрипторами обратно пропорционально схожести точек.
  23. Вот так сделал def match(self, i1, i2, direction=None): imageSet1 = self.getSURFFeatures(i1) imageSet2 = self.getSURFFeatures(i2) print("Direction : ", direction) matches = self.flann.knnMatch( imageSet2['des'], imageSet1['des'], k=2 ) good = [] for i , (m, n) in enumerate(matches): if m.distance < 0.7*n.distance: good.append((m.trainIdx, m.queryIdx)) if len(good) > 4: pointsCurrent = imageSet2['kp'] pointsPrevious = imageSet1['kp'] matchedPointsCurrent = np.float32( [pointsCurrent[i].pt for (__, i) in good] ) matchedPointsPrev = np.float32( [pointsPrevious[i].pt for (i, __) in good] ) H, s = cv2.findHomography(matchedPointsCurrent, matchedPointsPrev, cv2.RANSAC, 4) return H,sum(s) / len(s) return None def getSURFFeatures(self, im): gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) kp, des = self.surf.detectAndCompute(gray, None) return {'kp':kp, 'des':des} N = len(img_list) adjacency_matrix = np.zeros((N, N)) for i in range(N): for j in range(i + 1, N): out = s.matcher_obj.match(lst[i], lst[j], 'left') if out is not None: H, s = out if s >= 0.5: adjacency_matrix[i, j] = 1 adjacency_matrix[j, i] = 1 print('AM',adjacency_matrix)
  24. Построить граф в виде матрицы

    Ну код крафтить мне лень ) Чтобы добыть ключевые точки, можно заюзать что то такое: import numpy as np import cv2 from matplotlib import pyplot as plt img1 = cv2.imread('box.png',0) # queryImage img2 = cv2.imread('box_in_scene.png',0) # trainImage # Initiate SIFT detector sift = cv2.SIFT() # find the keypoints and descriptors with SIFT kp1, des1 = sift.detectAndCompute(img1,None) kp2, des2 = sift.detectAndCompute(img2,None) Есть 2 набора точек, у которых есть дескрипторы (многомерные точки), так вот, делаем двойной вложенный цикл. И заполняем матрицу NxM, где N - количество точек первого изображения, а M - второго. Элемент матрицы D[i,j] будет равен расстоянию между i-той и j-той точками (точнее их дескрипторами).
  25. Благодарю! Можно пример кода? Желательно на Python Особенно интересует этот момент "Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес. ". Не могу пока никак сообразить как это закодить
  26. Построить граф в виде матрицы

    По горизонтали точки левого изображения, по вертикали правого, если соединяются то в пересечении 1 если нет, 0. Получите матрицу смежности. Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес.
  27. У меня в цикле строится гомография между парами снимков. Как это оформить в граф? Желательно в матрицу смежности for b in s.left_list[1:]: H = s.matcher_obj.match(a, b, 'left')
  28. Можно сделать проще. Выделить линией где человек и считать количество раз сколько он её пересек. К примеру по поясу. Встал есть пересечение сел нету. Насколько слышал именно так и делают.
  1. Load more activity
×