在分水岭分割中设置标签优先级

时间:2020-11-02 03:34:01

标签: python opencv

我正在尝试使用分水岭分割来分割植物的叶子

path = '../Plant_Phenotyping_Datasets/Plant/Ara2013-Canon/ara2013_plant001_rgb.png'
img = cv.imread(path)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

thresh = cv.threshold(gray, 65, 255, cv.THRESH_BINARY)[1]
thresh = cv.medianBlur(thresh, 5)

kernel = np.ones((3, 3), np.uint8)
sure_bg = cv.dilate(thresh, kernel, iterations=3)

dist_transform = cv.distanceTransform(thresh, cv.DIST_L2, 5)
sure_fg = cv.threshold(dist_transform, 0.5*dist_transform.max(), 255, 0)[1]

sure_fg = np.uint8(sure_fg)
unknown = cv.subtract(sure_bg, sure_fg)

markers = cv.connectedComponents(sure_fg)[1]
markers = markers+1

markers[unknown == 255] = 0

cv.watershed(img, markers)
img[markers == -1] = [255, 0, 0]

此示例中的代码已调整:https://docs.opencv.org/master/d3/db4/tutorial_py_watershed.html。 目的是让opencv在“标记”的基础上对未知区域进行识别,它将每个确定的前景区域(必须是树叶区域)设置为标签,背景设置为1,未知区域(前景与地面之间的区域)背景)设为0。

原始图像和标记: enter image description here

但是,分割后的结果如下:

enter image description here

可能是因为工厂的蒸汽区域被标记为背景区域标签,所以在分水岭过程中,这是否让背景标签的优先级最低? 谢谢。

0 个答案:

没有答案