我正在努力检测显微镜图像中的细胞,如下图所示。由于显微镜载玻片上的瑕疵,通常会绘制出虚假的轮廓,例如下图中图例下方的轮廓。

我目前正在使用this solution清理它们。这是基本思想。

# Create image of background
blank = np.zeros(image.shape[0:2])
background_image = cv2.drawContours(blank.copy(), background_contour, 0, 1, -1)

for i, c in enumerate(contours):
    # Create image of contour
    contour_image = cv2.drawContours(blank.copy(), contours, i, 1, -1)
    # Create image of focal contour + background
    total_image = np.where(background_image+contour_image>0, 1, 0)
        # Check if contour is outside postive space
        if total_image.sum() > background_image.sum():
            continue

python - 检测轮廓交点而无需绘制-LMLPHP

这按预期工作;如果total_image区域大于background_image的区域,则c必须在目标区域之外。但是绘制所有这些轮廓非常慢,并且检查数千个轮廓需要花费数小时。 是否有更有效的方法来检查轮廓是否重叠(不需要绘制轮廓)?

最佳答案

我认为目标是排除进一步分析的外部轮廓?如果是这样,最简单的方法是使用红色背景轮廓作为遮罩。然后使用蒙版图像检测蓝色单元格。

# Create image of background
blank = np.zeros(image.shape[0:2], dtype=np.uint8)
background_image = cv2.drawContours(blank.copy(), background_contour, 0, (255), -1)

# mask input image (leaves only the area inside the red background contour)
res = cv2.bitwise_and(image,image,mask=background_image )

#[detect blue cells]

python - 检测轮廓交点而无需绘制-LMLPHP

关于python - 检测轮廓交点而无需绘制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58756401/

10-14 19:29