Template Matching with evaluation
In this sample you will perform Template Matching in order to find a component on a printed circuit board. For this purpose, use:
Application
Remember to add both the input image and the template image to the respective File Source. Via the fMatchThreshold
threshold value you can set a limit as to how good a match must be in order to be accepted.
Program
Important in this sample is that you require a template image in addition to the normal input image in order to search for occurrences of the template in the input image.

If both images are available, perform the template matching automatically with the F_VN_MatchTemplateAndEvaluate function.
hr := F_VN_MatchTemplateAndEvaluate(ipImageIn, ipImageTemplate, ipMatches, fMatchThreshold, hr);
The matches found whose degree of correlation is higher than the specified fMatchThreshold
threshold value are now located as points in the ipMatches
container. Each point specifies the top left corner of each occurrence of ipImageTemplate
in ipImageIn
.
In principle you are now done with the Template Matching. By way of example, access the individual matches in the following in order to paint them into the image. For this purpose, use the construct for accessing container elements as explained in the Container section.
hr := F_VN_GetImageHeight(ipImageTemplate, nHeight, hr);
hr := F_VN_GetImageWidth(ipImageTemplate, nWidth, hr);
hr := F_VN_GetForwardIterator(ipMatches, ipIterator, hr);
IF SUCCEEDED(hr) AND ipIterator <> 0 THEN
hr := ipIterator.TcQueryInterface(IID_ITcVnAccess_TcVnPoint2_DINT, ADR(ipAccess));
IF SUCCEEDED(hr) AND ipAccess <> 0 THEN
WHILE SUCCEEDED(hr) AND ipIterator.CheckIfEnd() <> S_OK DO
hr := ipAccess.Get(aPosition);
hr := F_VN_DrawRectangle(
DINT_TO_UDINT(aPosition[0]),
DINT_TO_UDINT(aPosition[1]),
DINT_TO_UDINT(aPosition[0])+nWidth,
DINT_TO_UDINT(aPosition[1])+nHeight,
ipImageRes,
aGreen,
5,
hr);
hr := F_VN_IncrementIterator(ipIterator, hr);
END_WHILE
END_IF
END_IF
Notice | |
Long execution duration Depending on the size of the input and template image, the performance of the Template Matching can take a very long time in comparison with other functions. Make sure that you set the cycle time accordingly and use a watchdog if necessary! |
Original image

Result image
