要对大量各种文档图像进行分类,通常使用两种方法。 为了获得更好的性能,这些方法使用了GPU编程。
第一种方法:基于模板
在该方法中,从图像中提取固定图案,并将其他图像与其进行比较。 如果相似度大于阈值,则图像将被正确分类。
代码:的
GpuInvoke.MatchTemplate(source, template, imageresult, `Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED, IntPtr.Zero, IntPtr.Zero);`
第一种方法的问题:
旋转超过10度时,此方法不是不变的。该 图像中选定的图案可能会被破坏。 (例如,损坏 冲压文件造成的。)如果图案太多,那就是 表现有所降低。
第二种方法:基于图像功能
以这种方式选择的图像的某些点可以抵抗这些变化。 如果在另一个图像中存在类似的点,则对图像进行分类。
代码:的
GpuBruteForceMatcher matcher = new GpuBruteForceMatcher(GpuBruteForceMatcher.DistanceType.L2);
matcher.KnnMatch(gpuObservedDescriptors, gpuModelDescriptors, gpuMatchIndices, gpuMatchDist, 2, null);
第二种方法的问题:
其他图像中存在具有相同特征向量的类似区域。这个 方法有大假阳性结构的小变化 文件使类似的点被销毁。
第一种方法具有高精度,但对于表征,效率较低。 第二种方法精度较低,但找到合适的斑点具有高性能算法。
问题:
要实现最佳准确性和效率,请关注哪种方法? 有没有更好的方法来分类文档图像?
考虑:
由于文档图像的分辨率为每英寸100个点,因此使用基于轮廓匹配和OCR的方法是没有用的。 我们使用OpenCV或Emgu_CV库进行图像分类。 图像可以旋转10度以上。
样品: