fedor_malashin 1 Жалоба Опубликовано October 8, 2019 Добрый день! Я - практически новичок в OpenCV, хотя в математике разбираюсь неплохо. Столкнулся с задачей: нужно найти на фотографии стекло (фотография прилагается) и определить координаты четырех его углов. Фотография сделана при, скорее всего, неправильном освещении. Пробовал сделать это через поиск линий HoughLines, а так же через углы методом Харриса. Ни в первом, ни во втором случаях не удалось подобрать правильные параметры для поиска (пороговые значения, углы). Существуют ли типичные методы для подобных задач, или же для каждой задачи требуется свой подход? Не хотелось бы изобретать велосипед Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 8, 2019 Стенд всегда такой, освещение? Короче, среда управляемая нами? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
erly 0 Жалоба Опубликовано October 8, 2019 Фото выглядит так, будто искать надо прямоугольник, а не стекло. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
fedor_malashin 1 Жалоба Опубликовано October 9, 2019 12 часа назад, Smorodov сказал: Стенд всегда такой, освещение? Короче, среда управляемая нами? Среда полностью управляемая, сейчас заказываются светильники, но как их расположить, пока непонятно. Стенд тестовый, в реальности стёкла подаются из ящика. 9 часов назад, erly сказал: Фото выглядит так, будто искать надо прямоугольник, а не стекло. Ну, стекло, действительно, прямоугольное. И даже размеры разных стёкол известны. Единственное что, они могут подаваться в разном порядке. Сначала такого размера, потом - другого. Вторая задача - определить размеры стекла по фотографии (когда оно уже найдено), но я не уверен вообще, возможно ли это. Матрица внутренних параметров камеры получена из калибровки, находить расстояния до объектов и их координаты я умею, но для этого я заранее знал размеры. Получается замкнутый круг. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
fedor_malashin 1 Жалоба Опубликовано October 9, 2019 Пока что лучшее, что я нашел, выглядит так. Сначала я применил маску размером с некий прямоугольник (область, в которой точно будет стоять ящик). Затем с помощью функции threshold отсеял множество маленьких линий, оставив большие. Ну а потом с помощью HoughLinesP , играя с параметрами, нарисовал наиболее подходящие линии. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 9, 2019 Можно попробовать сыграть на преломлении. Поясню. Если взять подложку с нарисованной сеткой, и сфоткать, затем поставить стекло и снова сфоткать. После этого наложить изображения и найти разницу. Конечно придется поэкспериментировать, но может сработать. По поводу размеров, вы же пишите что ряд фиксированный. Поставьте в соответствие каждому размеру площадь в пикселях. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
fedor_malashin 1 Жалоба Опубликовано October 9, 2019 Спасибо за ответ. Думал насчет наложения. Дело в том, что в этом цеху большие окна, соответственно, сильно меняется освещение в зависимости от времени суток. Это сильно скажется на результате? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 9, 2019 Если провести бинаризацию, может и не сильно, надо пробовать. У меня этот метод давал неплохой результат: https://stackoverflow.com/questions/22122309/opencv-adaptive-threshold-ocr/22127181#22127181 Еще думается если найти фазовый сдвиг, то он тоже даст границу стекла. Можно после бинаризации наложить изображения по И темные линии станут толще, затем инверсия, эрозия, и найти convex hull. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано October 9, 2019 Я бы больше внимания уделил именно освещению, что бы отделить стекло от фона. Как вариант можно поставить сверху/снизу длинный узкий прожектор которые светит строго вертикально и цвет его должен быть отличным от фона (зеленый). Заносите стекло вертикально под прожектор и горизонтальные грани стекла должны засветится цветом прожектора. В итоге имеем границы стекла + так как прожектор узкий имеем и примерную область в которой стекло расположено, что поможет в расчете размеров. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
fedor_malashin 1 Жалоба Опубликовано October 9, 2019 Всем большое спасибо за ответы, буду пробовать, как только нормальное освещение будет готово. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
idrua 8 Жалоба Опубликовано October 16, 2019 Нейросетью можно найти даже на таких картинках. Только для обучения нужна хотя бы сотня картинок. Помню как-то нужно было искать углы стелажей при разном свете на чб и цветных картинках (на форуме ниже есть описание, если поискать). 97% точности давала сеточка. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах