일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C++
- 자료구조
- classification
- 인공지능
- MySQL
- SIFT
- 강화학습
- opencv
- image processing
- machine learning
- DP
- 머신러닝
- 그래프 이론
- 백준
- AlexNet
- canny edge detection
- exists
- Reinforcement Learning
- IN
- dynamic programming
- MinHeap
- Python
- Mask Processing
- edge detection
- sklearn
- 딥러닝
- TD
- BFS
- dfs
- clustering
- Today
- Total
JINWOOJUNG
[ 영상 처리 ] Ch4. Edge Detection 본문
본 영상 처리 개념과 기법들에 대한 공부를 진행하면서 배운 내용들을 중심으로 정리한 포스팅입니다.
책은 Computer Vision: Algorithms and Applications를 기반으로 공부하였습니다.
또한, 인하대학교 박인규 교수님의 디지털 영상 처리 과목을 기반으로 제작된 포스팅입니다.
Before This Episode
지난 시간엔 여러 Filter들을 학습하였다. 특히, Sobel Filter의 경우 Correlation Filter 중 하나로, x,y 방향으로의 Edge를 검출하는데 유용하다. Gaussian에서 확장된 Bilateral Filter의 경우 Intensity Difference를 고려하여 Edge를 보존함과 동시에 Smoothing을 통한 Noise 제거를 진행함을 배웠다. 그렇다면 Edge는 어떻게 발생할까?
질감의 변화, 표면, 그림자, 객체의 경계부분 등 다양한 상황에서 Edge는 발생한다. 이러한 Edge는 특히 급격한 밝기 변화에서 발생하며, 그렇기에 Sobel Filter로 효과적으로 검출 가능하다.
왼쪽 이미지를 횡방향 단면으로 잘라서 Intensity를 나타낸 것이 가운데 그래프이다. 이러한 급격한 Intensity 변화는 미분과정에서 기울기의 변화를 유발한다. 따라서 미분값을 그래프로 나타내면 오른쪽과 같은데, 기울기의 Peak점이 결국 Edge가 됨을 쉽게 확인할 수 있다. 흰색(255) -> 검은색(0) 에서 발생되는 Edge의 경우 Intensity의 미분값은 감소하다가 Edge(Peak Point)를 기준으로 다시 증가함을 확인할 수 있다.
Differentiation anc Convolution
이처럼 Edge를 찾기위해 $x$ 방향으로의 Partial Derivative(편미분)의 공식은 위와 같다. 우리가 다루는 영상은 Discrete Data이기 때문에, 이러한 편미분 과정을 Differences(차분)으로 근사화할 수 있다.
즉, $\varepsilon$가 1이기에 현재 픽셀인 $x$와 인접 픽셀인 $x+1$의 픽셀 Intensity의 차분을 구하는 것이다. 현재 픽셀의 Intensity는 -1이 곱해져 있기 때문에, Mask가 $ [ -1 , 1] $인 형태와 동일한 것이다.
따라서 x,y 각 방향의로의 차분과 그에 따른 Filter, Gradient를 추출한 결과 다음과 같다. x방향으로의 필터는 위와 같이 설계되어 있으므로, 어두운 부분에서 밝아지는 부분으로의 Edge가 추출됨을 확인할 수 있다.
Image Gradient
결국 Edge를 찾는 과정은 Image Gradient(기울기, 변화도)를 계산하는 것이다. 한 픽셀에 대하여 Image Gradient Vector는 위와 같이 표현된다.
위와 같이 각 방향으로의 Gradient를 계산할 수 있으며 우리는 Gradient Vector의 크기와 방향을 계산할 수 있다.
Effect of Noise
결국 Edge는 인접 픽셀과의 차분을 계산한 Gradient를 통해 추출함을 확인하였다. 하지만 실제 환경에서는 대부분 모든 Signal에 대하여 Noise가 존재한다.
Pixel Intensity $f(x)$를 보면 위와 같이 +,-에 대한 Noise가 모두 존재한다. Gradient를 기반으로 Edge를 탐색해야 하는데, Noise에 의한 Gradient 역시 측정되기에 아래처럼 정확한 Edge를 추출하는데 힘들다. 따라서 Noise를 제거하기 위한 Smoothing이 요구되는데, 이는 Gaussian Filter 기반으로 진행된다.
생성되는 Noise가 Gaussian Noise임을 가정 하였을 때, $h$는 Gaussian Filter를 의미하고, Convolution을 통해 Filtering 된 영상의 픽셀 Intensity 분포는 3번째와 같다. 실제 Edge 부분을 제외하고 Noise가 제거됨을 확인할 수 있다. 동시에 Smoothing을 통해 Edge 부분에 약간의 Blur가 발생해 원본보다 Gradient 크기가 줄어듬을 확인할 수 있다.
이후 Gradient를 계산한 결과 정확히 Edge 지점에서 Peak를 보임을 확인할 수 있다. 이러한 과정은 머저 이미지에 대하여 Gausian Filtering을 적용 후 다시 Gradient 계산을 위한 차분을 계산한다. 이러한 많은 연산량을 줄이기 위해 Derivative of Gaussian Filter이 유도되었다.
Derivative of Gaussian(DoG)
가운데 보면 우선적으로 Gaussian Filter에 대해서 편미분이 진행됨을 확인할 수 있다. Gaussian Filter의 그래프의 양상을 보면 위와 같이 Derivation을 구할 수 있을 것이다. 이를 영상에 적용하여 Filtering한 결과 동일하게 Edge 부분에서 Peak를 보임을 알 수 있다. 계산 과정이 1단계 줄어들었지만 동일하게 Edge를 잘 추출하므로 위 방법이 더 계산 효율적이다.
Laplacian of Gaussian(LoG)
위 그래프와 같이 $e^{|x|}$ 형태의 분포를 가지는 것을 Laplacian Distribution이라 한다.
Laplacian은 결국 이차 미분을 의미하는데, Gaussian Filter에 2차 편미분을 적용하면 두번째와 같다. 이를 원본 이미지에 적용하여 Filtering하면 Edge부분에서 변곡점이 발생함을 확인할 수 있다. 결국 LoG 역시 Edge를 찾는데 활용할 수 있다.
Edge Detection : Laplacian
Laplacian은 2차 미분 형태로 필터가 위와 같이 만들어진다. Weight 간의 대비를 더 키움으로써 정밀한 Edge 탐색이 가능한데, 현재 Weight들의 합이 0이기 때문에 따로 Normalization 과정이 요구되지 않음을 유추할 수 있다.
Edge Detection : Sobel
Edge Detection에 사용되는 Sobel Filter는 위와 같다. Filter Size에 따른 Edge 검출 결과를 비교해보자. Filter Size가 작을수록 Noise에 민감하기 때문에 Edge의 검출 성능이 낮아진다. 하지만, 감지한 Edge가 실제 Edge라 하면 정확한 Edge의 위치를 추정할 수 있다.
Filter Size가 커지면, Noise의 민감도가 낮아져 정확한 Edge 검출이 가능하다. 하지만, 실제 Edge의 정확한 위치를 추정하기 어렵다. 이는 현재 Filtering 하고자 하는 Pixel로 부터 넓은 범위의 인접 Pixel을 모두 고려하기 때문이다.
Mask Properties
- Smoothing
Smoothing의 경우 모든 Weight가 양수 혹은 0이기 때문에 기존의 밝기 유지가 가능하다. 또한, Weight Sum이 1이기 때문에 원본 이미지가 어느정도 보존된다. 또한, Smoothing의 정도는 Mask Size에 비례하며, 결국 이러한 Smoothing 과정은 High Frequency인 Noise를 제거하기 때문에 "Low-Pass" Filter 이다.
- Derivatives
+,- Opposite Sign은 결국 Edge와 같이 크게 대조되는 부분에서 높은 반응을 보이게 한다. Sobel Filter로 예를 들어보자.
2열을 기준으로 양 옆은 서로 Opposite Sign을 가지는 Weight를 가진다. 이는 왼쪽이 밝고 오른쪽이 어두운 Edge 부분에서 높은 Response를 보인다. 즉, Mask와 높은 Correlation을 가지는 영상의 부분에서 높은 Response를 보임을 알 수 있다. 또한, Weight의 합이 0이기 때문에 constant regions 즉, 일정한 Pixel Intensity를 가지는 부분에서는 Response가 0이다. Weight와 역의 상관관계를 가지는 부분 역시 대조가 심한 지역인데, 이는 높지만, 음의 Response를 보인다. 결국 절댓값을 씌우면 높은 양이든, 음이든 대조가 심한 Edge부분에서 높은 상관관계를 보임을 알 수 있다.
Effect of $\sigma$ on Derivatives
Edge를 다루는 과정에서 자꾸 Derivative라는 단어가 나오는데, 미분값의 Peak 부분이 결국 Edge이고 이미지에서는 Filter를 통한 차분을 계산하여 이를 대체하기 때문이다.
$\sigma$에 따른 Edge 탐색의 결과를 알아보자. $\sigma$ 값이 커질수록 Blur 효과가 심해진다. 따라서 굵직한 Edge(Large Scale)가 검출된다.
반면, $\sigma$가 작아질수록 Blur 효과가 적어져 미세한 Edge까지 추출됨을 확인할 수 있다.
Gradient Magnitude
Gradient는 x,y 각 방향으로의 미분, 이미지에서는 차분 값이다. 따라서 Gradient Magnitude는 결국 Gradient의 크기(강도)를 나타낸다. 오른쪽은 Gradient Magnitude를 나타내는 이미지인데, 모자 부분에서는 적은 Response를 보인다. 이는 Edge이긴 하지만, 모자와 배경의 Intensity Difference 가 작기 때문이다. 반면, 어깨 부분은 Response가 큰데, 어깨와 머리카락의 Intensity Difference가 크기 때문이다. 결국 Gradient Magnitude는 Edge 부분에서 큰 Response를 보이며, Difference가 클수록 더 큰 Response를 보인다.
따라서 Gradient Magnitude를 구하면 Edge를 찾아낼 수 있다. 하지만 오른쪽 이미지에서는 Edge의 두께가 1이 아닌 부분이 존재한다. 이처럼, Gradient Magnitude 기반의 Edge Detectiond은 두께가 발생함을 확인할 수 있다. 정확한 Edge 검출을 위해서는 두께를 1로 만들어 줄 필요가 있다. 이를 위해서 Thresholding과 Thining Processing이 요구된다.
Thresholding
Threshold $T$을 설정하고, Gradient Magnitude가 $T$보다 크면 1, 작으면 0으로 처리하여 $T$를 기준으로 Edge를 판단하는 후보군을 형성한다. 하지면 여전히 Edge의 Localization이 부정확하고 넓은 범위에서 판단된다. 따라서 Thining 작업이 추가적으로 필요하다.
Thining
Thresholding으로 추출된 Edge 후보군에 대하여 Thining을 통해 두께를 1로 만든다. 왼쪽에 표시된 Gradient Magnitude를 보면 Gradient Magnitude 내에서도 Peak 점이 존재함을 확인할 수 있다. 따라서 특정 방향을 설정하여 Gradient Direction 에서의 Local Maximum을 추출해야 정확한 Edge의 위치를 특정할 수 있다.
설정된 Gradient Direction 내에서 Local Maximum을 추출하는 과정은 비교적 간단하다. 단순히 최댓값만 남기고 모두 0으로 만듬으로써 두께를 1로 만들 수 있다. 만약 해당 방향으로 Gradient Magnitude가 존재하지 않다면 선형 보간법으로 계산한 값(p,r)을 사용한다. 이때, 선형보간법은 단순히 인접한 Gradient Magnitude를 통해 거리에 따른 Weight를 부여하여 해당 부분을 보간하는 방법이다.
왼쪽은 Thresholding을 적용한 결과이고, 오른쪽은 Thining을 추가적으로 적용한 결과이다. 그렇다면, Thresholding을 위한 Threshold $T$는 어떻게 설정할까?
왼쪽 그림을 보면 작은 $T$를 가지는 경우 사소한 Edge 까지 모두 검출하며, 높은 $T$를 가지는 경우 중간중간에 끊기는 Edge가 존재할 수 있다. 따라서 높은 $T$를 기반으로 검출한 Edge에 대해서 끊어진 부분을 낮은 $T$보다 높은 Edge를 활용하여 이어주는 알고리즘이 Canny Edge Detection이다. 이에 대한 결과는 오른쪽 상단과 비교하면 쉬운데, Canny를 통해 검출한 Edge는 모자 부분의 Edge가 이어짐을 확인할 수 있다.
Canny Edge Detection의 동작 방법은 다음 포스팅에 올려 두었다.
'2024 > Study' 카테고리의 다른 글
[ 영상 처리 ] Part3-1. OpenCV Edge Detection(C++) (0) | 2024.04.15 |
---|---|
[ 영상 처리 ] Ch5. Image Pyramid and Warping (0) | 2024.04.13 |
[ 영상 처리 ] Ch3. Mask Processing(Filtering in Spatial Domain) (0) | 2024.04.11 |
[ 영상 처리 ] Part2-3. OpenCV Mask Processing(C++) (0) | 2024.04.08 |
[ 영상 처리 ] Part2-1. OpenCV Mask Processing(C++) (0) | 2024.04.07 |