c # — получить соответствующее процентное значение при использовании шаблона соответствия

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

CvInvoke.cvMatchTemplate(grayframeright_1.Ptr, templateimagegray.Ptr, templateimagesults.Ptr, TM_TYPE.CV_TM_CCORR_NORMED);

templateimagesults.MinMax(out min, out max, out Min_Loc, out MAX_Loc);

Location = new Point((MAX_Loc[0].X), (MAX_Loc[0].Y));

Проблема в том, что иногда я получаю ложные срабатывания, чтобы устранить ложные срабатывания, я планировал рассчитать / получить соответствующее процентное значение и использовать соответствующее условие if.

1) Так есть ли какие-нибудь функции в emgucv / opencv для получения соответствующего процентного значения?
например, 50%, 80% и т. д.

2) Есть ли другие способы устранения ложных срабатываний?

Пожалуйста, помогите мне понять это.

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

1

Решение

  1. он думает, что значение в templateimagesults.Ptr в местоположении уважаемого местоположения — это требуемый процент соответствия, это значение сходства шаблона с изображением в окне в определенном месте. Ссылаться на: http://docs.opencv.org/modules/imgproc/doc/object_detection.html

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

0

Другие решения

«Соответствие шаблону opencv» фактически не предоставляет документ для определения процентного значения соответствия, однако, если вы действительно хотите получить точность из соответствия, возможно, вы можете использовать следующий метод:

  double maxThd = 0.7;
double minThd = 0.3;

matchTemplate( img, templ, result, match_method );
normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );

/// Localizing the best match with minMaxLoc
double minVal; double maxVal; Point minLoc(-1,-1); Point maxLoc(-1,-1);
Point matchLoc;

minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );

/// For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better
if( match_method == CV_TM_SQDIFF_NORMED && minVal < minThd)
{ matchLoc = minLoc; }
else if(match_method == CV_TM_CCORR_NORMED && maxVal > maxThd)
{ matchLoc = maxLoc; }

bool isMatch = matchLoc != cv::Point(-1,-1);
if(isMatch) {
// Show the result here!
}

И чем больше информации, вы можете обратиться к

Opencv Шаблон соответствия

Рекомендованный учебник по машинному обучению

Предварительное сопоставление изображений, пожалуйста, обратитесь к совместимому обучению, например, нейронная сеть

0

По вопросам рекламы [email protected]