엣지 감지 예시
- 수직 엣지를 검사하기 위해 컨볼루션 연산을 알아보자
- 컨볼루션 연산에서 data 에 곱해지는 행열을 Kernel 또는 Filter 라고 한다.
- 컨볼루션 연산에서는 아다마르 곱을 사용한다.
아다마르 곱셉
컨볼루션 연산
def conv2d(data, filters):
assert len(data) >= len(filters) and len(data[0]) >= len(filters[0])
result = []
for i in range(len(data) - len(filters) + 1):
row = []
for j in range(len(data[0]) - len(filters[0]) + 1):
temp = 0
for k in range(len(filters)):
for l in range(len(filters[0])):
temp += data[i + k][j + l] * filters[k][l]
row.append(temp)
result.append(row)
return result
- 기본 연산 방법
이것이 엣지를 검출할 수 있는 이유
data1 = [
[10,10,10,0,0,0],
[10,10,10,0,0,0],
[10,10,10,0,0,0],
[10,10,10,0,0,0],
[10,10,10,0,0,0],
[10,10,10,0,0,0],
]
- 위 이미지는 좌측은 밝은 색, 우측은 어두운 색으로 이루어져 있으며 우리는 중앙에 있는 수직 엣지를 인식해야한다.
kernel = [
[1,0,-1],
[1,0,-1],
[1,0,-1]
]
- 수직 엣지를 검출하기 위해 커널을 위와같이 설정하고 서로 컨볼루션 연산을 실행하면 결과는 다음과 같다.
[
[0, 30, 30, 0],
[0, 30, 30, 0],
[0, 30, 30, 0],
[0, 30, 30, 0]
]
- 수직 엣지가 검출되었다.
- 수직 엣지가 두꺼워보이는데, 이는 이미지가 작아서 그렇다.