우리는 이전 포스트에서 두개의 필터에 대해 학습했다.
box filter를 사용하면 원본에는 없는 흐릿한 선들이 생기기도 하는데 이를 ghost line이라 불렀다. 이는 box filter의 모양 때문이었다. 이를 보안하기 위해 적용한 것이 Gaussian filter이었다. Gaussian은 중심의 가장 큰 값이고 주변으로 퍼져나갈수록 값이 작아진다. 즉 중심에 더 많은 weight를 주고 거리가 멀어질 수록 weight가 감소하는 kernel인 것이다.
standard deviation
(표준편차) 가 클수록
→ 내 자리의 값을 구하기 위해 더 멀리있는 값까지 가져오게 된다.
→ 내 값이 많이 희석된다.
→ smoothing 효과가 커진다.
왼쪽은 분산이 1인 정규분포이고 오른족은 분산이 3인 정규분포이다. 솟아 오른 부분이 얼마나 뚱뚱한지 (variance)로 나를 주위로 얼마나 weight를 줄 것인지 판단한다.
sigma
아래 사진을 보면 sigma(표준편차, standard deviation) 값에 따라 smoothing되는 정도가 다르다.
sigma는 Gaussian Distribution을 중심으로 대칭을 이루고 그 면적이 1에 해당한다. 아래 사진을 보면 sigma 값이 작을 수록 중심에 더 집중이 되고 값이 클수록 더 넓게 분포된 것을 알 수 있다.
sigma값에 따라 다양한 결과를 가질 수 있다. sigma가 10일 때를 보면 본래의 내 정보가 너무 많이 사라지는 것을 알 수 있다. 따라서 상황에 따라 적절한 sigma값을 설정해야 한다.
처음 우리는 이미지를 미분하여 특성을 찾아내고자 했다. 그런데 미분을 하니 noise 가 많아 우리가 원하는 것을 찾지 못했다. 이에 미분을 하기 전에 smoothing을 적용시키려 한다.
사실 미분과 smoothing 적용시키는 것 모두 convolution을 계산하는 것이다. 이에 convolution의 commutative한 특징을 사용하여 kernel끼리 먼저 convolution을 한 후 결과를 이미지랑 convolution을 한다. 이를 통해 성능을 올릴 수 있다.
가우시안을 미분하면 다음과 같다.
스무딩을 위해 사용할 가우시안과 특징을 찾기 위한 미분 과정을 합쳐서 하나의 필터로 만들었다.
필터의 모양은 아래와 같다.
만약 아래처럼 나오는 결과를 급격하게 변하는 절벽과 같은 값으로 만들고 싶다면 가우시안의 표준 편차 값을 작은 것을 사용 (picky) 하면 된다.
voundary
: edge 중 의미를 가지는 영역을 가르는데 결정적인 역할을 하는 것F(x) 함수를 보면 픽셀 값이 한 쪽은 어둡고 한 쪽은 밝은 것을 볼 수 있다. 이 함수를 한 번 미분한 F’(x)를 우리는 edge인 정도라고 이야기 한다. 하지만 아직 edge는 아니다.
이제 여기서 edge를 찾기 위해 threshold를 설정한다. 그리고 이 임계값을 넘으면 edge로 보기로 한다.
미분을 하여 threshold를 정해 edge를 찾는 방법에는 문제점이 존재한다.
⇒ 그러나 edge detection을 통해 하고자 하는 것은 선을 찾는 것이다. 즉, 면적을 접하면 안된다는 것이다. 얇을수록 좋고 두꺼울수록 왜곡된다.
threshold를 정하는 것 때문에 edge가 thick해지는 일이 발생했다. 그러면 어떻게 edge를 얇게 만들 수 있을까? 방법은 간단하다 최댓값을 구하면 된다!
Smoothing
←→Localization
스무딩을 많이 할수록 edge는 더 thick해진다.
concept
threshold를 여러개 고른다. 그리고 애매한 애들 중 강한 애들 근처에 있는 것은 살리는 방식으로 사용한다.
노이즈 제거를 위한 가우시안 필터링
gradient 계산 ( 방향 & 크기)
NonMax Suppression or Non-maximum suppression
⇒ Thick Edge problem solution
Hysteresis edge tracking
⇒ 원하지 않는 값이 사라지는 문제 해결
strong edge
weak edge