Как извлечь прямоугольный объект из изображения в Java

У меня есть фотография бумаги, которую я держу на своей веб-камере, и я хочу уменьшить область фотографии только до бумаги. Таким образом, моя программа OCR потенциально будет более точной и значительно более быстрой.

Пока что я предпринял пару шагов, чтобы изолировать бумагу от фона.

Во-первых, я использую обнаружение Canny Edge с высокими порогами. Это обеспечивает двухцветное представление краев моего изображения. На нем я вижу прямоугольник с закругленными углами среди некоторых других артефактов, которые на заднем плане имеют острые края.

Затем я использую преобразование Хафа, чтобы нарисовать векторы с более чем 100 точечными попаданиями в полярных координатах на черном фоне. Полученное изображение выглядит так:

Линии, нарисованные по самым длинным краям изображения

Видите эту большую (самую большую) почти прямоугольную фигуру прямо посередине? Это бумага, которую я держу. Мне нужно выделить эту трапецию как многоугольник или как-то иначе получить координаты его вершин.

Я могу использовать эти координаты на исходном изображении, чтобы изолировать PNG бумаги и ничего больше.

Я также был бы очень признателен, если бы вы могли дать ответы на любой из этих трех подвопросов.

-Как вы находите места пересечений этих линий на изображении?

-Как мне избавиться от любых линий, которые не образуют центральный трапециевидный многоугольник?

- С этими точками, есть ли что-нибудь лучше, чем выпуклый корпус, который позволил бы мне получить только трапециевидную / прямоугольную область изображения?

Вот еще один пример, в котором моя программа создала лучшее изображение:

0 ответов

Другие вопросы по тегам