Python 特定方向的直线检测

Python 特定方向的直线检测,python,image,Python,Image,我有下面的彩色图像 我正试图提取倾斜的平行线。这些线的方向相同 我首先尝试使用倾斜的Sobel内核进行卷积: from scipy import ndimage A = misc.imread('chronogram.png') kernel = np.array([[-2,-1,0],[-1,0,1],[0,1,2]]) im_conv = ndimage.convolve(rip_log, side_lobes_kernel) 我还尝试了Canny过滤器和Hough变换,

我有下面的彩色图像

我正试图提取倾斜的平行线。这些线的方向相同

我首先尝试使用倾斜的Sobel内核进行卷积:

from scipy import ndimage   
A = misc.imread('chronogram.png')    
kernel = np.array([[-2,-1,0],[-1,0,1],[0,1,2]])
im_conv = ndimage.convolve(rip_log, side_lobes_kernel)

我还尝试了Canny过滤器和Hough变换,但图像上的线条不够清晰。或者我没有使用正确的参数

from skimage.transform import (hough_line, hough_line_peaks,
                           probabilistic_hough_line)
from skimage.feature import canny
edges = canny(rip_log, sigma=3)
theta = np.arange(np.pi/6,np.pi/3, 0.01) # To look for the right angle
hough = hough_line(rip_log,theta)

我认为使用卷积内核可能是正确的方法,但由于在图像处理方面缺乏经验,我不确定如何继续。

只需使用所需的条纹进行二维卷积即可。使用小型内核(在您的示例中为3x3)将极易受到噪声的影响。取而代之的是,使其与信号一样宽,这似乎是图像的全宽

至于如何使用SciPy:

import random
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt

# generate a kernel to convolve with
line = np.rot90(np.eye(50))
plt.imshow(line)


因为内核宽度与数据匹配,并且我使用了“有效”范围进行卷积,所以输出是一维的(或者只有一个维度的大小不是1)

为了给您一个很好的答案,如果您还没有看到,请看一看,这可能会对我们有所帮助。如果你能提供一个答案,它可能也会很有用。请把你的问题展示出来。你应该包括一个你有问题的代码,然后我们可以尝试帮助解决具体的问题。你也应该阅读。
# generate some synthetic data
noisy = np.random.random((200, 50)) * 0.3
for i in range(30):
    x = random.randrange(150)
    noisy[x:x+50,:] += line
plt.imshow(noisy)
# convolve the two
result = signal.convolve2d(noisy, line, mode='valid')
plt.plot(result)