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

StackOverflow https://stackoverflow.com/questions/8315505

Вопрос

У меня есть этот серый видеопоток: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

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

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

Это было полезно?

Решение

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

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

    THRESH_BINARY

THRESH_BINARY

    THRESH_BINARY_INV

THRESH_BINARY_INV

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

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

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

Так что это звучит так, как адаптивированная решалка вычисляет пороговый пиксель за пикселем, тогда как порог вычисляет его для всего изображения-оно измеряет все изображение одним правителем, тогда как другой делает новый «правитель» для каждого пикселя.

Другие советы

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

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), он работает как обнаружение краев. Как только я сделал это больше, это сработало, как и ожидалось. Конечно, «правильный» размер будет зависеть от разрешения вашего изображения и размера функций, на которые вы смотрите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top