Principio de coincidencia de plantillas OpenCV matchTemplate e implementación de código (C#)

  • Principio básico:
    utilice la imagen de la plantilla como núcleo de convolución, escanee la imagen de muestra de izquierda a derecha y de arriba a abajo, calcule el coeficiente de correlación y luego busque objetos similares a la plantilla.
    Insertar descripción de la imagen aquí
  • método de emparejamiento

1. Método de coincidencia de diferencia al cuadrado (TM_SQDIFF) T es la imagen de plantilla, I es la imagen coincidente, en la posición (x, y) de la imagen coincidente, x' hacia la derecha e y' hacia abajo enmarcan el área de reconocimiento, y cuando
Insertar descripción de la imagen aquí
la correlación coincide completamente,
el valor calculado es 0; cuanto mayor sea el valor coincidente, menor será la correlación.

2. Método de identificación de diferencia cuadrática normalizada (TM_SQDIFF_NORMED)

Insertar descripción de la imagen aquí
El cálculo de la diferencia al cuadrado se normaliza para que el resultado del cálculo sea de 0 a 1.
Cuando la imagen coincide completamente, el resultado del cálculo es 0; cuando la imagen no coincide completamente, el resultado del cálculo es 1.

3. Método de coincidencia de correlación (TM_CCORR)

Insertar descripción de la imagen aquí
La plantilla se multiplica por la imagen coincidente. Cuanto mayor sea el resultado del cálculo, mejor será el resultado coincidente;
este método hará que el resultado del cálculo cambie debido a cambios en el brillo global de la imagen. Por ejemplo, cuando la imagen se vuelve más brillante, el valor de gris de cada píxel aumentará, lo que hará que el resultado del cálculo aumente;

4. Método de coincidencia de correlación normalizada (TM_CCORR_NORMED)
Insertar descripción de la imagen aquí
5. Método de coincidencia de coeficientes de correlación (TM_CCOEFF)
Insertar descripción de la imagen aquí
Este método preprocesa la matriz de la plantilla y el área de reconocimiento antes de realizar la coincidencia de correlación: restando la media de la matriz de la matriz, este método resuelve el impacto causado por la diferencia de brillo entre la imagen de plantilla y la imagen de reconocimiento. Se puede ver en la lógica del resultado del cálculo que cuanto mayor sea el resultado del cálculo, mejor será el resultado de la coincidencia.

6. Método de coincidencia de coeficientes de correlación normalizados (TM_CCOEFF_NORMED)

Insertar descripción de la imagen aquí

Este método normaliza el método de coincidencia del coeficiente de correlación. El resultado del cálculo es -1 ~ 1
para una coincidencia completa y -1 para una discrepancia completa.

  • API
public static void MatchTemplate(InputArray image, InputArray templ, OutputArray result, TemplateMatchModes method, InputArray? mask = null);

imagen: plantilla de imagen de reconocimiento : resultado
de imagen de plantilla : resultado de coincidencia de plantilla método: máscara de método de coincidencia: máscara de plantilla coincidente, generalmente usando el valor predeterminado


  • manifestación
Mat templatePic = Cv2.ImRead(@"C:\Users\Aron\Desktop\01\A.jpg");
Mat testPic = Cv2.ImRead(@"C:\Users\Aron\Desktop\01\B.jpg");


Mat matchResul = new Mat();


//归一化相关系数匹配法
Cv2.MatchTemplate(testPic, templatePic, matchResul, TemplateMatchModes.CCoeffNormed);

//最大最小匹配对象的位置
Point minLoc = new Point(0, 0);
Point maxLoc = new Point(0, 0);

//最大最小配置值
double minVal;
double maxVal;

//查找最大最小值的位置及匹配的值
Cv2.MinMaxLoc(matchResul, out minVal, out maxVal, out minLoc, out maxLoc);

//框选出识别对象
//归一化相关系数匹配方法取最大值
Scalar scalar = new Scalar(0, 0, 255);
Cv2.Rectangle(testPic,maxLoc, new Point(maxLoc.X+templatePic.Cols,maxLoc.Y+templatePic.Rows), scalar, 7);

//显示相关性计算结果
Cv2.PutText(testPic, Math.Round(maxVal,4).ToString(), new Point(maxLoc.X, maxLoc.Y -50), HersheyFonts.HersheyDuplex, 2, scalar, 8);


picBox_Display.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(templatePic);
picBox_After.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(testPic);

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Notas adicionales:
La biblioteca OpenCV utilizada en .NET en este caso es OpenCvSharp4

Biblioteca OpenCv para entorno .NET

Supongo que te gusta

Origin blog.csdn.net/weixin_40671962/article/details/127464728
Recomendado
Clasificación