gpt4 book ai didi

python - 图像中土壤颗粒分水岭以外的替代分割技术

转载 作者:行者123 更新时间:2023-12-02 15:21:34 27 4
gpt4 key购买 nike

我正在寻找一种替代方法来分割以下土壤颗粒图像中的颗粒,而不是在 python 中进行分水岭分割,因为它可能会进一步误导对颗粒的正确检测,我正在研究边缘检测图像(使用 HED 算法)作为附上..我希望找到一种更好的方法来分割颗粒以进行进一步处理,因为我想在我的项目中获得图像中每个多边形的面积..在此先感谢
我也在询问随机游走分割或任何其他可用的方法。

enter image description here
enter image description here

最佳答案

您可以尝试使用 Connected Components with Stats 已经实现为 cv2.connectedComponentsWithStats 执行组件标记。使用您的二进制图像作为输入,这是假彩色图像:

enter image description here

每个对象的质心可以在 centroid 中找到参数和面积等其他信息可以在status中找到。从 cv2.connectedComponentsWithStats 返回的变量.这是标有每个多边形区域的图像。您可以使用最小阈值区域进行过滤以仅保留较大的多边形

enter image description here

代码

import cv2
import numpy as np

# Load image, Gaussian blur, grayscale, Otsu's threshold
image = cv2.imread('2.jpg')
blur = cv2.GaussianBlur(image, (3,3), 0)
gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Perform connected component labeling
n_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh, connectivity=4)

# Create false color image and color background black
colors = np.random.randint(0, 255, size=(n_labels, 3), dtype=np.uint8)
colors[0] = [0, 0, 0] # for cosmetic reason we want the background black
false_colors = colors[labels]

# Label area of each polygon
false_colors_area = false_colors.copy()
for i, centroid in enumerate(centroids[1:], start=1):
area = stats[i, 4]
cv2.putText(false_colors_area, str(area), (int(centroid[0]), int(centroid[1])), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 1)

cv2.imshow('thresh', thresh)
cv2.imshow('false_colors', false_colors)
cv2.imshow('false_colors_area', false_colors_area)
cv2.waitKey()

关于python - 图像中土壤颗粒分水岭以外的替代分割技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60345906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com