Обнаружение полупрозрачных прямоугольных наложений на изображения - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть изображения, которые содержат прозрачное прямоугольное наложение, подобное следующим изображениям: Изображение1 Изображение2 . Моя цель - определить, существуют ли эти прямоугольники (местоположение не имеет значения). Эти поля всегда будут иметь края, параллельные сторонам изображения.

Предположения:

  • Теперь известна передаточная функция рисования прозрачных прямоугольников
  • Стороны прямоугольников также будут параллельны изображению

Попытка решения 1: обнаружение цвета

До сих пор я пробовал распознавать цвета с помощью cv.threshold, а также использовать полосовые фильтры с cv2.inRange() в нескольких цветовых пространствах (HSV, LUV, XYZ и т. Д.). Проблема с распознаванием цвета заключается в том, что я также улавливаю слишком много шума, чтобы эффективно настроить пиксели для прозрачной области. Я попытался наложить маски, используя cv2.bitwiseAnd, но все еще не могу отрегулировать шум до незначительного состояния. Я пытался выделить только большие группы пикселей с помощью морфологических преобразований, но это все равно не удалось.

Попытка решения 2: Обнаружение края + Проверка края

Моя вторая попытка определить поле включала применение cv2.bilateralFilter и генерацию жестких линий с помощью cv2.Canny, cv2.HoughLinesP. Хотя я обнаруживаю значительное количество ребер, связанных с прозрачной рамкой, я также получаю много разных ребер.

Чтобы отфильтровать ложные края, я беру каждый сегмент линии и проверяю несколько образцов пикселей слева и справа. Применяя что-то похожее на то, что я считаю передаточной функцией (cv2.addWeighted), я проверил, могу ли я воспроизвести подобные значения. К сожалению, это также не работает достаточно хорошо, чтобы отличить ребра от прозрачного прямоугольника от «реальных ребер». Результат от обнаружения края

Любые мысли о том, как я могу обнаружить эти ящики, очень ценятся!

...