2

Вот пример двоичных изображений, то есть в качестве ввода у нас есть изображениеByteArray с двумя возможными значениями: 0 и 255.Как уменьшить фоновый шум в двоичном изображении

Пример1: enter image description here

Пример2: enter image description here

Изображение содержит некоторый документ края на фоне.

Задача состоит в том, чтобы удалить, уменьшить количество фоновых пикселей с минимальным ударом на краю пикселей.

Вопрос в том, что существуют современные алгоритмы, методы для этого?

То, что я не ожидаю в качестве ответа: используйте гауссовское размытие, чтобы избавиться от фонового шума, используйте пороговый алгоритм (Canny, Sobel и т. Д.) Или используйте Hough (HINE линеаризация сходит с ума от такого шума независимо от того, что опции установлены)

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

Обновление: В качестве ввода у меня есть стандартное изображение RGB с документом (идентификатор лицензии водителя, чек, счет, кредитная карта, ...) на каком-то фоне. Основная задача - обнаружить края документа. Дальнейшие шаги довольно известны: оттенки серого, размытие, бинаризация Sobel, вероятностная вероятность, найти прямоугольник или трапецию (если форма трапеции найдена, то перейдите к перспективному преобразованию). На простом контрасте все работает отлично. Причина, по которой я спрашиваю о шумоподавлении, заключается в том, что мне приходится работать с тысячами фонов, а некоторые из них дают шум, независимо от того, какие опции используются. Шум вызовет дополнительные строки независимо от того, как настроен Hough, а дополнительные строки могут обмануть последующую логику и серьезно повлиять на производительность. (Он реализован в java-скрипте, без поддержки OpenCV или GPU).

+1

Это черное/белое изображение вашего входного изображения? Если это так, трудно улучшить качество изображения. –

+0

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

+0

В качестве входного сигнала у меня есть стандартное изображение RGB, изображения, приведенные выше, являются результатом обработки оттенков серого, размытия и Sobel. –

ответ

0

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

Do заливка сегментация на основе

  1. изображения сканирования набора пикселей (color=255)
  2. для каждого пикселя набора создают маску/карту ее области

    Просто заполните заливку заданными пикселями с 4 или 8 соседними соединениями и подсчитайте, сколько пикселей вы заполнили.

  3. для каждой заполненной области вычислить ее ограничивающий прямоугольник

  4. обнаружить линии края

    • краевые линии имеют прямоугольную ограничительную рамку, чтобы проверить его соотношение сторон, если близко к площади, то это не краевая линия
    • также слишком малая ограничивающая рамка означает не линию кромки
    • слишком маленькая заливка ed пикселей по сравнению с ограничивающей коробкой большего размера стороны, тогда область также не является краевой линией
    • Вы можете сделать это более надежным, если вы отредактируете линию для заданных пикселей каждой области и вычислите среднее расстояние между регрессированной линией и каждым заданным пикселем , Если слишком высокая область не край линии ...
  5. Перекрасить не край линии областей к черным

    так как вычитать маску с изображения или наводнения наполняется снова черным ...

[ноты]

Иногда этапу # 5 может испортить внутреннюю часть документа. В этом случае вы не перекрашиваете что-либо, вместо этого вы помните все регрессированные линии для краевых областей. Затем после завершения всего процесса объединяются все строки, которые параллельны и близки к одной и той же оси (бесконечная линия), которые должны уменьшаться до 4 больших линий, определяющих прямоугольник документа. Итак, теперь заполните черным все внешние пиксели (по геометрическому подходу)

0

Для таких задач вы обычно тщательно изучаете входные данные и пытаетесь выяснить, какие сигналы вы можете использовать. Но, к сожалению, вы предоставили только один пример, который делает этот подход довольно бесполезным. Кроме того, это представление не очень удобно работать - вы сделали некоторую предварительную обработку, или это то, что вы получаете в качестве входных данных? В первом случае вы можете получить лучший совет, если сможете показать нам реальный вклад.

Далее, если ваша цель - уменьшение шума, а не сегментация документа/фона - вы действительно ограничены в настройках. Подобно тому, что вы сказали, я попытался бы обнаружить связанные компоненты с интенсивностью 255 (вместо обнаружения контуров, которые могут быть менее надежными) и удалить их с небольшой площадью. В некоторых случаях это может быть неудачным.

