我需要从图像中提取路径/线条。我对此输入应用拉普拉斯滤波器。在拉普拉斯滤波图像中,要提取的线条可以看作是连接形成线性对象的低值像素,高值像素形成其边界(定义线性路径的粗细)。问题是这些线之间有更多的像素,它们也具有相似的值。设置阈值以提取这些行不起作用。应用熵或 gabor 过滤器等过滤器也不起作用。使用 HoughP 或 Hough 变换没有任何意义,可能参数设置不正确。我需要帮助从图像中提取这些线条/路径。
1 回答
0
下面的代码使用cv2.HoughLinesP()
阈值图像来生成:
import cv2
import matplotlib.pyplot as plt
import numpy as np
# Threshold
img = cv2.imread("subset_comp.tif")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, img_thr = cv2.threshold(img_gray, 150, 255, cv2.THRESH_BINARY)
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Thresholded")
axs[0].imshow(img_thr, aspect="auto", cmap="gray")
# Find lines
lines = cv2.HoughLinesP(
img_thr, rho=1, theta=np.pi / 180, threshold=128, minLineLength=600, maxLineGap=30,
)
lines = lines.squeeze()
axs[1].set_title("Grayscale with Lines")
axs[1].imshow(img_gray, aspect="auto", cmap="gray")
for x1, y1, x2, y2 in lines:
axs[1].plot([x1, x2], [y1, y2], "r")
fig.show()
于 2022-01-30T00:24:05.010 回答