[英]An alternative algorithm for blob detection
这是我的实验的示例图像,将处理该图像以查找所有斑点的信息(中心,尺寸等)。 基本上,下面的图像包含一些噪点,一些粗线和一些斑点。
我的目标是使用图像处理程序包“ Sapera APF”对FPGA进行编程。 Sapera APF是用于对Teledyne DALSA图像采集卡进行编程以执行图像处理的应用程序。 不幸的是,它不允许我们以常规方式编写代码,也不允许使用基本的编码功能(如else语句,循环等),而仅以代码块的形式支持某些内置函数,并且我们只能排列这些块。 仅供参考,这是Sapera支持的功能列表的链接 。
现在,我的第一个目标是在matlab上测试我的算法,然后在Sapera上实现它。 这是我在Matlab中的方法:
grayvalue=255
),并在原始图像中拍摄相应的像素。 这是一个简单的算法,在matlab中可以正常工作。 但是真正的问题是,对于第3步(即连通性),我当然必须编写循环到每个像素以检查连通性,而这在Sapera中是无法做到的。 因此,我正在寻找其他更简单的算法来分离图像中的斑点,而无需使用循环和条件语句,以便可以在Sapera中实现它,但是现在我只需要其matlab代码或算法即可。
看起来,所有Sapera操作都属于点对点或邻域操作(=图像处理)家族,几乎没有什么可以帮助您分割出斑点。 (实际上,没有函数会返回“少量的东西”;它们都返回完整的图像或标量值。)
作为解决方法,您可以
将处理限制在感兴趣的区域(垂直条纹一定包含斑点-但您可以忽略侧面);
使用horizontalSum函数获取图像轮廓,在其中可以找到与斑点相对应的峰(您必须自己对其进行编程,但是数据量大大减少了);
同样,使用verticalSum查找水平极限。
考虑到斑点的出色分离,这应该足以为每个斑点划定边界框。
正如您在图像的垂直轮廓图上所看到的那样,峰值检测很容易(前提是要避免横线)。
而且水平轮廓确实是无缝的。
为了方便地从点状峰中分离出线路而无需进行许多连接检查,我将:
如何计算局部椭圆率:
x^2
, y^2
或xy
加权求和,其中x和y是在峰位置的原点坐标。 在仅具有水平或垂直线而没有对角线的特殊情况下,您也只需计算x^2
和y^2
加权矩,并且仅接受合理相等的矩。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.