Фильтр для шумного изображения с низкой контрастностью - PullRequest
0 голосов
/ 23 января 2020

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

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

Number with background's noise and low contrast

РЕДАКТИРОВАТЬ (ДОБАВЛЕННЫЕ ПЕРЕДАЧИ ИЗОБРАЖЕНИЙ)

enter image description here enter image description here

Ответы [ 2 ]

0 голосов
/ 03 апреля 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', [], [])
0 голосов
/ 23 января 2020

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

  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')

enter image description here

...