2017-02-16 49 views
-1

我有线路检测在特定方向上蟒

Power chronogram

我试图提取斜平行线以下着色图像。这些线路的方向相同。

我第一次尝试做卷积倾斜索贝尔内核:

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) 

convolution result

我也试过坎尼过滤器和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) 

我认为,使用卷积核可能是正确的道路要走,但其在图像处理一些经验,我对如何进行把握。

+0

为了给你一个很好的答案,它可能会帮助我们,如果你有一个目光[问]如果你还没有。如果你可以提供[mcve],它可能也很有用。 – Mat

+0

请[编辑]你的问题,以显示[你迄今为止尝试过的](http://whathaveyoutried.com)。您应该包含您遇到问题的代码[mcve],然后我们可以尝试帮助解决特定问题。你还应该阅读[问]。 –

回答

0

只要做一个与你想要的条纹二维卷积。使用一个小内核(在你的例子中是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) 

enter image description here

# 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) 

enter image description here

# convolve the two 
result = signal.convolve2d(noisy, line, mode='valid') 
plt.plot(result) 

​​

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