обнаружение низкоконтрастных линий на шумных фотографиях

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

  1. Я не могу надежно обнаружить линию с помощью алгоритма адаптивного порога или обнаружения краев из-за шумовой/темной сетки экрана. Размытие, кажется, немного помогает, но мне этого недостаточно, чтобы заставить его работать.

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

     img = cv2.imread("test.jpg")
     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
     gray=cv2.GaussianBlur(gray,(9,9),0)
     bin = cv2.adaptiveThreshold(gray2, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 33, 3)
     cv2.namedWindow('Test')
     cv2.imshow("Test", bin)
    

Я также экспериментировал с cv2.Canny и cv2.HoughLinesP, но без хороших результатов, так как темная сетка портит оба. Заранее спасибо!

РЕДАКТИРОВАТЬ: я полагаю, что локальная версия пороговой функции с THRESH_TRUNCATED или THRESH_TOZERO может помочь... отфильтровать сетку. и высококонтрастный

Поскольку у меня нет репутации для размещения фотографий, я добавил ссылки. Изображение с малоконтрастной линией:

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

Обнаружена линия:

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


person gspoosi    schedule 06.06.2013    source источник
comment
Не могли бы вы отредактировать свой вопрос и включить образец изображения?   -  person Bull    schedule 06.06.2013
comment
У меня нет представителя, но я загрузил их где-то еще и добавил ссылки.   -  person gspoosi    schedule 07.06.2013


Ответы (1)


Запустив Медианный фильтр в достаточно большом окне (скажем, 11x11), а затем вычтя среднюю (или немного меньшую) интенсивность изображения, вы облегчите обнаружение линии.

person Boyko Perfanov    schedule 07.06.2013
comment
вы имеете в виду глобальное среднее значение или среднее значение окна 11X11? - person gspoosi; 10.06.2013
comment
есть ли простые способы вычесть и установить все отрицательные на ноль? Мой цикл for очень медленный: S BilateralFiltering после слабого MedianFilter работает для фильтрации сетки ЖК-экрана. - person gspoosi; 10.06.2013
comment
Нет, я могу не торопиться :) - person gspoosi; 11.06.2013