Разница между адаптивным порогом и нормальным порогом в 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]()
Это выглядит как обнаружение края, а не порог. То, что я ожидал, было черно-белым. Поэтому мой вопрос: почему это похоже на обнаружение границ, а не на порог.
спасибо заранее
Ответы
Ответ 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), он работает как обнаружение края. Как только я сделал это больше, он работал, как ожидалось. Разумеется, "правильный" размер будет зависеть от разрешения вашего изображения и размера функций, которые вы ищете.