Я новичок в обработке изображений. В моем приложении я определяю радужную оболочку глаза, используя сопоставление с шаблоном, поэтому я строю стандартную радужную оболочку и выполняю сопоставление с шаблоном, код приведен ниже
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) Есть ли другие способы устранения ложных срабатываний?
Пожалуйста, помогите мне понять это.
заранее спасибо
он думает, что значение в templateimagesults.Ptr в местоположении уважаемого местоположения — это требуемый процент соответствия, это значение сходства шаблона с изображением в окне в определенном месте. Ссылаться на: http://docs.opencv.org/modules/imgproc/doc/object_detection.html
уменьшение ложных срабатываний и улучшение отзыва всегда сбалансированы в этой работе, вы должны не просто сосредоточиться на уменьшении ложных срабатываний. может быть, вы можете попробовать использовать стандартные рамки машинного обучения для обнаружения объектов
«Соответствие шаблону 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 Шаблон соответствия
Рекомендованный учебник по машинному обучению
Предварительное сопоставление изображений, пожалуйста, обратитесь к совместимому обучению, например, нейронная сеть