Подтвердить что ты не робот

Разница между адаптивным порогом и нормальным порогом в opencv

У меня этот серый поток видео: enter image description here

Гистограмма этого изображения:

enter image description here

Порог изображения:

  threshold( image, image, 150, 255, CV_THRESH_BINARY );

я получаю:

enter image description here

Что я ожидаю.

Когда я выполняю адаптивное пороговое значение с помощью:

adaptiveThreshold(image, image,255,ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY,15,-5);

я получаю:

enter image description here

Это выглядит как обнаружение края, а не порог. То, что я ожидал, было черно-белым. Поэтому мой вопрос: почему это похоже на обнаружение границ, а не на порог.

спасибо заранее

4b9b3361

Ответ 1

Адаптивный порог работает как this:

Функция преобразует изображение в оттенках серого в двоичное изображение в соответствии с к формулам:

    THRESH_BINARY

THRESH_BINARY

    THRESH_BINARY_INV

THRESH_BINARY_INV

где T (x, y) - порог, рассчитанный индивидуально для каждого пикселя.

Порог работает иначе:

Функция применяет пороговое значение фиксированного уровня к одноканальному массиву.

Итак, похоже, что adaptiveThreshold вычисляет пороговый пиксель за пикселем, тогда как порог вычисляет его для всего изображения - он измеряет все изображение одной линейкой, тогда как другой создает новую "линейку" для каждого пикселя.

Ответ 2

У меня была та же проблема, что и адаптивное пороговое значение для целей OCR. (извините, это Python не С++)

img = cv.LoadImage(sys.argv[1])
bwsrc = cv.CreateImage( cv.GetSize(img), cv.IPL_DEPTH_8U, 1)
bwdst = cv.CreateImage( cv.GetSize(img), cv.IPL_DEPTH_8U, 1)

cv.CvtColor(img, bwsrc, cv.CV_BGR2GRAY)
cv.AdaptiveThreshold(bwsrc, bwdst, 255.0, cv.CV_THRESH_BINARY, cv.CV_ADAPTIVE_THRESH_MEAN_C,11)
cv.ShowImage("threshhold", bwdst)
cv.WaitKey()

Последний параметр - это размер окрестности, используемой для вычисления порога для каждого пикселя. Если ваш район слишком мал (мой был 3), он работает как обнаружение края. Как только я сделал это больше, он работал, как ожидалось. Разумеется, "правильный" размер будет зависеть от разрешения вашего изображения и размера функций, которые вы ищете.