这里展示了我的问题:问题声明。我有一个模板图像,需要在摄像头图像中检测出来。当它被检测到后,我需要使用仿射变换对摄像头图像进行归一化处理。我的工作目标是识别十字架。我尝试使用SURF特征进行图像归一化步骤,但模板图像非常规则,不适合SURF匹配。有什么想法可以解决这个问题吗?也许是某种轮廓匹配?
这里展示了我的问题:问题声明。我有一个模板图像,需要在摄像头图像中检测出来。当它被检测到后,我需要使用仿射变换对摄像头图像进行归一化处理。我的工作目标是识别十字架。我尝试使用SURF特征进行图像归一化步骤,但模板图像非常规则,不适合SURF匹配。有什么想法可以解决这个问题吗?也许是某种轮廓匹配?
特征提取算法通常依赖于图像的“锐度”来检测角点和边缘。通过增强图像中所有较浅的区域(考虑您的彩票是白色的)和模糊所有较暗的区域,您将增加以算法方式检测所需角点的机会。
3) 使用特征检测来检测四个角落
这就是事情开始变得复杂的地方。如果您有一堆彩票,想要拍照并且能够自动找到其中一张并无失真地显示出来,那么您需要探索目前正在研究的尖端技术。如果您正在尝试做到这一点,我建议阅读刘彦希的一些论文,尤其是具有应用于城市场景的基于平移对称性的感知分组论文。您可能需要从预先制作的一张彩票图片创建一个模板,然后尝试将该模板的精确特征与摄像机图像中具有相同特征的扭曲网格进行匹配。一旦您有一个高于百分比阈值的匹配,则可以尝试找到四个角落。如果成功找到它们,那么您可以继续下一步。
如果你不打算做一些前沿的工作,那么你可以通过一些传统的特征检测来完成。对于角点检测,我建议使用哈里斯和斯蒂芬斯/普利西/施-托马斯角点检测算法。这是 Yanxi 在她的一些论文中使用的相同算法,可以很好地检测角点。我不确定滤波器是否需要图像的灰度值或当前的颜色比例,但如果它使用后者,则在使用角点检测算法之前使用 Canny 边缘检测滤波器会更有优势。一旦你成功(希望如此)检测到票据的主要角落,就需要设计一种智能查找算法(基于你的照片的透视和内容),“猜测”哪些角落实际上是你关心的四个角。
值得注意的是,“均值漂移置信传播”可以帮助您在检测算法之后确定最重要的特征。基本上,您需要在给定的框内取一些特征点,平均它们的所有坐标,然后将框居中于结果坐标上。如果移动后框内有新点,则再次执行此操作。您继续这样做,直到框的中心只有一个兴趣点。这是该想法的简要描述,因此建议您进一步了解,因为我不知道平均细节。角点检测:http://en.wikipedia.org/wiki/Corner_detection
刘彦西的论文:http://www.cse.psu.edu/~yanxi/
均值漂移置信传播:在我告诉你的那篇论文中使用
编辑
级别分离的代码
int threshold = 128;
float percentChange = .5;
int oldr, oldg, oldb, newr, newg, newb, grayscale;
//Assuming that pixels is a 1D array of pixel objects that make up the image you're currently working with. Syntax is of Processing.org
for (int i=0; i<pixels.length; i++) {
oldr = red(pixels[i]);
oldg = green(pixels[i]);
oldb = blue(pixels[i]);
grayscale = Math.floor((oldr + oldg + oldb) / 3.0);
if (grayScale >= threshold) { //Brightness is above threshold, therefore increase brightness
newr = oldr + (255-oldr)*percentChange;
newg = oldg + (255-oldg)*percentChange;
newb = oldb + (255-oldb)*percentChange;
} else { //Brightness is below threshold, therefore increase darkness
newr = oldr - oldr*percentChange;
newg = oldg - oldg*percentChange;
newb = oldb - oldb*percentChange;
}
pixels[i] = color(newr,newg,newb);
}
像素为基础的直接方法在您的情况下可能比基于特征的方法更好。
您可以在这里找到关于图像对齐的好教程: http://research.microsoft.com/apps/pubs/default.aspx?id=70092
另一个想法是选择感兴趣区域(ROI)。如果您知道图像右上方是由红色正方形组成的,则可以尝试将其从SURF检测中排除。此外,您还可以检测“红色正方形区域”的形状,并将其用于转换估计。
只需找到最粗、最长的红线,然后进行仿射变换。