超级像素分割问题(python中的opencv)——分割遮罩轮廓中的孔

超级像素分割问题(python中的opencv)——分割遮罩轮廓中的孔,python,opencv,computer-vision,image-segmentation,Python,Opencv,Computer Vision,Image Segmentation,我正在用Python中的OpenCV尝试超级像素分割。我尝试过实现LSC、SLIC和SEEDS算法来分割细胞核,然而,到目前为止,只有SEEDS算法有效。通过.getLabelContourMask()方法创建的分段遮罩中的计数包含LSC和SLIC算法的孔,这导致使用floodfill()方法时遮罩的整个(LSC)或大部分(SLIC)泛洪。趋势是——分割效果越好(例如LSC中的比率值越低),遮罩中的轮廓越容易泄漏(我假设不会发生这种情况)。只有种子按预期工作-遮罩轮廓中没有明显的孔/开口,因此只

我正在用Python中的OpenCV尝试超级像素分割。我尝试过实现LSC、SLIC和SEEDS算法来分割细胞核,然而,到目前为止,只有SEEDS算法有效。通过.getLabelContourMask()方法创建的分段遮罩中的计数包含LSC和SLIC算法的孔,这导致使用floodfill()方法时遮罩的整个(LSC)或大部分(SLIC)泛洪。趋势是——分割效果越好(例如LSC中的比率值越低),遮罩中的轮廓越容易泄漏(我假设不会发生这种情况)。只有种子按预期工作-遮罩轮廓中没有明显的孔/开口,因此只有种子点周围的区域在使用泛光填充()后被淹没。有人有过同样的经历吗?你知道为什么会这样吗(LSC和SLIC的OpenCV实现会有问题吗?)?可以采取任何措施关闭LSC/SLIC遮罩中的轮廓/边缘吗?这里是comp sci的新手,谢谢你的帮助

LSC的测试代码:

lsc = cv2.ximgproc.createSuperpixelLSC(image, region_size=25, ratio=0.1)
lsc.iterate(100)
lsc_mask = lsc.getLabelContourMask() 
cv2.imwrite("lsc_mask.tif", lsc_mask) #holes visible when zooming in

x, y = lsc_mask.shape
m = np.zeros((x+2, y+2),dtype=np.uint8)

for point in nuclei_coordinates:
    retval, lsc_mask_flooded, m_flooded, rect = cv2.floodFill(image=lsc_mask, mask=m, seedPoint=point, newVal=(255,255,255), loDiff=0, upDiff=0) 

cv2.imwrite("lsc_mask_flooded.tif", lsc_mask_flooded) #almost whole image flooded
cv2.imwrite("m_flooded.tif", m_flooded*255) 


我认为使用LSC或LIS背后的想法是将其与分水岭算法结合使用。这样,您可以得到一个图像,其中有可见的和连续的部分轮廓

Java代码示例:

SuperpixelLSC superpixelLSC = Ximgproc.createSuperpixelLSC(src, region_size);
superPixelLSC.iterate();
superPixelLSC.getLabels(markers);
Imgproc.watershed(src, markers);

然后,您可以在分水岭算法结果上检测轮廓。

示例显示了完全相同的问题。没有人注意到这一点,或者这是故意的。您是否尝试将可选参数设置为
getLabelContourMask()
?@CrisLuengo谢谢!正如您所指出的,在文档中提供的掩码示例中已经可以看到该问题。我会尝试不同的图书馆。
SuperpixelLSC superpixelLSC = Ximgproc.createSuperpixelLSC(src, region_size);
superPixelLSC.iterate();
superPixelLSC.getLabels(markers);
Imgproc.watershed(src, markers);