2017-02-16 39 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)