好吧,这可能表明我没有参加图像处理课程。

我有此模板来匹配图像中的对象。但是,例如图像中的真实对象看起来并不像第二个图像。我需要进行哪些操作才能使图像(如第二张)准备好进行模板匹配?仅供参考,第三张图片显示了理想的匹配。

从另一个角度来说,我将模板适合该图片。也就是说,我在图像上给出了四个角坐标以匹配模板中的角坐标。然后,它将计算出一种使模板适合该区域的方法。

更新:问题已解决。感谢我在下面选择的答案。我成功地将模板应用于图像。最后一张图片显示了结果。







评论

您不会匹配该白色网格,是吗?您想在第二张图像中匹配实际的彩色网格,对吗?

@endolith我认为这两种方法都很好。

您可以分享算法的基本概念吗?我需要对图表执行相同操作。

#1 楼

您发布的样本图像具有相对较强的透视图(并非从表面法线方向直接成像),这可能会导致模板匹配技术出现问题,例如使用块处理。我假设您必须拍摄具有强透视图的图像,所以我们要做的第一件事是估计图像变换,该变换将消除透视图投影并得到校正后的图像(“纯图像”)。

校正形状已知时的透视投影

预处理的最终目标是找到该灰色矩形的角,该矩形是色表的背景。我从简单地用恒定值阈值开始。文献/网络上有很多有关在图像光线不均匀时如何进行阈值处理的信息,但是,如果可以的话,请尝试校正成像设置,使光线相对均匀。



我假设色卡占据了屏幕的很大一部分,因此它可能是图像的最大连续区域。存在许多黑白标签功能(MATLAB bwlabel,IPP LabelMarkers,OpenCV具有外部库cvblob),它们将为每个不同的连接区域提供自己的索引。标记后,可以使用直方图计算连接的组件的面积,然后选择面积最大的组件。

从而使组件没有孔,从而减少了边缘像素的数量。还可以通过跟踪连接到黑色像素的白色像素来跟踪边缘),以获得属于边界的像素。



由于我们感兴趣的对象是矩形,因此我使用鲁棒线拟合(RANSAC)将四条线拟合到边缘像素。找到新线后,我删除了所有与找到的线接近的点,这将强制后续的拟合操作返回对象的其他边缘。最终,当找到所有边缘时,我计算了线组之间所有可能的交点。从结果点的集合中,我删除了图像之外的所有点。 $(单应性,两个平面之间的投影。使用直接线性变换(DLT)求解$ H $)在毫米坐标和像素坐标之间。

$ \ textbf {x} = H \ textbf { X} $

然后可以使用此变换矩阵来变换原始图像,以便从表面法线的方向直接对颜色图表进行成像。 >
可以看出,仅留下了径向变形。当我们使用变换$ H $进行图像变换(2D插值)时,我们选择了插值坐标,这样我们就知道了图像的精确分辨率,这意味着我们现在知道例如字母的大小。
如果我们仍然想进行模板匹配,则可以使用任何合适的模板匹配方法。该方法不必是旋转/缩放不变的,因为图像已经得到纠正。



#2 楼

从边缘检测开始。然后使用霍夫变换检测直线。然后找出哪些线是平行的,哪些线应该是垂直的。然后估计投影变换,使实际上应该垂直的线垂直。