Разница между адаптивным и нормальным порогом в opencv - PullRequest
13 голосов
/ 29 ноября 2011

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

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

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

Ответы [ 2 ]

10 голосов
/ 29 ноября 2011

Adaptive Threshold работает как this :

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

    THRESH_BINARY

THRESH_BINARY

    THRESH_BINARY_INV

THRESH_BINARY_INV

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

Порог работает по-разному :

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

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

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

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

...