OpenCV - Как устранить дефекты выпуклости в кулачковом сканере? - PullRequest
1 голос
/ 09 февраля 2020

Я попал в беду, найдя алгоритм для удаления выпуклости моих фотографий. Как видите, фотографии взяты со страниц книг, и я хочу убрать выпуклость. Мой вопрос похож на this , но у меня есть только границы страниц в качестве входных данных, и у меня нет сетки и я не могу найти с помощью алгоритмов обработки. enter image description here

Я хочу вывести в качестве правильного на фотографии ниже. enter image description here

Очевидно, что первое, что приходит на ум, - это трансформация перспективы. Однако, как видите, результат не обещает: enter image description here

1 Ответ

2 голосов
/ 11 февраля 2020

Вот возможный конвейер для решения вашей проблемы. Основная идея состоит в том, чтобы идентифицировать текст, создать супер-блоб с некоторой морфологией, найти 4 угла этого супер-блоба и направить точки в перспективный «неумелый» (или выпрямительный, или любой другой wi sh для вызова этого метода коррекции перспективы).

Начните с преобразования изображения в оттенки серого и примените к нему адаптивный порог . Попробуйте методы Gaussian или Mean с параметрами, которые лучше соответствуют вашим тестам. Вот результат, который я получаю после игры со значениями для бита:

enter image description here

Теперь идея состоит в том, чтобы выделить только текст . Решение, которое я применил: получи самые большие пятна и вычти их из исходного изображения. Вам понадобится метод для расчета площади каждого двоичного двоичного объекта. Проверьте этот предыдущий пост, чтобы узнать, как его реализовать.

Это самые большие капли с изображения:

enter image description here

Вычтите самые большие капли из исходного изображения. Вот результат:

enter image description here

Как видите, текст почти изолирован. Позвольте мне очистить маленькие кусочки пикселей, применяя снова фильтр области. На этот раз для устранения мелких капель. Вот результат:

enter image description here

Очень хорошо, некоторые символы теряются во время операции, но это нормально. Нам нужен хороший непрерывный блок текста , потому что мы собираемся расширить черт возьми. Я попытался применить прямоугольный angular структурирующий элемент с размерами 5 и 5 Op итераций. Удалите вывод с еще 5 итерациями после этого, так что в итоге вы получили этот красивый - изолированный - супер BLOB-объект, которым был текст:

enter image description here

Проверьте это. 3 маркера, которые вы видите, являются центроидами самых больших пятен, которые я обнаружил на изображении. Нам нужно найти 4 угла супер-капли . Самое большое пятно на изображении - это то, что мы ищем. Я решил повторно использовать фильтр области и искать пятно с наибольшей площадью. Это изолированный супер-объект:

enter image description here

Отсюда операции довольно просты. Опять же, цель состоит в том, чтобы получить четыре угла этого шарика. Вы можете поместить прямоугольник или применить детектор краев с последующим преобразованием Хафа, чтобы получить прямые линии, которые следуют за гранями супер-капли.

Я решил применить Детектор краев Canny Edge с последующим преобразование Хафа . Конечно, я настроил преобразование, чтобы отфильтровать только возможные линии, которые меня интересуют - прямые линии выше определенной длины. Это результат обнаружения линии:

enter image description here

На изображении отображается дополнительная информация. Маркеры, которые вы видите (красный и желтый), являются начальными / конечными точками линий. Моя идея заключалась в том, чтобы найти связку этих строк и вычислить среднее этих точек. Идея состоит в том, что у нас есть группа точек, которые разделены на «квадранты». Если мы вычислим среднее значение начальной и конечной точек каждой строки для квадранта , мы получим 4 средних значения - и это приблизительные значения углов супер-капли!

Я применил K-означает для начальной и конечной точек линий, но вы очень хорошо предпочитаете другие методы обработки. Это нормально. Мои приблизительные углы обозначены большими красными O-маркерами на изображении выше.

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

enter image description here

Некоторые предложения:

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

  2. Tune Hough Line Detection для получения более крупных линий. Моя текущая конфигурация обнаруживает несколько меньших линий, и это может помешать приближению угла.

  3. Я выбрал несколько надежный метод для вычисления 4 углов супер-объекта, который я лично использовал ранее ( Обнаружение кромки + Hough Line Transform + K-означает), но какую цепочку обработки вы выбрали для получения данных, полностью зависит от вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...