0

我需要从图像中提取路径/线条。我对此输入应用拉普拉斯滤波器。在拉普拉斯滤波图像中,要提取的线条可以看作是连接形成线性对象的低值像素,高值像素形成其边界(定义线性路径的粗细)。问题是这些线之间有更多的像素,它们也具有相似的值。设置阈值以提取这些行不起作用。应用熵或 gabor 过滤器等过滤器也不起作用。使用 HoughP 或 Hough 变换没有任何意义,可能参数设置不正确。我需要帮助从图像中提取这些线条/路径。

4

1 回答 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 回答