Измерение размеров прямоугольника с веб-камеры (OpenCV)

Компьютерное зрение, OpenCV

Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение ColaClassic » 18 апр 2018, 15:30

Добрый день, уважаемые форумчане! Пару недель назад начал изучать библиотеку OpenCV. Возникла следующая задача:

На столе лежит что-то прямоугольной формы. Над этим прямоугольником вертикально сверху (перпендикулярно) стоит камера, которая смотрит вниз на данную фигуру. Нужно каким-то образом измерить длину и ширину прямоугольника. Расстояние от камеры до фигуры константа. Допускается откалибровать камеру, подставив рядом какую-нибудь линейку известной длины. Фон нормальный контрастный.


На данный момент перевел изображение в оттенки серого, немного размыл гауссовским blur'ом, выделил границы объекта с помощью функции Canny, обвёл прямоугольник контуром (cv2.drawContours). Делаю всё это на питоне 3.6.4, версия opencv третья.

Кто сможет подсказать дальнейшие действия? :)
ColaClassic
 
Сообщения: 14
Зарегистрирован: 18 апр 2018, 15:28
programming: c++, python

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение noonv » 18 апр 2018, 16:34

Первым делом, тут нужно откалибровать камеру и устранить дисторсию. Далее, по ректифицированному изображению можно будет определять размеры объекта.
Аватара пользователя
noonv
Администратор
 
Сообщения: 553
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение ColaClassic » 18 апр 2018, 16:52

Спасибо за ответ! Разве в данном случае нужна калибровка камеры? Вроде бы изображение без эффекта дисторсии записывается на камеру (или любая камера снимает с искажением "незаметным" глазу?)

Я правильно понимаю структуру проекта, который необходимо мне выполнить:

1. Задать какой-то эталонный размер в программу
2. Указать, что "X" пикселей в длину "эталонной" фигуры = "Y" сантиметров
3. Сравнить искомую длину в пикселях с заданным "эталонным", и через это отношение найти "Y" сантиметров искомых?
ColaClassic
 
Сообщения: 14
Зарегистрирован: 18 апр 2018, 15:28
programming: c++, python

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение noonv » 18 апр 2018, 17:00

По поводу искажений: можно взять линейку и расположив её в разных местах поля зрения камеры - проверить как изменяется соотношение мм/пиксели.
По структуре проекта: в простом варианте - да.
Аватара пользователя
noonv
Администратор
 
Сообщения: 553
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение ColaClassic » 01 май 2018, 22:02

Временно не было возможности заниматься данной задачей. Сейчас снова взялся за неё.
Хотел спросить как выполняется калибровка? С помощью шахматной доски? (Пока особо не изучал информацию по поводу калибровки, поэтому вообще не понимаю все ли калибровки выполняются с помощью шахматной доски, и зачем вообще нужно эта самая доска :-) )
ColaClassic
 
Сообщения: 14
Зарегистрирован: 18 апр 2018, 15:28
programming: c++, python

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение noonv » 03 май 2018, 15:08

Да - при помощи "шахматной доски".
Доска нужна как раз для обнаружения оптических искажений.
Изображение
См. Camera Calibration
Аватара пользователя
noonv
Администратор
 
Сообщения: 553
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение ColaClassic » 03 май 2018, 19:49

noonv писал(а):Да - при помощи "шахматной доски".

Подскажите, пожалуйста! Реально ли будет добиться точности <1 мм при измерении длины ~300 мм после выполнения калибровки? Если учесть, что камера будет не дешевая ВЕБка за 200 рублей, а более менее качественная. Высоту камеры до объекта можно варьировать.
ColaClassic
 
Сообщения: 14
Зарегистрирован: 18 апр 2018, 15:28
programming: c++, python

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение noonv » 04 май 2018, 09:55

Думаю, вы сами сможете ответить на этот вопрос, если посчитаете число пикселей объекта, которое выдаёт камера на заданной высоте.
Аватара пользователя
noonv
Администратор
 
Сообщения: 553
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение ColaClassic » 05 май 2018, 21:09

Я вроде как выполнил калибровку с помощью доски, получил какие-то коэффициенты видимо. Вроде как разобрался как применять их в дальнейшем для корректировки других изображений (фотографий). А можно ли использовать эти полученные коэффициенты при работе с видеопотоком "в прямом эфире"? Чтобы capturecamera "в прямом эфире" показывала уже скорректированную картинку без искажений? Или калибровка работает только при работе с изображениями сфотографированными?
ColaClassic
 
Сообщения: 14
Зарегистрирован: 18 апр 2018, 15:28
programming: c++, python

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение noonv » 07 май 2018, 10:22

Выше я приводил ссылку на руководство по калибровке камеры - там же указано, как затем использовать полученные коэффициенты.
От камеры вы будете получать искажённую картинку, которую затем придётся ректифицировать при помощи функций cv2.undistort(), а лучше cv2.remap().
Никто не мешает реализовать свою обёртку вокруг cv2.VideoCapture, в которой реализовать корректировку картинки и возвращать уже готовую картинку без искажений.
Аватара пользователя
noonv
Администратор
 
Сообщения: 553
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение ColaClassic » 12 май 2018, 20:57

noonv писал(а):Выше я приводил ссылку на руководство по калибровке камеры - там же указано, как затем использовать полученные коэффициенты.
От камеры вы будете получать искажённую картинку, которую затем придётся ректифицировать при помощи функций cv2.undistort(), а лучше cv2.remap().
Никто не мешает реализовать свою обёртку вокруг cv2.VideoCapture, в которой реализовать корректировку картинки и возвращать уже готовую картинку без искажений.

А каким образом можно проверить: новая картинка уже с пофикшенной дисторсией получается или всё та же дисторсия присутствует? Просто глазу незаметна эта разница
ColaClassic
 
Сообщения: 14
Зарегистрирован: 18 апр 2018, 15:28
programming: c++, python

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение noonv » 14 май 2018, 10:12

ColaClassic писал(а):А каким образом можно проверить: новая картинка уже с пофикшенной дисторсией получается или всё та же дисторсия присутствует?

Например, при помощи той же шахматной доски :)
Аватара пользователя
noonv
Администратор
 
Сообщения: 553
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Измерение размеров прямоугольника с веб-камеры (OpenCV)

Сообщение ColaClassic » 15 май 2018, 14:51

В общем я провел прямую линию на фотографии с доской ДО корректировки - вроде линия была почти прямая.
И затем провел прямую линию на этой же, но уже откалиброванной фотографии - линия так же осталась прямой.
И до, и после в общем разница не заметна) Возможно у меня расстояние от камеры до шахматной доски мало. Насколько я понимаю, ведь чем дальше расстояние до фотографируемого объекта, тем больше эффект дисторсии. :ne_vi_del:

Добавил фотографии до (первая фотка, та, что сверху) и после (вторая, та, что снизу) обработки:
Изображение
Изображение

Насколько успешно я провёл калибровку камеры судя по прикреплённым мною фотографиям? :hi_hi_hi:
ColaClassic
 
Сообщения: 14
Зарегистрирован: 18 апр 2018, 15:28
programming: c++, python


Вернуться в Компьютерное зрение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

© 2009-2017 |  О проекте  |  Политика Конфиденциальности  |