OpenCV - HoughCircles дает неточность 5-10% - PullRequest
0 голосов
/ 25 апреля 2018

Использование EmguCV с C #, MS VS 2015. Цель состоит в том, чтобы распознать черные круги на белом листе (с небольшим количеством пыли). Радиусы окружностей - около 80 пикселей, нет соседних кругов.

Учитывая IntPtr ptrImg содержит byte[] с изображением в градациях серого (8 бит на выборку, один канал).

Есть код для определения кругов:

Mat mat = new Mat(height, width, DepthType.Cv8U, 1, ptrImg, width);

CvInvoke.FastNlMeansDenoising(mat, mat, 20);

return CvInvoke.HoughCircles(mat, HoughType.Gradient, 2.0, 120.0, 90, 60, 60, 100);

На самом деле, некоторые из кругов обнаружены нормально, но у некоторых есть радиус, определяемый сбоями, отличается от реального радиуса примерно на 5-7 пикселей; обнаруженная граница совпадает с реальной границей на одной стороне и отсутствует на противоположной стороне.

top-right - radius more than real; bottol-left - radius less than real

Что я не прав? Может быть, мне нужно поиграть с dp, param1, param2? Что мне с ними делать?

P.S. Если я уберу шумоподавление, но добавлю бинаризацию по порогу, ситуация не улучшится: enter image description here

...