Кроме того, на изображении, которое вы предоставили, вы можете использовать локальную статистику для подавления зон регулярного шума. Это приведет к уменьшению фонового помехи, если вы правильно выберите размер окрестности.

Но опять же, если вы делаете это для обнаружения документов - могут быть более надежные подходы.

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

Если вам нужно работать в разных условиях освещения, вы можете попытаться уравнять гистограмму или выполнить некоторую другую предварительную обработку, чтобы уменьшить изменение цвета, вызванное освещением.

+0

Я должен был написать больше контекста в вопросе, моя ошибка. В качестве ввода у меня есть стандартное изображение RGB с документом (например, идентификатор водительского удостоверения) на каком-то фоне. Основная задача - обнаружить края документа. Дальнейшие шаги довольно известны: оттенки серого, размытие, бинаризация Sobel, вероятностная вероятность, найти прямоугольник или трапецию (если форма трапеции найдена, то перейдите к перспективному преобразованию). На простом контрасте все работает отлично. Причина, по которой я спрашиваю о шумоподавлении, заключается в том, что мне приходится работать с тысячами фонов, а некоторые из них дают шум, независимо от того, какие опции используются. –

+0

Шум вызовет дополнительные строки независимо от того, как настроен Hough, а дополнительные строки могут обмануть последующую логику и серьезно повлиять на производительность. (Он реализован в java-скрипте, без поддержки OpenCV или GPU).Если я пропустил что-л., И вы знаете более эффективные и надежные подходы, которые не будут затронуты фоном, пожалуйста, дайте мне знать. –

+0

Отредактировано ответ – alexisrozhkov

0

Строго отвечая на вопрос, для бинарного изображения (то есть после того, как вред, как было сделано):

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

До сих пор я не вижу лучшего способа, чем трассировать все цепочки 8-связных пикселей, например, с помощью алгоритма, следующего по контуру, и обнаруживать прямые участки, например, путем упрощения Дугласа-Пеккера.

Поскольку шум находится только на внешней стороне карты, контур капель будет иметь по крайней мере одну «чистую» секцию. Храните разделы, которые достаточно длинные.

Это может также разрушить изогнутые углы, и на самом деле вам следует искать «гладкие» дорожки, которые достаточно длинные.

К сожалению, я не могу рекомендовать какой-либо конкретный алгоритм для решения этой проблемы. Вероятно, он должен основываться на графическом анализе, объединенном с геометрией (перечисление длинных путей на графике и проверка локальной/глобальной кривизны).

Насколько я знаю (после чтения тысяч статей), это нигде не рассматривается в литературе.

1

Это трудно понять, будет ли этот подход работать со всеми изображениями, так как вы только при условии, один, но обнаружение Хаф линии с ImageMagick и этих параметров в терминале командной строки производит это:

convert card.jpg            \ 
    \(+clone -background none -fill red -stroke red   \ 
     -strokewidth 2 -hough-lines 49x49+100 -write lines.mvg \ 
    \) -composite hough.png 

enter image description here

и файл lines.mvg содержит 4 строки следующим образом:

# Hough line transform: 49x49+100 
viewbox 0 0 1024 765 
line 168.14,0 141.425,765 # 215 
line 0,155.493 1024,191.252 # 226 
line 0,653.606 1024,671.48 # 266 
line 940.741,0 927.388,765 # 158 

ImageMagick является установка на большинстве дистрибутивов Linux и доступен для OSX и Windows от here.

+0

Да, вы правы, для определенного изображения почти всегда можно задавать параметры Hough для нахождения краевых линий. Но параметры, оптимальные в одном случае (case = background, тип документа, его положение, ориентация, условия освещения, угол наклона, ...), могут не содержать нужных строк или дополнительных строк в другом. Итак, есть 2 варианта: Установите параметры Hough динамически в зависимости от входного изображения (что очень сложно и эмпирически). Задайте статические параметры Hough, действующие в большинстве случаев, и для сложных фойтов, прежде чем использовать Hough, уменьшите шум. –

0

Ни один из предыдущих ответов не будет работать, единственное, что может работать здесь, - это фильтр blob, отфильтровать его так, чтобы капли ниже определенного размера удалялись.

Смежные вопросы