我正在处理 QR 检测器代码,我需要在图像上找到查找模式 (FP)。我创建了一个二进制模板,类似于您在 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 码在图像上可能具有的实际尺寸相比,我的模板非常小。
有没有一种无需调整大小即可查找图案/ mask 的方法?有没有其他方法可以解决这个问题?
例如,这是一张带有二维码的图片
最佳答案
您不需要使用 xcorr2
。您应该使用扫描线在 1d 中寻找 1:1:3:1:1(暗-亮-暗-亮-暗的宽度)图案。
在 the standard 的第 60 页上有一个引用检测算法的描述。 .
此外,ZXing是一个实现二维码检测/识别的开源库。您可以查看他们的代码以供引用。
编辑:在每个扫描线上,计算后续的暗像素和后续的亮像素。您将获得表示序列长度的整数列表。
然后从最大的暗子序列开始,看向它的两侧。如果暗子序列长度为300,那么其相邻的亮子序列长度应为50-150,与其相邻的暗子序列长度也应为50-150(这是由于标准中提出的0.5的容差。) .
因此,如果找到这样的序列,则将其标记为 300。然后尝试下一个最大的暗子序列,依此类推。
澄清一下,上面的方法应该用来找到 3 个标记的角。
关于matlab - 如何检测图像中的二维码图案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136345/