- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种替代方法来分割以下土壤颗粒图像中的颗粒,而不是在 python 中进行分水岭分割,因为它可能会进一步误导对颗粒的正确检测,我正在研究边缘检测图像(使用 HED 算法)作为附上..我希望找到一种更好的方法来分割颗粒以进行进一步处理,因为我想在我的项目中获得图像中每个多边形的面积..在此先感谢
我也在询问随机游走分割或任何其他可用的方法。
最佳答案
您可以尝试使用 Connected Components with Stats 已经实现为 cv2.connectedComponentsWithStats
执行组件标记。使用您的二进制图像作为输入,这是假彩色图像:
每个对象的质心可以在 centroid
中找到参数和面积等其他信息可以在status
中找到。从 cv2.connectedComponentsWithStats
返回的变量.这是标有每个多边形区域的图像。您可以使用最小阈值区域进行过滤以仅保留较大的多边形
代码
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/
我的问题是如何在 Android Watershed OpenCv 上计算图像中的对象数? 最佳答案 因为您没有告诉我们是哪一行导致了这些问题,但我强烈认为您误用了 erode() 和 dilate(
我正在使用精明的边缘检测和查找轮廓函数(均为 OpenCV)为分水岭变换创建标记。一切正常,但我对结果不是 100% 满意。原因是一些边丢失了,因此丢失了重要信息。更详细地说,我得到了一堆窗口(前 V
我正在尝试使用 OpenCV 分水岭算法 ( https://docs.opencv.org/3.1.0/d3/db4/tutorial_py_watershed.html ),但稍作改动。文档中有这
我正在为 OpenCV 中的分水岭编写代码。 但我希望分水岭边界是 4 点连接而不是 8 点连接。 目前是这个界面: void watershed(InputArray image, InputOut
我是一名优秀的程序员,十分优秀!