Фильтр для шумного изображения с низкой контрастностью

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

Номер с фоновым шумом и низкой контрастностью:

Число с фоновым шумом и низкой контрастностью

РЕДАКТИРОВАТЬ (ДОБАВЛЕНЫ ПЕРЕЭКСПОНИРОВАННЫЕ ИЗОБРАЖЕНИЯ)

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


person Bartek    schedule 23.01.2020    source источник
comment
Буквы/цифры всегда набраны одним и тем же шрифтом и имеют одинаковый размер - или вы можете знать это заранее?   -  person Mark Setchell    schedule 23.01.2020
comment
Они одного размера. Букв нет, только цифры от 0 до 16.   -  person Bartek    schedule 23.01.2020
comment
Вы можете сделать приобретение снова или у вас есть только изображения для работы?   -  person Vladimir Perković    schedule 23.01.2020
comment
Цифры всегда одним шрифтом?   -  person Mark Setchell    schedule 23.01.2020
comment
Цифры всегда на одном шрифте.   -  person Bartek    schedule 24.01.2020
comment
В этом случае вам может повезти с сопоставлением шаблонов.   -  person Mark Setchell    schedule 24.01.2020


Ответы (2)


Если вы можете снова получить изображение, есть несколько вариантов:

  1. Попробуйте переэкспонировать изображение, что может положительно сказаться на отделении номера от фона. Я только что написал об этом пост: https://www.linkedin.com/pulse/making-overexposure-work-you-part-i-vladimir-perkovic

  2. Поскольку у вас есть тег Halcon, я предполагаю, что у вас есть доступ к Halcon. Взгляните на пример ocr_embossed_photometric_stereo.hdev, который показывает, как читать тисненые буквы, используя свет с разных направлений.

В случае, если вам нужно работать только с существующими изображениями, лучше всего использовать Максимально стабильные экстремальные области (MSER) ​​в Halcon:

rgb1_to_gray (Image, GrayImage)
segment_image_mser (GrayImage, MSERDark, MSERLight, 'dark', 600, 60000, 1, 'may_touch_border', 'false')

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

person Vladimir Perković    schedule 23.01.2020
comment
Спасибо за ваш ответ. Я попытался переэкспонировать снимок. У меня пропал шум на фоне, но края цифры плохо видны. Я должен сделать больше снимков с другими цифрами. Я также попробую использовать и другие молнии, потому что сейчас у меня коаксиал без поляризатора. Я буду использовать полосу света с поляризатором и поляризационным фильтром для камеры. Я никогда не пытаюсь использовать фотометрическое стерео — это тоже стоило бы выяснить, но для этого мне нужно использовать больше света — у меня есть HDevelop. - person Bartek; 24.01.2020

На самом деле разрешение этих общих изображений очень низкое (почти 190x160). Если разрешение реальных изображений выше, чем у этих изображений, вы можете получить лучшие результаты. Я пробовал некоторые коды на изображениях. Я нашел цифры как "6" и "&".

Скриншот здесь: https://drive.google.com/open?id=1I1s79hwcon8IdxC6peRxMbaB4I2taNFr

Код здесь:

dev_get_window (WindowHandle)
set_display_font (WindowHandle, 18, 'mono', 'true', 'false')

**reading image
read_image (Pnk9h, '/home/emin/Desktop/pNk9h.png')
get_image_size (Pnk9h, Width, Height)

**bluring image but preserve the edges
bilateral_filter (Pnk9h, Pnk9h, ImageBilateral, 9, 10, [], [])

**sharpening image
emphasize (ImageBilateral, ImageEmphasize, 7, 7, 5)

**processes about finding digits
var_threshold (ImageEmphasize, Region, 150, 150, 0.2, 2, 'dark')
var_threshold (ImageEmphasize, Region2, 150, 150, 0.2,5, 'light')
fill_up (Region, RegionFillUp)
difference (RegionFillUp, Region, RegionDifference)
opening_circle (RegionFillUp, RegionOpening, 3.5)
connection (RegionOpening, ConnectedRegions)
sort_region (ConnectedRegions, SortedRegions, 'first_point', 'true', 'column')
select_shape (SortedRegions, SelectedRegions, ['area','row','row1','row2'], 'and', [150,Height/2-20,10,0], [99999,Height/2+20,Height,Height-10])

smallest_rectangle1 (SelectedRegions, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
intersection (Rectangle, Region, RegionIntersection)
opening_circle (RegionIntersection, RegionOpening1, 2)
area_center (RegionOpening1, Area, Row, Column)
union1 (RegionOpening1, RegionUnion)

**painting image for reading robustly
paint_region (RegionUnion, ImageEmphasize, ImageResult, [0,0,0], 'fill')
complement (RegionUnion, RegionComplement)
paint_region (RegionComplement, ImageResult, ImageResult, [255,255,255], 'fill')

**reading digits
read_ocr_class_cnn ('Universal_0-9+_NoRej.occ', OCRHandle3)
do_ocr_multi_class_cnn (SelectedRegions, ImageResult, OCRHandle3, Class3, Confidence3)
dev_disp_text (Class3, 'image', Row2+10, Column2-50, 'blue', [], [])
person Muhammed Emin BAĞDİGEN    schedule 02.04.2020