Я пытаюсь обнаружить белые прямоугольники на изображении в градациях серого, используя разные подходы: обнаружение контуров и преобразование Хафа. К сожалению, есть некоторые ограничения изображения, которое я обрабатываю, т.е.
Для подхода контуров контуры некоторых изображений нарушены. Кроме того, изображение может содержать такие элементы, как прямоугольник (например, символ «D»). Я не уверен, что это хороший подход.
Я видел много статей / форумов, предлагающих использовать преобразование Хафа для обнаружения прямоугольника, как в следующем посте. К сожалению, я должен установить небольшое значение минимальной длины строки и увидел повторяющиеся строки. Я понятия не имею, как справиться с точками, упомянутыми выше (например, объединить все повторяющиеся линии и выбрать только одну линию для каждого ребра, как дифференцировать объекты с большей частью линий, но с небольшими дугами, такими как ‘D’), и как выделите квадрат с одним ребром, слитым с длинной прямой и т. д.).
Любые предложения приветствуются!
РЕДАКТИРОВАТЬ: Добавить несколько фотографий
Персонаж D
Прямоугольник с логотипом и края слиты с длинной прямой линией
Трапеция (с тенью наверху, образующая трапецию внизу)
Я хотел бы предложить вам попробовать двоичный порог (адаптивное или иное) на каждом изображении, это даст четкие линии для определения контура. Вы также можете разъедать / расширяются изображения для удаления шума (например, тонкие линии на вашем втором изображении)
Затем используйте обнаружение контуров и подсчитайте контуры, найдя самый большой объект на изображении с четырех сторон (это, вероятно, будет ваш объект).
Сделайте копию изображения, прежде чем использовать двоичный файл / эрозию, чтобы после того, как у вас появилась область интереса от обнаружения контура, вы можете обрезать копию изображения в этой области.
Извините, ссылки на примеры написаны на python, но я уверен, что как только вы поймете идею, перенести ее на C ++ будет легко.
Надеюсь это поможет.
РЕДАКТИРОВАТЬ
Просто попробовал описанный выше метод сам, установив порог каждого изображения, обнаружение контуров, а затем нарисовав ограничивающий прямоугольник вокруг наибольшего набора контуров.
Ниже смотрите результаты:
Ограничительная рамка вокруг наибольшего набора контуров
То же самое, нарисовано поверх оригинальных изображений