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

Измерение размеров прямоугольника с помощью WEB-камеры

Recommended Posts

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

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


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

Кто сможет подсказать дальнейшие действия? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть учебник А. Н. Лобанов "Фотограмметрия" 1984 год. Глава 9. Анализ одиночного снимка. Как раз на эту тему

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 19.04.2018 at 00:20, iskees сказал:

Есть учебник А. Н. Лобанов "Фотограмметрия" 1984 год. Глава 9. Анализ одиночного снимка. Как раз на эту тему

 

В 23.04.2018 at 22:26, mrgloom сказал:

Большое спасибо за ответы! А как считаете, нужно ли проводить калибровку камеры для данной задачи? И если да, то как выполняется калибровка? С помощью шахматной доски? (Пока особо не изучал информацию по поводу калибровки, поэтому вообще не понимаю все ли калибровки выполняются с помощью шахматной доски, и зачем вообще нужно эта самая доска:D)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зависит от того какая точность нужна, т.е. от того насколько большая дисторсия у камеры.

https://en.wikipedia.org/wiki/Distortion_(optics)

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Одназначно надо.  Дисторсия она всегда большая.   Да и углы тоже уплывут из-за афинных преобразований. Не говоря про перспективу. 

В opencv заложенно решение только для шахмотной доски. 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответы! Я вроде бы сделал калибровку, получил коэффициент искажения и даже, наверное, применил их (наверняка не понял как это делается, но вроде сделал), получилась новая картинка. Как я могу проверить: эта новая картинка без эффекта дисторсии получилась или всё та же косячная? Глазу не очень заметно, непонятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделайте снимок на котором есть вретиакальный и горизонтальные прямые, та-же шахматная доска подойдет. И проверьте являются ли эти линии прямыми на  изображении ,  можно в любом графическом редакторе начертить линию между двумя крайними точками и посмотреть совпадет ли она с изображением. Если искоренения есть то линии будут  кривыми. 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, iskees сказал:

Сделайте снимок на котором есть вретиакальный и горизонтальные прямые, та-же шахматная доска подойдет. И проверьте являются ли эти линии прямыми на  изображении ,  можно в любом графическом редакторе начертить линию между двумя крайними точками и посмотреть совпадет ли она с изображением. Если искоренения есть то линии будут  кривыми. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Кроме того, на дорогих фиксах ее практически может и не быть, и сама камера может ее исправлять на "борту".

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 14.05.2018 at 14:53, iskees сказал:

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

Кроме того, на дорогих фиксах ее практически может и не быть, и сама камера может ее исправлять на "борту".

В том-то и дело, что камера за 100 рублей дешёвая, а не крутая и качественная. Вот две фотографии до корректировки дисторсии и после. Как считаете успешно ли прошла калибровка? Первая фото (сверху) - до, вторая (ниже) - после.

without.jpg

with.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В итоге то как размер посчитать? в предложенной ссылке выше говорится просто о масштабе (пикселей на реальный размер)... но его же можно посчитать если объект есть на фото и мы введем его реальный размер.. типа эталон будет...

или вообще можно использовать реперные метки и тоже будет как эталон..

как это реализовать только вот вопрос

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, Fakeoke сказал:

В итоге то как размер посчитать? в предложенной ссылке выше говорится просто о масштабе (пикселей на реальный размер)... но его же можно посчитать если объект есть на фото и мы введем его реальный размер.. типа эталон будет...

или вообще можно использовать реперные метки и тоже будет как эталон..

как это реализовать только вот вопрос

В примере выше рассказывается https://www.pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv/ .
Да, этот способ и заключается в этом. Что на рассматриваемом изображении всегда будет какой-то эталонный предмет, длину\ширину которого мы заранее знаем в миллиметрах, например. При этом расстояние от камеры до искомого объекта тоже всегда постоянное будет. Если на изображении присутствует объект, размеры которого мы заранее знаем (померяли линейкой), то можно вычислить любой размер (неизвестный нам) объекта, который также присутствует на изображении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если положение камеры и 'стола' фиксированное то достаточно 1 раз 'откалибровать масштаб' по эталону.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это все понятно.. но там кода нет как это сделать)

меня именно код и интересует...)

я хочу чтобы при тряске там какой то итд масштаб этот высчитывался. т.е эталон был на самом изображении...

по идее то я понял как. если например там прямоугольник положить как эталон вписать ему контур прямоугольника и вот размеры будут... только на плюсах че-то не получается...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×