Jump to content
Compvision.ru
Sign in to follow this  
ColaClassic

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

Recommended Posts

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

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


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

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

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites
В 19.04.2018 at 00:20, iskees сказал:

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites
1 час назад, iskees сказал:

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

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

Share this post


Link to post
Share on other sites

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

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

  • Like 1

Share this post


Link to post
Share on other sites
В 14.05.2018 at 14:53, iskees сказал:

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

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

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

without.jpg

with.jpg

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
7 часов назад, Fakeoke сказал:

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×