У меня есть изображения, которые содержат прозрачное прямоугольное наложение, подобное следующим изображениям: Изображение1 Изображение2 . Моя цель - определить, существуют ли эти прямоугольники (местоположение не имеет значения). Эти поля всегда будут иметь края, параллельные сторонам изображения.
Предположения:
- Теперь известна передаточная функция рисования прозрачных прямоугольников
- Стороны прямоугольников также будут параллельны изображению
Попытка решения 1: обнаружение цвета
До сих пор я пробовал распознавать цвета с помощью cv.threshold
, а также использовать полосовые фильтры с cv2.inRange()
в нескольких цветовых пространствах (HSV, LUV, XYZ и т. Д.). Проблема с распознаванием цвета заключается в том, что я также улавливаю слишком много шума, чтобы эффективно настроить пиксели для прозрачной области. Я попытался наложить маски, используя cv2.bitwiseAnd
, но все еще не могу отрегулировать шум до незначительного состояния. Я пытался выделить только большие группы пикселей с помощью морфологических преобразований, но это все равно не удалось.
Попытка решения 2: Обнаружение края + Проверка края
Моя вторая попытка определить поле включала применение cv2.bilateralFilter
и генерацию жестких линий с помощью cv2.Canny
, cv2.HoughLinesP
. Хотя я обнаруживаю значительное количество ребер, связанных с прозрачной рамкой, я также получаю много разных ребер.
Чтобы отфильтровать ложные края, я беру каждый сегмент линии и проверяю несколько образцов пикселей слева и справа. Применяя что-то похожее на то, что я считаю передаточной функцией (cv2.addWeighted
), я проверил, могу ли я воспроизвести подобные значения. К сожалению, это также не работает достаточно хорошо, чтобы отличить ребра от прозрачного прямоугольника от «реальных ребер». Результат от обнаружения края
Любые мысли о том, как я могу обнаружить эти ящики, очень ценятся!