有没有一种方法可以比较两个几何形状(或任何两个其他通用数据结构),而当涉及公差时不使用蛮力?
蛮力(将每个对象的每个值与另一个对象的每个值进行比较)有效,但速度很慢,我无法使用它。
我尝试对数据进行排序并比较两个排序的集合。它的速度很快,但只能在零公差下使用。一旦增加公差,我就会迷失方向。问题是当我比较时两个值可以相同,而当我排序时两个值可以不同。
这是我的问题的一些细节。
在我的Excel VBA加载项中,我有一个Shape对象集合,每个Line对象由两个Point对象组成。外接程序通过COM扫描CAD图并创建Shape对象的集合。
简化版本可能会生成以下内容:
Shape 1 Shape 2
Point 1 0.0 5.0 0.0 4.9
Point 2 4.9 0.0 5.1 0.0
Point 3 5.0 5.0 5.0 5.0
Run Code Online (Sandbox Code Playgroud)
我需要找出哪些形状与哪些形状相同,相同的方法具有相同的形状,大小和方向,但位置不同(到目前为止是微不足道的)加上或减去公差(现在不那么微不足道!)
的 Point.IsIdenticalTo(OtherPoint)定义为:
Function IsIdenticalTo(OtherPoint As Point) As Boolean
IsIdenticalTo = Abs(X - OtherPoint.X) < Tolerance And Abs(Y - OtherPoint.Y) < Tolerance
End Function
Run Code Online (Sandbox Code Playgroud)
暴力执行 Shape.IsIdenticalTo(OtherShape)作品但速度太慢:如果每个作品Line(I)都相同OtherShape.Line(J),反之亦然,那么这两个形状是相同的。有时我有数百个形状,每个形状都有数百条线,因此强力解决方案对我不起作用。
我尝试了两种涉及排序集合的方法。两者都是快速的,因为比较两个排序的集合比蛮力方式要快,但是在某些情况下都失败了:
一个SortedValues集合包含所有的所有行的X和Y值。这些值已排序,因此有关该值是X还是Y的信息都会丢失。我使用这种方法已经有几个月没有问题了,但是例如当两个形状之间的唯一区别是在点(10, 20)和之间时,它就失败了(20, 10)。我将线角添加到值列表中,情况有所改善,但是仍然存在这种方法失败的情况,因为在对值进行排序时会丢失一些信息。在上面的示例中,此方法适用于以下集合:
Shape …Run Code Online (Sandbox Code Playgroud)我想在两张图片中搜索类似的区域,但我不知道什么效果最好.这些区域不会以任何方式缩放或转换,但可能出现在两个图像中的任何位置(我想知道在哪里).他们周围还有其他的东西.
这是我想要的一个例子:

我怎样才能做到这一点?
我正在进行车牌识别.问题是我必须对二进制图像中的字符进行去偏斜以提高模板匹配的准确性.
我已经做了很多预处理来删除图像中不必要的像素,我可以将字符分割出来.但不幸的是,它们是扭曲的.
从...转换为灰度到二进制

然后..预处理技术..

分割后..

如在最后一个图像中可以观察到的那样,字符是倾斜的,这将导致模板匹配的不准确性以执行识别目的.
大多数研究人员正在使用Hough变换来执行去偏移操作,但有更简单的方法吗?
我正在研究轮胎上的文本识别。为了使用 OCR,我必须首先获得清晰的二值图。
我已经处理了图像,文本出现边缘破损和不连续的情况。我已经在 MATLAB 中尝试过使用圆盘和线元素进行标准腐蚀/膨胀,但它并没有真正帮助。
Pr1-关于如何重建这些字符并填补字符笔划之间的空白的任何想法?

Pr2- 上面的图像分辨率更高,光照良好。但是,如果如下图所示,照明较差且分辨率相对较低,那么可行的处理选项是什么?
S1:这是对Spektre共享的处理过的图像应用中值滤波器的结果。为了去除噪声,我应用了中值滤波器 (5x5),随后使用线元素 (5,11) 进行图像膨胀。即使现在 OCR (Matlab 2014b) 也只能识别一些字符
无论如何,非常感谢到目前为止的建议。我仍然会等着看是否有人可以提出不同的建议,也许是开箱即用的:)。
Matlab 实现以下 Spektre 代码中的步骤的结果(没有笔画扩张(按 1、2、3、4 的顺序对角进行标准化:
并且阈值 tr0=400 和 tr1=180 以及归一化的角顺序 1,3,2,4

此致
瓦贾哈特
将左侧像素组视为矩形的数学逻辑是什么?
