Перейти к содержимому
Compvision.ru

maxfashko

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

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

  • Посещение

  • Days Won

    2

Все публикации пользователя maxfashko

  1. Добрый день. Рябата, подскажите реализована ли где-нибудь следущая идея алгоритма сегментации, и не пытаюсь ли я придумать велосипед? Имеем объект, границы которого нам известны. Необходимо скользящим окном передвигаться по границе всего объекта для вычисления ( "среднего цвета?", "разности контраста?" ли еще чего ) в заданной области окна, между объектом и фоном. При удовлетворении условия "большой разности цвета" границ объекта и фона, применяем алгоритм floodfill с заданным порогом, внутри скользящего окна, тем самым удаляя фон с изображения. Таким образом, алгоритм позволит отделить от фона границу объекта с высоким контрастом, не затронув границу с низким контрастом ( например градиент на нижней границе риуснка ) Объяснил как смог. Мне интересно вычисление значения для алгоритма floodfill, на основе чего оно будет вычисляться?
  2. Добрый день. Подскажите пожалуйста, имеется ли достоверная информация на тему сравнения точности обученных моделей на grayscale и RGB изображениях. Может личный опыт в данном вопросе? Насколько может различаться точность при классификации объектов сверточными сетями, в зависимости от используемого цветового пространства? Понимаю, что вопрос затрагивает множество факторов, относящихся к самим данным, но есть ли что-то от чего можно отталкиваться в данном вопросе?
  3. Работа с float изображением

    День добрый. Ситуация поставила меня в тупик: # имеем изображение cv2.LUT(img_3ch,label_colours,result) result = result.astype(float)/255 #теперь, чтобы работать с изображением его необходимо перевести в int result_int = result.astype(int) #в конечном итоге, какими бы преобразованиями я не пользовался, np заполняем массив нулями result_int = result.astype(np.int64) #конечной целью служит выделить контур на изображении gray_image = cv2.cvtColor(result_int, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray_image, 127, 255, 0) im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  4. Работа с float изображением

    Похоже, что понял, как это дело должно выглядеть: FOV(w) = arctan(W / fy) FOV(h) = arctan(H / fx), где: H - будет размер картинки fx - значение из матрицы калибровки внутренних параметров 2.3815068922917403e+03 0. 1920 0. 2.3815068922917403e+03 1080 0. 0. 1. Вот и получается, что мой угол обзора камеры равен 77,4 и 48,78. Вот только в даташите указано, что FOV = 94 (это я как понимаю диагональ), если посчитать мои значения, выйдет 91.7. Это нормально?
  5. Работа с float изображением

    Имеется отснятое видео шахматной доски, камерой, которая будет использоваться (видео очень долго обрабатывает, пришлось взять только часть изображений из отснятого). Воспользовался программой для калибровки, расположенной по адресу: opencv_dir/samples/cpp/tutorial_code/calib3d/camera_calibration/ https://yadi.sk/i/Bv0iUR9j3GahHm Изменил конфиг только для расположения изображений калибровки. Настройки доски не менял. Получил на выходе xml файлик с конфигом https://yadi.sk/d/56EX60qE3Gagqp Камера используется в Phantom 4 (4к) В спецификациях производитель пишет: То есть теперь для того чтобы мне найти вертикальный и горизонтальный углы обзора необходимо воспользоваться формулой: H = 2*arctan(35/2*2.8)= arctan(12.5) = 85 Что-то не похоже на правду. Мне необходимо для расчета FOV брать данные, которые получены при калибровке? Если да, то как будет выглядеть процедура определения углов зрения?
  6. Работа с float изображением

    Спасибо!
  7. Работа с float изображением

    Не до конца понял, как вычислить тангаж по Вашему методу. С креном все ясно: Берем две точки прямой, характеризующую линию горизонта, отнимаем их и вычисляем arctan, переводя в градусы. В случае расчета тангажа известно только расстояние между двумя прямыми: линией горизонта, которую мы получили аппроксимацией (неба, земли) и линией, характеризующей продольную ось бпла. По каким формулам происходит расчет?
  8. Работа с float изображением

    С креном понятно, разобрался, а что насчет тангажа? Как коеффицент угловой меры от пикселя выразить? Как расстояние пересчитать на угол раствора?
  9. Работа с float изображением

    Да, отклонения по крену
  10. Работа с float изображением

    В целом то, что у меня получилось похоже на правду, но со странностями. Я что-то упустил? # -*- coding: utf-8 -*- import numpy as np import cv2 image = cv2.imread('../data/segment_video/igm_0.jpg') img = cv2.dilate(image, np.ones((8,8), np.uint8), iterations = 1) img = cv2.blur(img,(3,3)) img = cv2.Sobel(img,cv2.CV_8U,1,1,ksize=5) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) _, contours, _ = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) cnt = contours[0] # then apply fitline() function [vx,vy,x,y] = cv2.fitLine(cnt,cv2.DIST_L2,0,0.01,0.01) # Now find two extreme points on the line to draw line lefty = int((-x*vy/vx) + y) righty = int(((gray.shape[1]-x)*vy/vx)+y) #Finally draw the line cv2.line(img,(gray.shape[1]-1,righty),(0,lefty),255,2) cv2.imshow('result',img) cv2.imshow('img',image) cv2.waitKey(0) cv2.destroyAllWindows() Линия вписывается в зависимости от blur, чем выше значение, тем точнее. Исходное, blur(3,3), blur (10,10)
  11. Работа с float изображением

    Мы все это проделываем ведь с исходным изображением? Получается, что в результате работы Sobel у меня не будет тогда контуров захватывающих границы изображения (верх, левая, правая)? Как то это все тянет на долгие вычисления...
  12. Работа с float изображением

    Я думал сделать это через контур,а затем у scipy есть sp.polyfit(). И если взять полином первой степени то получу прямую. Как реализовать Ваш метод не допонимаю
  13. Работа с float изображением

    Да, глупости пишу... Мне вот что не понятно, как выбрать определенный отрезок от найденного контура на изображении, чтобы затем с ним работать? Например отрезок обведенный красным. Или есть гораздо более простой способ получить линию, разделяющую два цвета, для последующей аппроксимации?
  14. ENet

    Добрый день. Расскажите пожалуйста о вашем опыте работы с torch. Минусы и плюсы, а так же отзывы о производительности. Не будет ли проблем интеграции решения на данном фреймворка с другими модулями программы? Там насколько я понимаю Lua. Смотрю в сторону данного фреймворка потому, что имеется реализация многообещающей сетки ENet https://github.com/e-lab/ENet-training. Производительность колоссальная по сравнению с тем же SegNet на Jetson TX1. Авторы утверждают прям о реалтайме. Если есть какие то ограничения на данный фреймворк, и захочется переписать сетку на тот же Caffe, это возможно?
  15. ENet

    Самое смешное, что мне необходимо не брать в учет показания датчиков, а выстраивать свои показания, опираясь только на картинку
  16. ENet

    Кстати, насчет областей. на данный момент у меня всего два класса на изображениях. В будущем я захочу добавить к примеру воду, леса и т.д. Придется выкидывать тренировочную выборку, которая используется сейчас? Так как на данных изображениях могут быть: вода, лес, дома. Они будут вносить ошибку? Или есть способ использовать в последующем данную выборку совместно с расширенной (многоклассово-размеченной)
  17. ENet

    Расскажите подробнее пожалуйста об этом. Как вариант, стоит рассмотреть данный вариант. Тут суперпиксели? А сетка потом будет больше областей распознавать, пока два класса только. Поэтому ее взял, и на небе с землей стал обучать пока. Кстати, каким образом можно задать заранее сегменты неба (синий) и земли (зеленый), если предварительно не известно, что на изображении?
  18. ENet

    А как же субдискретизация? Она ведь для создания инвариантности и служит?
  19. ENet

    Вечер добрый. Назрел вопрос. Натренировал сетку по двум классам на изображениях приведенных ниже ( 25к в train (200*120px) ). В итоге при ровном положении камеры на бпла картинку распознает более менее сносно, даже есть инвариантность к небольшим поворотам. Но вот как только крен бпла увеличивается, получается жесть. Собственно, ожидаемо. Как с этим бороться? Генерировать новые данные для обучения на основе имеющихся, но с поворотом? Или идти путем создания новых реальных данных, которые необходимо будет разметить?
  20. ENet

    Понятно, там все проще, да. Я пробовал с DIGITS SegNet обучать, и не вышло. Хорошо, указал я тестовую и тренировочную сетку: Каждые 100 итераций консоль выдает: Собственно что это за информация? В тестовой выборке у меня 9729 изображений. Это сетка сегментирует мои изображения в тестовой выборке? Если да, то почему этих "prob" и "label" так много? prob - 143 тысячи, label - 23 тысячи? по идее должно ведь только 100 картинок из тестовой выборки обрабатываться с батчем равным 1
  21. ENet

    Это выставляется все настройками test в solver.prototxt? То есть test_iter=1000 - это то, сколько итераций по тестовой выборке алгоритм отработает. Тестовая выборка тоже в solver.prototxt устанавливается? Я о том, что идет процесс тренировки, затем после заданной итерации начался процесс тестирования, не останавливая обучение
  22. ENet

    other.pdf Возник вопрос. Собственно как определить, что необходимо остановиться при обучении сети? Данные вот такие: При запуске обучения я устанавливаю писать в лог файл. По мере обучения я его парсю и смотрю, что же там вышло: Такие графики очень не информативны, и понять по ним, когда же необходимо остановиться нельзя. Когда итерации достигают величины тестирования: Собственно тоже не совсем понятно, что же происходит у нас на этапе тестирования, где я указал test_iter=1000
  23. ENet

    Просто оставлю это здесь, может конечно повторюсь, но все же. http://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htm
  24. ENet

    Что значит квантизировать? Можете привести пример?
  25. ENet

    Bes, есть ли что-то подробнее описывающее процесс создания таких сеток? Например на Caffe. Нам необходимо только описать структуру сети в конфигурации, или нужно еще что-то на крестах писать? Будет ли лучшим решением использовать Caffe, если переписывать данную сетку? Или стоит посмотреть на theano, tensorflow. Задача поставлена так: как можно быстрее, без задержек производить сегментацию на выше описанном железе. Думаю в дальнейшем на плате будет еще что-нибудь крутиться. Про Caffe знаю, что можно выбросить питоновский интерфейс и пользоваться чистыми крестами, это подходит очень кстати.
×