我正在研究在PCB板上检测2D条形码。环境是Visual Studio 2012。
我们遇到了一些问题,无法成功过滤出二维条码图像。
加载图:原始图像尺寸为1600 * 1200。
在我们加载图形并按照以下步骤开始一系列处理之后:
1。通过自动阈值方法查找阈值。
2。对图像执行二进制阈值。
第3。做开放以清晰地制作图像。
打开: dst = open(src,element)= dilate(erode(src,element))
4。过滤掉除正方形之外的矩形。 然后我们可以得到一组正方形。 如下图所示,在步骤1-4之后,我们可以在图像上找到正方形。
5。使用类似的数据矩阵模板分别通过直方图分析与正方形进行比较。
5.1计算直方图
void calcHist(const Mat * images,int nimages, const int * channels,InputArray mask, OutputArray hist,int dims,const int * histSize, const float ** range,bool uniform = true,bool accumulate = false);
5.2规范化数组的值范围
void normalize(InputArray src,OutputArray dst,double alpha = 1,double beta = 0, int norm_type = NORM_L2,int dtype = -1,InputArray mask = noArray());
5.3将两个直方图与相关性进行比较。
double compareHist(InputArray H1,InputArray H2,CV_COMP_CORREL);
6。处理后,我们无法从方形集合中过滤出正确的图像。
6.1我们已经将直方图的区间从256调整到64/32,但结果没有鲁棒性,相关值非常低,甚至小于0.5。
6.2我们还尝试使用EMD(地球移动器的距离)来估计两个方格的相似性,但它并没有解决这个问题。
[[问题]]: 是否有可能与我们分享一些改进检测方法的建议?