好吧,这可能表明我没有参加图像处理课程。
我有这个模板来匹配图像中的对象。但是,例如,图像中的真实对象看起来并不像第二个图像。我需要进行哪些操作才能使像第二张图像一样准备好进行模板匹配?仅供参考,第三张图片显示了理想的匹配。
在另一个想法中,我使模板适合图像。也就是说,我在图像上给出了四个角坐标以匹配模板中的角坐标。然后,它将计算出一种使模板适合该区域的方法。
更新:问题已解决。感谢我在下面选择的答案。我成功地将模板应用于图像。最后一张图片显示了结果。
好吧,这可能表明我没有参加图像处理课程。
我有这个模板来匹配图像中的对象。但是,例如,图像中的真实对象看起来并不像第二个图像。我需要进行哪些操作才能使像第二张图像一样准备好进行模板匹配?仅供参考,第三张图片显示了理想的匹配。
在另一个想法中,我使模板适合图像。也就是说,我在图像上给出了四个角坐标以匹配模板中的角坐标。然后,它将计算出一种使模板适合该区域的方法。
更新:问题已解决。感谢我在下面选择的答案。我成功地将模板应用于图像。最后一张图片显示了结果。
Answers:
您发布的示例图像具有相对较强的透视图(并非从表面法线方向直接成像),这可能会导致模板匹配技术出现问题,例如使用块处理。我假设您必须拍摄具有强透视图的图像,所以我们要做的第一件事是估计图像变换,该变换将消除透视图投影并得到经过校正的图像(“纯图像”)。
预处理的最终目标是找到作为颜色图表背景的灰色矩形的角。我从简单地用恒定值阈值开始。文献/网络上有很多有关在图像光线不均匀时如何进行阈值处理的信息,但是如果可以,请尝试校正成像设置,以使光线相对均匀。
我假设色卡占据了屏幕的很大一部分,因此它可能是图像的最大连续区域。存在许多黑白标签功能(MATLAB bwlabel,IPP LabelMarkers,OpenCV具有外部库cvblob),它们将为每个不同的连接区域提供自己的索引。贴标签后,您可以使用直方图计算连接的组件的面积,然后选择面积最大的组件。
通常最好填充零部件,使零部件没有孔,这样可以减少边缘像素的数量。
现在,我们可以使用边缘查找运算符(我使用了基于梯度的方法,但是您也可以通过跟踪连接到黑色像素的白色像素来跟踪边缘),以获得属于边界的像素。
由于我们感兴趣的对象是矩形,因此我使用鲁棒线拟合(RANSAC)将四条线拟合到边缘像素。找到新线后,我删除了所有与找到的线接近的点,这将强制后续的拟合操作返回对象的其他边缘。最终,当找到所有边缘时,我计算了线组之间所有可能的交点。从结果点集中,我删除了图像之外的所有点。
然后,可以使用此变换矩阵对原始图像进行变换,以使颜色图表从表面法线的方向直接成像。
如果我们仍然想进行模板匹配,则可以使用任何合适的模板匹配方法。该方法不必是旋转/缩放不变的,因为图像已经被校正。