Как извлечь контур лицевой панели стиральной машины? - PullRequest
0 голосов
/ 28 мая 2019

Я ищу надежный способ извлечь контур передней панели стиральной машины. Или просто получите 4 угловых точки на передней панели. Я пробовал маскировку цвета, но не нашел стабильных результатов. Вот несколько примеров:

pic3 pic2 pic1

1 Ответ

2 голосов
/ 29 мая 2019

Три возможных варианта:

  1. Получите кучу изображений машин, вручную определите метку с надписью, где находится дверь, а затем обучите сверточную нейронную сеть для регрессии этих параметров вimage.

  2. Рассматривайте каждое изображение как отдельную задачу оптимизации, цель которой состоит в том, чтобы оценить параметры наилучшего прямоугольника, который наиболее вероятно соответствует лицевой панели.Таким образом, наша модель - theta = (p_1, p_2, p_3, p_4), четыре 2D расположения панели на изображении.Нам нужна энергетическая функция E для минимизации относительно theta (например, использование градиентного спуска с импульсом или RANSAC).Есть несколько терминов, которые вы можете использовать, как некоторые идеи:

    a.По крайней мере, некоторые из углов должны быть «угловыми»: запустите простой детектор углов и определите энергию E_corner, которая штрафует расстояние до ближайшего угла.

    b.По крайней мере, некоторые из ребер (например, между p_1 и p_2 или p_3) должны быть "подобными ребру": вычислите величину градиента изображения M = || \nabla I || и убедитесь, что по краю панели значенияM должно быть больше, используя энергию E_edge.Например, для x,y вдоль ребра пусть E_edge(x,y)=1/(1+M(x,y)) ( Надежные потери здесь, как правило, лучше).

    c.Используйте тот факт, что каждая дверь представляет собой проецируемый трехмерный прямоугольник: например, см. этот вопрос .Интересная идея состоит в том, чтобы начать с прямоугольника (представляющего панель) и вместо того, чтобы регрессировать p_i, вместо этого регрессировать параметры аффинного преобразования или даже преобразования перспективной проекции (хотя это требует глубины оценки алгоритма), который отображаетначальный прямоугольник в единицу на изображении.Затем вы можете упорядочить параметры оценочного преобразования, чтобы предотвратить вывод маловероятных преобразований.

    d.Используйте знания о том, что должно быть внутри прямоугольника.Например, учитывая четыре угла, вы можете определить эллипс, определяющий круглую дверь машины.Статистика внешнего вида в этом эллипсе должна быть несколько уникальной, равно как и грани ребер / изображения на границе двери;следовательно, вы можете определить энергетический термин, побуждающий модель выбирать углы, так чтобы внутри был темный эллиптический объект на белом фоне.

    В целом, этот подход похож на змей или модели активных контуров , что, возможно, стоит посмотреть на тебя, я думаю.Однако минимизирующие энергию змеи, как правило, не учитывают внутреннюю часть области, которую они окружают;следовательно, некоторый вариант функционала Мамфорда-Шаха может быть полезным дополнением (хотя обратите внимание, что плавность "области двери" не совсем желательна в вашем случае).

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

...