Я пытаюсь обнаружить линии только с помощью линейных фильтров.Моей первой попыткой было вращение ядра, подобного этому, но оно не сработало:
kernel = zeros((13,13))
kernel60 = zeros((13,13))
kernel[4] = [0,0,0,0,-1,-1,-1,-1,-1,0,0,0,0]
#kernel[5] = [0,0,0,0,0]
kernel[6] = [0,0,0,0,2,2,2,2,2,0,0,0,0]
#kernel[7] = [0,0,0,0,0]
kernel[8] = [0,0,0,0,-1,-1,-1,-1,-1,0,0,0,0]
rotate60 = zeros((2,3))
GetRotationMatrix2D((6,6),60,1, rotate60)
WarpAffine(kernel,kernel60,rotate60,CV_WARP_FILL_OUTLIERS, ScalarAll(0))
После этого я подготовил ядро, представляющее собой линейную комбинацию из двух ядер Собеля (управляемые фильтры).Это работает, но я бы предпочел не-sobel ядро, похожее на первую попытку.Любая альтернатива ядрам sobel?
Комбинация ядра Собеля:
kernel_x[0] = [-1,0,+1]
kernel_x[1] = [-1,0,+1]
kernel_x[2] = [-1,0,+1]
kernel_y[0] = [-1,-1,-1]
kernel_y[1] = [0,0,0]
kernel_y[2] = [+1,+1,+1]
normal_theta = radians(-30)
kernel = multiply(cos(theta),kernel_x) + multiply(sin(theta),kernel_y)
Затем фильтрация:
Filter2D(src,dst,kernel)
Я использую Python и numpy на компьютере с Windows.