Удаление шумных пикселей с помощью opencv

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

например, предположим, что приведенные ниже изображения предоставляются как i/p для функции: input image 1

Входное изображение 2

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

Поэтому, если кто-то может предложить возможный способ его достижения, он будет высоко оценен.


person Koustav    schedule 02.07.2012    source источник
comment
Текст также выглядит как шум. См. Обучение на основе данных на первом изображении.   -  person Abid Rahman K    schedule 02.07.2012
comment
Да, я знаю. На самом деле не требуется и обучения на основе данных. Это просто цвет внешней границы. На более поздних этапах возможно обучение на основе данных. Так что на данный момент этот конкретный фрагмент текста также можно рассматривать как шум. Фактически на первой картинке более или менее все должно быть устранено. Во втором случае горизонтальное обучение на основе данных полезно и соответствует нашим требованиям.   -  person Koustav    schedule 02.07.2012
comment
эрозия или расширение, открытие, закрытие? вы пробовали что-то из этого?   -  person Seçkin Savaşçı    schedule 02.07.2012
comment
Я уже пробовал расширение эрозии, но в этом случае мой текст также искажается. Также я попробовал Медианный фильтр. Но и в этом фактические тексты становятся слишком размытыми.   -  person Koustav    schedule 02.07.2012
comment
Просто наивное предположение: буквы выровнены, а строки текста почти представляют собой голые коды. Дело не в вашем шуме) Можете ли вы использовать эти функции?   -  person Quentin Geissmann    schedule 03.07.2012


Ответы (1)


Хорошо, извините, но это не в c и не использует opencv, однако я уверен, что маркировка должна быть возможна в opencv, просто я еще не использовал ее... так что это может помочь... В основном идея такова :

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

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

Во всяком случае, код:

import scipy
from scipy import ndimage

im = scipy.misc.imread('learning2.png',flatten=1)
#threshold image, so its binary, then invert (`label` needs this):
im[im>100]=255
im[im<=100]=0
im = 255 - im
#label the image:
blobs, number_of_blobs = ndimage.label(im)
#remove all labelled blobs that are outside of our size constraints:
for i in xrange(number_of_blobs):
    if blobs[blobs==i].size < 40 or blobs[blobs==i].size>150:
        im[blobs==i] = 0
scipy.misc.imsave('out.png', im)

полученные результаты:

введите здесь описание изображениявведите здесь описание изображения

person fraxel    schedule 02.07.2012