gpt4 book ai didi

image - Blob 检测的替代算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:05:35 27 4
gpt4 key购买 nike

这是我的实验的样本图像,将对其进行处理以查找所有 Blob 的信息(中心、维度等)。下图基本上包含一些噪声、一些粗线,当然还有一些 Blob 。

enter image description here

我的目标是使用图像处理包“Sapera APF”对 FPGA 进行编程。 Sapera APF 是一款用于对 Teledyne DALSA 图像采集卡进行编程以执行图像处理的应用程序。不幸的是,它不允许我们以常规方式编写代码,也不允许使用基本的编码功能(if else 语句、循环等),但仅支持代码块形式的一些内置函数,我们只能安排这些 block .仅供引用,这是一个 link到 Sapera 支持的功能列表。

现在,我的第一个目标是在 matlab 上测试我的算法,然后在 Sapera 上实现它。这是我在 matlab 中的方法:

  1. 应用均值滤波器(用于第 3 步)
  2. 使用自适应阈值处理的阈值图像(返回二值图像)
  3. 通过检查连通性删除了线条,所有线条都与超过 100 个像素相连(为了更好的连通性意味着首先应用过滤器)
  4. 现在因为只剩下 Blob 了,它们的位置被识别出来了(使用 grayvalue=255)并且在原始图像中获取了相应的像素。

这是一个简单的算法,在 matlab 中运行良好。但真正的问题是,对于第 3 步(即连通性),我当然必须编写循环到每个像素以检查连通性,这在 Sapera 中无法完成。所以我正在寻找其他一些更简单的算法来分离图像中的 Blob ,而不使用循环和条件语句,以便它可以在 Sapera 中实现,但现在我只需要它的 matlab 代码或算法。

最佳答案

看起来,所有 Sapera 操作都属于点对点或邻域操作(= 图像处理)系列,几乎没有什么可以帮助您分割出 Blob 。 (事实上​​,没有函数会返回“少量的东西”;它们都返回完整的图像或标量值。)

作为解决方法,您可以

  • 将处理限制在感兴趣的区域(垂直条纹肯定包含 Blob - 但您可以忽略两侧);

  • 使用 horizo​​ntalSum 函数获取图像轮廓,您可以在其中找到与 Blob 对应的峰值(您必须自己编程,但数据量会大大减少);

  • 类似地,使用 verticalSum 求水平限制。

鉴于 blob 的出色分离,这应该足以为每个 blob 划定边界框。

正如您在图像的垂直剖面图上看到的那样,峰值检测很容易(前提是您避开侧线)。

enter image description here

而且水平剖面真的很无缝。

enter image description here

关于image - Blob 检测的替代算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com