Лабораторная работа по курсу "Signal processing and interpretation"
На вход подается фотография нескольких предметов. Предметы расположены на горизонтальной поверхности. Также на фотографии слева от предметов расположен белый лист бумаги, на котором нарисован многоугольник. Необходимо по поданной на вход фотографии определить, можно ли расположить одновременно все эти предметы на плоскости так, чтобы они поместились (границы предметов располагаются внутри границ многоугольника и не имеют пересечений с ними) в многоугольнике. Предметы и горизонтальная поверхность (фон), которые могут оказаться на фотографии, заранее известны
Ввод: картинка предметов с многоугольником в формате jpg без сжатия
Вывод: ответ 1 \ 0 в текстовый файл answer_<имя поданной картинки на вход>.txt
- Фотографии сделаны с одного устройства
- При одинаковом освещении
- Предметы и поверхность должны быть равномерно и хорошо освещены - отсутствие пересвеченных и серо-черных областей
- Фотография без цветовой коррекции
- Без сжатия
- На фотографии нет лишних предметов, кроме тех, которые заранее были известны
- Фотография сделана под прямым углом к нормали поверхности (возможны небольшие отклонения +- 5°)
- Листы с нарисованным многоугольником и предметы не пересекаются и не имеют общих границ (расстояние не менее 2 см между границ)
- Края листов бумаги на фото хорошо видны и не сливаются с фоном
- Горизонтальная (без выпуклостей и впадин)
- Однородная (без сильно выделяющихся объектов: узоров, пятен)
- Одна для всех фотографий
- Предметы располагаются на поверхности
- Предметы хорошо различимы с поверхностью (границы предметов не сливаются с ней)
- Не перекрывают друг друга
- Не имеют общих границ (расстояние не менее 1 см между границ)
- На фото располагаются целиком (все границы видны)
- Тень от предметов не должна быть слишком интенсивной. Различимость предметов не должна нарушаться (см. примеры входных фотографий)
- Многоугольник нарисован на отдельном белом чистом листе бумаги
- Лист с нарисованным многоугольником располагается слева от предметов
- Многоугольник задается фигурой, нарисованной черным маркером
- Толщина нарисованной линии не менее 5мм и не более 10мм
- Расстояние между линиями \ вершинами многоугольника и границами листа должно быть не менее 1 см
- На изображении находим контуры бумаги и маску многоугольника на ней
- Для нахождения маски многоугольника находим его контуры и минимальный содержащий их прямоугольник. Значения внутри контуров и сами контуры заполняем значением False, область вне многоугольника - True
- Находим область с объектами - область расположенная справа от контуров бумаги
- Находим общую маску всех предметов на изображении
- Распознаем объекты от фона, используя его цветовые координаты в hsv представлении
- Избавляемся от артефактов - шумов и полостей внутри объектов
- Используя бинарную морфологию получаем маску всех предметов на изображении
- Находим маску каждого отдельного предмета и его площадь
- Находим области связанных пикселей на найденной раннее маске
- Отделяем каждую такую область от общей маски - находим маску каждого отдельного объекта. Маска каждого предмета представлена значениями True, область вне объекта - False
- Обрезаем маску предмета минимальным содержащим ее прямоугольником
- Находим площадь маски предмета как количество точек со значением True
- Параллельным переносом каждого объекта убеждаемся, что весь набор объектов (не) поместится в области многоугольника
- Сортируем маски объектов по их площади в убывающем порядке
- Пытаемся последовательно разместить каждый объект в области многоугольника
- Маска многоугольника имеет значения False, область вне маски - True
- Маска объекта имеет значения True, область вне объекта - False
- Используя битовую операцию - AND находим области предметов, которые выходят за маску многоугольника или накладываются на уже расположенные объекты. Если площадь таких областей равна нулю - располагаем предмет
- Используя для этого битовую операцию - XOR