I need to extract path/lines from an image. I apply laplacian filter to this input. In laplacian filtered image, the lines to be extracted can be seen as low value pixels connected to form a linear object with high value pixels forming its border (defining the thickness of the linear path). The issue is there are many more pixels between these lines which also have similar values. Setting threshold to extract these lines does not work. Applying filters like entropy or gabor filter also did not work. With HoughP or Hough Transformation nothing meaningful comes out, probably arguments are not set properly. I need help extracting these lines/path from the image.
The code below uses cv2.HoughLinesP()
on the thresholded image to produce this:
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()