Рассмотрим черно-белое изображение. Что такое линия? при масштабировании по вертикальной линии наблюдается контраст слева направо (или справа налево).
Таким образом, в solid областях изображения (где нет ребер), этот фильтр свертки генерирует 0 (потому что 1 и -1 отменяют друг друга). Но когда фильтр достигает линий, Свертка генерирует большое положительное или отрицательное значение.
Может применяться для обнаружения горизонтальных линий с использованием одного из этих фильтров (при условии, что размер фильтра равен 3x3):
[1 1 1
0 0 0
-1 -1 -1]
#OR
[-1 -1 -1
0 0 0
1 1 1]
Чтобы обобщить идею, a 3x3
окно не достаточно велико для других градусов. Лучше увеличить размер этого сверточного фильтра на другие градусы. Например, для фильтра свертки 45 градусов размера 5 вы можете использовать:
0 0 0 1 0
0 0 1 0 -1
0 1 0 -1 0
1 0 -1 0 0
0 -1 0 0 0
Чтобы создать фильтр со случайными значениями степени, вы можете использовать следующую функцию:
import numpy as np
def create_filter(filter_size, degree):
filter = np.zeros((2*filter_size+1, 2*filter_size+1))
tetha = (degree / 180) * np.pi
for x in range(-filter_size, filter_size+1):
y = int(x * np.tan(tetha))
if np.abs(y) + 1 <= filter_size and np.abs(y) - 1 <= filter_size:
filter[x + filter_size][y + filter_size + 1] = 1
filter[x + filter_size][y + filter_size - 1] = -1
return filter
create_filter(6, 30)
# Output:
# array([[ 0., 0., -1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., -1., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., -1., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., -1., 0., 1., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., -1., 0., 1., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., -1., 0., 1., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., -1., 0., 1., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., -1., 0., 1., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., -1., 0., 1., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., -1., 0., 1., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., -1., 0., 1., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., -1., 0., 1., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., -1., 0., 1., 0., 0.]])