удаление шума в двоичном изображении с помощью openCV - PullRequest
8 голосов
/ 17 февраля 2012

Я прочитал видео в Visual Studio с использованием openCV и преобразовал его в оттенки серого, а затем использовал функцию CV_THRESH_BINARY, чтобы преобразовать его в двоичное изображение.Однако в рамах есть дыры и шум.Какой простой способ удалить шум или дыры?Я прочитал о функциях Erode и Dlate в openCV, но я не очень понимаю, как их использоватьэто мой код до сих пор.Если кто-нибудь может показать мне, как включить шумоподавление в мой код, это будет с благодарностью.

Ответы [ 2 ]

9 голосов
/ 17 февраля 2012

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Трудно дать хороший ответ, потому что вы предоставили очень мало информации. Если вы разместите свое изображение до и после бинаризации, это будет намного проще. Однако я постараюсь дать несколько советов.

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

cv::threshold(gray_frame, gray_frame, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

Это автоматически рассчитает пороговое значение. Если вы не можете найти хорошее значение порогового значения, попробуйте некоторые адаптивные алгоритмы порогового значения, opencv имеет функцию adaptiveThreshold (), но это не так хорошо.

Если отверстия и шум довольно маленькие (по несколько пикселей каждая), вы можете попробовать некоторые из следующих действий:

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

  • Среднее размытие ПОСЛЕ того, как вы выполняете настройку порога. Он может удалить небольшой шум, как черный, так и белый, при этом сохраняя цвета (изображение будет по-прежнему двоичным) и, с возможными небольшими ошибками, формы. Применение медианного размытия ПЕРЕД бинаризацией также может помочь уменьшить небольшой шум.

1 голос
/ 17 февраля 2012

Вы можете попробовать использовать функцию Smooth с CV_MEDIAN перед выполнением порога.

...