这是我的实验的样本图像,用于查找所有斑点的信息(中心,尺寸等)。基本上下面的图像包含一些噪音,几条粗线,当然还有一些斑点。
我的目标是使用图像处理软件包" Sapera APF"对FPGA进行编程。 Sapera APF是一个用于编程Teledyne DALSA图像处理器以执行图像处理的应用程序。不幸的是,它不允许我们以传统的方式编写代码,也不允许使用基本的编码功能(如果是else语句,循环等)但只支持代码块形式的一些内置函数,我们只能安排这些块。 仅供参考,这是Sapera支持的功能列表link。
现在,我的第一个目标是在matlab上测试我的算法,然后在Sapera上实现它。这是我在matlab中的方法:
grayvalue=255
)并在原始图像中拍摄了相应的像素。这是一个在matlab中工作正常的简单算法。但真正的问题是,对于步骤3(即连接),当然我必须写入循环到每个像素检查连接,这不能在Sapera中完成。所以我正在寻找一些其他更简单的算法来分离我的图像中的blob,而不使用循环和条件语句,这样它就可以在Sapera中实现,但现在我只需要它的matlab代码或算法。
答案 0 :(得分:1)
看起来,所有Sapera操作都属于点对点或邻域操作系列(=图像处理),并且几乎没有什么可以帮助您分割出blob。 (实际上,没有任何函数可以返回“少量的东西”;它们都返回完整的图像或标量值。)
作为一种解决方法,您可以
限制对感兴趣区域的处理(垂直条纹肯定包含斑点 - 但您可以忽略边缘);
使用horizontalSum函数获取一个图像配置文件,您可以在其中找到与blob对应的峰值(您必须自己编程,但数据量会大大减少);
同样,使用verticalSum查找水平限制。
鉴于blob的优异分离,这应该足以划定每个blob的边界框。
正如您在图像垂直剖面图中看到的那样,峰值检测很容易(假设您避开了侧线)。
水平轮廓非常无缝。
答案 1 :(得分:0)
为了方便地将线条与点状峰值分开而没有多次连接检查,我会:
如何计算局部椭圆度:
x^2
,y^2
或xy
对每个峰值周围的数据进行加权求和,其中x和y是与起源于最高位置。在只有水平或垂直但从不对角线的特殊情况下,您还可以计算x^2
和y^2
加权时刻,并且只接受相当平等的那些。