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

Поиск стекла на фотографии

Recommended Posts

Добрый день!

Я - практически новичок в OpenCV, хотя в математике разбираюсь неплохо. Столкнулся с задачей: нужно найти на фотографии стекло (фотография прилагается) и определить координаты четырех его углов. Фотография сделана при, скорее всего, неправильном освещении. Пробовал сделать это через поиск линий HoughLines, а так же через углы методом Харриса. Ни в первом, ни во втором случаях не удалось подобрать правильные параметры для поиска (пороговые значения, углы). Существуют ли типичные методы для подобных задач, или же для каждой задачи требуется свой подход? Не хотелось бы изобретать велосипед :)

 

Спасибо.

image.thumb.png.a972f0511e94183666bcbbb46f4539b2.png

Share this post


Link to post
Share on other sites

Стенд всегда такой, освещение? Короче, среда управляемая нами?

Share this post


Link to post
Share on other sites

Фото выглядит так, будто искать надо прямоугольник, а не стекло.

Share this post


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

Стенд всегда такой, освещение? Короче, среда управляемая нами?

Среда полностью управляемая, сейчас заказываются светильники, но как их расположить, пока непонятно. Стенд тестовый, в реальности стёкла подаются из ящика. 

9 часов назад, erly сказал:

Фото выглядит так, будто искать надо прямоугольник, а не стекло.

Ну, стекло, действительно, прямоугольное. И даже размеры разных стёкол известны. Единственное что, они могут подаваться в разном порядке. Сначала такого размера, потом - другого. Вторая задача - определить размеры стекла по фотографии (когда оно уже найдено), но я не уверен вообще, возможно ли это. Матрица внутренних параметров камеры получена из калибровки, находить расстояния до объектов и их координаты я умею, но для этого я заранее знал размеры. Получается замкнутый круг.

Share this post


Link to post
Share on other sites

Пока что лучшее, что я нашел, выглядит так. Сначала я применил маску размером с некий прямоугольник (область, в которой точно будет стоять ящик). Затем с помощью функции

threshold 

отсеял множество маленьких линий, оставив большие.

image.thumb.png.09ffe7a1f13654c1a7c4f06e10f4f5b1.png

Ну а потом с помощью 

HoughLinesP

, играя с параметрами, нарисовал наиболее подходящие линии. 

image.thumb.png.bb20348ddcf47b3227166784b8183bcc.png

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Спасибо за ответ. Думал насчет наложения. Дело в том, что в этом цеху большие окна, соответственно, сильно меняется освещение в зависимости от времени суток. Это сильно скажется на результате? 

Share this post


Link to post
Share on other sites

Если провести бинаризацию, может и не сильно, надо пробовать. 

У меня этот метод давал неплохой результат: https://stackoverflow.com/questions/22122309/opencv-adaptive-threshold-ocr/22127181#22127181

Еще думается если найти фазовый сдвиг, то он тоже даст границу стекла.

Можно после бинаризации наложить изображения по И темные линии станут толще, затем инверсия, эрозия, и найти convex hull.

  • Like 1

Share this post


Link to post
Share on other sites

Я бы больше внимания уделил именно освещению, что бы отделить стекло от фона. Как вариант можно поставить сверху/снизу длинный узкий прожектор которые светит строго вертикально и цвет его должен быть отличным от фона (зеленый). Заносите стекло вертикально под прожектор и горизонтальные грани стекла должны засветится цветом прожектора. В итоге имеем границы стекла + так как прожектор узкий имеем и примерную область в которой стекло расположено, что поможет в расчете размеров.

  • Like 1

Share this post


Link to post
Share on other sites

Всем большое спасибо за ответы, буду пробовать, как только нормальное освещение будет готово.

Share this post


Link to post
Share on other sites

Нейросетью можно найти даже на таких картинках. Только для обучения нужна хотя бы сотня картинок.
Помню как-то нужно было искать углы стелажей при разном свете на чб и цветных картинках (на форуме ниже есть описание, если поискать). 97% точности давала сеточка.

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.

×