查找 AIKE blobs 系列的最佳算法

本文关键字:最佳 算法 系列 AIKE blobs 查找 | 更新日期: 2023-09-27 17:56:02

我想找到相似的斑点(几乎大小相同,在同一行上)。下面是一个示例图像。

我正在使用 c# 和 opencv。

查找 AIKE blobs 系列的最佳算法

我建议进行斑点检测并确定重心和斑点的面积。我假设图像中的矩形会充满黑色?如果不是,则必须在 blob 提取之前执行此步骤。使用此坐标,您可以计算点和线之间的差异。通过移动图像中的线条,您会得到不同的"错误"。请参阅此处如何计算此错误(仅举一个例子)

最小化此错误时,您就有了行。

若要计算误差,还可以首先考虑按 blob 的大小筛选 blob 坐标(大小大致相同)

正如你提到的,如果只有相同的大小和躺在同一条线上(大约)是标准,那么这是另一种方法。

  1. 使用 OpenCV 函数 cvFindContours() 查找连接的组件(猜猜你可以松散地调用该 blob 检测,不确定)。此链接提供了执行此操作的工作代码。

  2. 在逐步浏览图片中存在的所有轮廓的列表时计算每个轮廓的边界矩形。

  3. 边界矩形本质上是一个 CvRect 结构,其中包含包围所选轮廓/特征的最小矩形的 x 位置、y 位置、宽度和高度。 typedef struct CvRect { int x; int y; int width; int height; } CvRect;

  4. 当然,对于您的图片,我会比较轮廓的y位置,选择接近的轮廓。

  5. 此外,结构中的宽度和高度字段将告诉您大小的相似性。

注意:相同的区域可能并不总是表示相同的大小。 例如,a*b=ab,也是(a/4)*(4b)=ab,但大小几乎不同。代码示例是 C 语言的,但我认为在 C# 中弄清楚它不会太难。希望这对你有用!