Jump to content
Compvision.ru

Smorodov

Главные администраторы
  • Content count

    3,838
  • Joined

  • Last visited

  • Days Won

    343

Everything posted by Smorodov

  1. Один раз решив PnP, имеем матрицу поворота / переноса. Если добавленное смещение мало, можно взять любой треугольник и его проекцию, и по ним вычислить новый базис. И можно не городить огород )
  2. Здравствуйте, в стандартном комплекте есть пример 3D калибровки, у меня это f:\Documents\opencv\samples\cpp\3calibration.cpp По поводе положения доски, нужно сделать снимки под разными углами к плоскости камеры. Фотки для примера (тоже из стандартного набора) 0.ZIP
  3. Убрать шумы с изображения

    Как варианты: 1. Найти 2д ключевые точки, и TPS сплайном выровнять по ним кадры, усреднить, дальше как обычно. 2. Найти 3д модель руки, содрать текстуру, дальше как обычно. Ссылки по теме: https://github.com/xinghaochen/awesome-hand-pose-estimation
  4. Тут, скорее всего подойдет тот же метод, что и при анализе отпечатков пальцев. Только предварительная обработка будет отличаться, хотя, может быть через банк фильтров Габора пропустить и не помешает. Для начала бинаризация, затем поиск скелета, поиск точек ветвления, трассировкой по скелету, можно определить веса ребер графа. Много методов бинаризации здесь: DOXA Получить скелет можно при помощи: https://github.com/LingDong-/skeleton-tracing или мой пост здесь: Skeleton Кстати, при помощи скелета силуэта руки можно делать выравнивание. Ну и можно посмотреть в сторону алгоритма A*, для восстановления связности графа.
  5. Интересно, я имел ввиду чисто цифровое масштабирование драйвером камеры. Ведь мы используем одну и ту же камеру. Как меняется размер сенсора? Ну я могу представить, что можно извратиться, и сфокусировать его на меньший участок сенсора, тогда да, но не думал что так делают ...
  6. Ну, оптика тут остается та же, меняется только плотность пикселей, поэтому думается достаточно будет поменять fx, fy, cx, cy. Дальше все как с исходной матрицей.
  7. Как раз лучше когда не в одной плоскости. По поводу PnP есть неплохой пример здесь: https://learnopencv.com/head-pose-estimation-using-opencv-and-dlib/ Для плоских объектов лучше использовать что то вроде: https://github.com/arthur1026/RobustPlanarPose Вот, как то делал что то такое: MarkerTracker.rar
  8. Предназначение getoptimalnewcameramatrix

    Как я понял из описания: Функция возвращает ROI с корректными пикселями в параметре validPixROI . Alpha -задает порог по используемым пикселям, допустим пиксели ценные (сильные угловые точки), то они пройдут высокий порог, а на однотонном гладком участке точки будут малоценными и будут давать большую погрешность при сопоставлении, их ценность близка к 0. Вот из alpha и отсечет в зависимости от значения.
  9. Объединение контуров в один

    Не знаю как в шарпе это будет выглядеть, но вообще надо перебрать все контуры, а в контурах перебрать все точки. Двухуровневый цикл. Может тут что интересное найдете: https://csharp.hotexamples.com/ru/examples/Emgu.CV.Util/VectorOfVectorOfPoint/-/php-vectorofvectorofpoint-class-examples.html
  10. Еще ссылка в тему: https://github.com/RaubCamaioni/OpenCV_Position И статья к проекту: https://medium.com/analytics-vidhya/using-homography-for-pose-estimation-in-opencv-a7215f260fdd
  11. Набрел недавно на прикольный набор инструментов для обработки текстов на русском языке: https://github.com/natasha Просто чтобы не забыть ) Хочу в перспективе соединить со зрением, (другими датчиками) слухом и голосом :)
  12. d=w-(xc2-xc1) d - перекрытие w - ширина xc1 , xc2 - координаты центров \\\\\\\\\\\о////////// \\\\\\\\\\o/////////// -- без перекрытия \\\\\\\\\\\о//////XXXX\\\\\\o/////////// - с перекрытием
  13. Поздравляю ! Да, я не знал как это называется ) Но все равно сводится к треугольнику ))
  14. Ну так угол зрения камеры знаете, высоту съемки тоже, треугольник вам в помощь )
  15. Построить граф в виде матрицы

    Да не, все вроде верно, просто не внимательно прочитал. Я думал вы в сторону hungarian-algorithm клоните )
  16. Построить граф в виде матрицы

    Только расстояние между дескрипторами обратно пропорционально схожести точек.
  17. Построить граф в виде матрицы

    Ну код крафтить мне лень ) Чтобы добыть ключевые точки, можно заюзать что то такое: 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-той точками (точнее их дескрипторами).
  18. Построить граф в виде матрицы

    По горизонтали точки левого изображения, по вертикали правого, если соединяются то в пересечении 1 если нет, 0. Получите матрицу смежности. Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес.
  19. Можно применить автокорреляцию, не обязательно на сырых изображений. Можно предварительно прогнать через что ни будь типа OpenPose. По автокорреляции прикинуть полный период. А дальше выделить фазы. Ну и по вашему плану.
  20. А стандартный пример из исходников OpenCV пробовали ? https://github.com/opencv/opencv/blob/master/samples/cpp/calibration.cpp
  21. Если только смещение, без поворота то попробуйте, phaseCorrelate() . Можно еще вырезать шаблон и использовать templateMatching, Есть и более продвинутые способы, например : https://www.sicara.ai/blog/2019-07-16-image-registration-deep-learning
  22. Если изображения трансформированы сдвигом, масштабом и поворотом, можно попробовать estimateRigidTransform . Если только смещение, без поворота то, как альтернатива - phaseCorrelate() . Для того чтобы np.stack работала, изображения должны быть одинакового размера и типа, то есть придется их как-то привести к стандартному формату. Вначале посчитать среднее смещение, и принять эту точку за начало отсчета, затем создать пустое изображение для каждого слоя и вклеить в них со смещением, поворотом исходные изображения. Можно использовать warpAffine (попробовать можно здесь.
  23. А что должно получиться ? Насколько я помню, stack сделает 6 слойное изображение. Вы этого добиваетесь? Или нужно просто визуальное наложение с прозрачностью ?
  24. Я на шарпе не пишу, на C++ это было бы так, конвертировать матрицы в тип float при помощи convertTo, затем просто суммировать S=S+m и в конце разделить на количество кадров S=S/n. Или применить addWeighted beta = ( 1.0 - alpha ); addWeighted( src1, alpha, src2, beta, 0.0, dst); alpha в вашем случае 1/n src2=dst , src1 - новое изображение с камеры. dst - буфер где будет вычисляться среднее.
×