2014-06-10 37 views
8

我正在研究QR检测器代码,我需要在图像上找到查找图案(FP)。我创建了一个二进制模板类似于你的QR码的拐角找到方块:如何检测图像中的QR码图案?

FP = ones(9); 
FP(2:8,2:8)=0; 
FP(3:7,3:7)=1; 
FP(4:6,4:6)=0; 
figure;imshow(FP) 

我试图寻找与使用xcorr2此模板最大相关图像中的点。我的问题很明显:与QR码在图像上的实际尺寸相比,我的模板非常小。

有没有一种方法来寻找一个模式/面具,而不必调整它的大小?还有另一种解决这个问题的方法吗?

举个例子,这里有一个QR码

enter image description here

+0

你可以用QR码发布图片的例子吗?您正在使用的实际图像掩盖。 – kkuilla

+0

完成!我编辑了我的帖子并上传了一张测试图片 –

+2

一些关键字可能有助于:“缩放不变模板匹配” – nkjt

回答

9

图像使用xcorr2你不需要。您应该使用扫描线在1d中查找1:1:3:1:1(暗光 - 暗光 - 黑暗的宽度)图案。

the standard的第60页有对参考检测算法的描述。

此外,ZXing是一个实现QR码检测/识别的开源库。你可以阅读他们的代码以供参考。

编辑:在每条扫描线上,计数随后的黑暗和随后的亮点像素。您将得到一个表示序列长度的整数列表。

然后从最大的黑暗子序列开始,看向它的两侧。如果暗的子序列长度为300,则其相邻的光子序列长度应为50-150,其相邻的暗子序列长度也应为50-150(这是由于标准中提出的0.5的容差)。 。

所以如果你找到这样一个序列,你用300来标记它。然后你尝试下一个最大的黑色子序列,等等。

只是为了澄清,上述方法应该用来找到3个标记​​的角落。

+0

好吧我会试试这个,但是如果我正在处理像上传的图片怎么办?在这种情况下,我无法查找该模式(假设它是基于像素的),因为序列中涉及更多的像素,对吗? –

+0

我认为你将不得不缩放你的模式或参考图像。但是因为你在1d而不是2d做这个,它会快得多。 –

+0

另外,请参阅我添加的编辑。 –