GPU blob边框连接组件标签

我有一个二进制图像,将有一个或多个斑点。 我想要每个blob的像素列表。 如果我可以为每个blob找到一个种子点,我可以通过填充来查找blob的像素。

对这个问题做一些研究,我想我想要的算法是“连接组件标签”。 我看到的大多数示例只是对Blob输出进行颜色编码。 使用这种算法,我可以收集:blob上的一个点和blob的轴对齐边界框?

连接的组件标签听起来像是我需要的正确算法吗? 有没有人有一个很好的CUDA实现?


你的建议是一个很好的起点。

逐行扫描图像,当你遇到黑色像素开始充满水。 填写时,可以保持边界框更新。 填写完毕后,您只需继续扫描。

Fill(img, x, y, xm, xM, ym, yM):
    img[x][y]= white
    xm= min(xm, x); xM= max(xM, x); ym= min(ym, y); yM= max(yM, y);
    if x >= 0 and img[x-1][y] == black:
        Fill(img, x-1, y)
    if x < w  and img[x+1][y] == black: 
        Fill(img, x+1, y)
    if y >= 0 and img[x][y-1] == black: 
        Fill(img, x, y-1)
    if y < h  and img[x][y+1] == black: 
        Fill(img, x, y+1)

FloodFill(img):
    for y in range(h):
        for x in range(w):
            if Img[x][y] == black:
                xm= xM= x; ym= yM= y
                Fill(img, x, y, xm, xM, ym, yM)
                Store(x, y, xm, xM, ym, yM)

由于洪水充填堆积密集,建议采用基于扫描线的方法。

链接地址: http://www.djcxy.com/p/25397.html

上一篇: GPU blob bounding box connected component labeling

下一篇: Box filter with cuda c