论文阅读笔记《Template Matching with Deformable Diversity Similarity》

文章介绍了一种针对图像模板匹配的无参数DDIS方法,它通过分析最近邻点集的多样性和变形程度来度量相似性。这种方法能有效处理遮挡和扭曲问题,但不适用于图像尺寸变化。DDIS包含两个度量函数,DIS衡量多样性,DDIS结合变形程度,用于目标定位。尽管存在局限,DDIS为模板匹配提供了新的思路。
摘要由CSDN通过智能技术生成

核心思想

  该文提出一种应用于图像模板匹配的相似性度量方法,传统的模板匹配过程中,相似性度量通常采用距离平方和、归一化互相关等方法,但这些方法都很难处理遮挡、扭曲等复杂问题。因此,本文提出一种无参数的可变形多样性相似性度量方法(DDIS),该方法不是直接对图像进行处理,而是对模板与图像之间的最近邻点集(NNs)进行处理。假设 p i p_i pi表示模板中的图块(或者点), q j q_j qj表示目标图像中的图块(或点),则需要从全部模板点集 P P P中为目标图像点集 Q Q Q中的每个点都找到最近邻点
在这里插入图片描述
  其中 d ( q , p ) d(q,p) d(q,p)表示一种距离度量方法。如果模板与目标图像中的某个区域是匹配的,则他们之间的最近邻点集应该具备两个特点:多样性(Diversity)强,变形程度(deformation)小。所谓的多样性强就是指最近邻点集中的点都是唯一确定的,图像中的每个点在模板中都有唯一确定的最近邻点与之对应,实际中自然不会每个点都有唯一的最近邻点,但是这种一一对应关系应该是越多越好,如图(d)所示,每个箭头都指向不同的位置,表示不同点的最近邻点也各不相同。而对于不匹配的图像之间,他们的最近邻可能会指向同一个点,如图(e)所示,很多箭头都指向同一个位置,即很多点的最近邻点都是模板中的一个点。而变形程度小,则是说匹配图像中的点与模板上的最近邻点之间的位置变化应该是较小的,如图(d)中的箭头都很短,而不匹配图像中的点与模板中的最近邻点位置变化可能会很大,如图(e)中的箭头都很长。
在这里插入图片描述

  明确了本文的思想之后,作者就设计了两个相似性度量函数用来描述最近邻点集的多样性和变形程度,作者首先设计了多样性相似性度量函数DIS
在这里插入图片描述
其中 c = 1 / m i n { M , N } c=1/min\left \{M,N\right \} c=1/min{M,N}表示归一化系数, ∣ { } ∣ \left | \left \{\right \}\right | {}表示计算集合内点的总数。DIS的值越大,则表示多样性越高。然后为了结合变形程度和多样性两个特点,作者又提出了可变形多样性相似性度量方法DDIS
在这里插入图片描述
其中
在这里插入图片描述
在这里插入图片描述
  如果对于点 q j q_j qj只有唯一对应的最近邻点,则 κ = 1 \kappa=1 κ=1,则DDIS中的指数项也达到最大值1。相反的,如果对于点 q j q_j qj与很多其他的点拥有相同最近邻点,则 κ \kappa κ的值会变大,则DDIS的指数项值下降。 r j r_j rj表示两个最近邻点的位置上的差异,如果点 q j q_j qj与最近邻点之间的位置差异很大,也会降低他对于相似性度量的影响比重, r j r_j rj可以看作是一个反比例权重系数。

实现过程

特征提取:包含颜色特征和深度特征,颜色特征就是RGB数值,深度特征则是利用VGG网络提取的特征向量
最近邻搜索:使用TreeCANN算法进行最近邻搜索,并配合PCA方法将维度压缩到9
相似性映射计算:对于目标图像中的每个像素都计算其所在的图块与模板之间的 κ \kappa κ值,由于相邻的像素之间,其图块会有重叠的部分,因此每次移动只计算,当前位置与上个位置对应 κ \kappa κ值的变化量
目标定位:最后模板的匹配目标定位在相似性得分最高的位置

算法评价

  本文提出一种能够抵抗变形和遮挡的模板匹配算法,其通过对最近邻点集的特点进行描述,能够有效的表示匹配点之间的相似性关系。但本文仍存在的问题就是无法解决图像尺寸变化问题,这值得进一步研究。

如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。在这里插入图片描述

Emgu CV is a cross-platform .NET wrapper for OpenCV, which is a popular computer vision library. Template matching is a technique used in computer vision to find regions in an image that match a given template. In Emgu CV, you can perform template matching using the `Image.MatchTemplate` method. Here's an example: ``` using Emgu.CV; using Emgu.CV.CvEnum; // Load the source image and the template Mat sourceImage = new Mat("source.jpg", ImreadModes.Color); Mat template = new Mat("template.jpg", ImreadModes.Color); // Create the result matrix Mat result = new Mat(sourceImage.Rows - template.Rows + 1, sourceImage.Cols - template.Cols + 1, DepthType.Cv32F, 1); // Perform template matching CvInvoke.MatchTemplate(sourceImage, template, result, TemplateMatchingType.CcoeffNormed); // Find the best match double minVal, maxVal; Point minLoc, maxLoc; CvInvoke.MinMaxLoc(result, out minVal, out maxVal, out minLoc, out maxLoc); // Draw a rectangle around the best match Rectangle matchRect = new Rectangle(maxLoc, template.Size); CvInvoke.Rectangle(sourceImage, matchRect, new MCvScalar(0, 0, 255), 2); // Display the result CvInvoke.Imshow("Template Matching", sourceImage); CvInvoke.WaitKey(0); ``` This code loads a source image and a template image, performs template matching using the `CvInvoke.MatchTemplate` method, finds the best match using `CvInvoke.MinMaxLoc`, and draws a rectangle around the best match. Finally, it displays the result using `CvInvoke.Imshow`. Make sure to replace "source.jpg" and "template.jpg" with the paths to your own images. Also, you may need to adjust the template matching method and parameters depending on your specific use case.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深视

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值