Canny Edge Detection.
Canny Edge는 이름 그대로 1986년에 John F Canny 에 의해 개발된 Edge 검출 알고리즘이다.
캐니엣지검출 알고리즘은 크게 다섯가지 단계로 구성되어 있다.
1. 블러링을 통한 노이즈 제거
2. 마스크를 이용한 엣지 검출
3. Non-Maximum Value 제거
4. Double Threshold 로 크기 구분
5. 엣지 연결
일반적으로는 OpenCV 에서 함수로 제공하고 있지만 영상의 이해를 위해 공부하는 차원에서
직접 구현해 보기로 했다.
영상관련된 분야로 넘어와서 제일 먼저 했던 프로그램인지라 다이얼로그에 사진도 띄우지 못하고 기본적인
OpenCV 의 함수만을 사용하다보니 모양이 위와같이 나왔다.
ListBox에서 사진을 선택할 수 있고, 하단의 버틀을 누를때마다 새로운 윈도우를 띄워서 결과 영상을 보여준다.
제일먼저 연산에 사용할 이미지를 불러온다.
영상은 Gray Scale 로 변환하여 불러오게 된다.
불러온 이미지에 블러링을 통하여 노이즈를 감소시킨다.
논문에서 사용된 것과 마찬가지로 가우시안 블러를 사용하였고
위와 같은 5 X 5 마스크를 컨벌루션 연산을 통해 구하였다.
다음은 소벨 마스크를 이용하여 전체적인 엣지를 구하는데 이또한 OpenCV 함수를 사용하지 않고
위와 같은 마스크를 콘벌루션 연산을 통해 각각 Magnitude 와 Phase 값을 구하였다.
이때 Magnitude는 계산을 간단히 하기위해 x축 데이터와 y축 데이터의 절대값의 합으로 구하였고
Phase는 arctan 함수를 이용하여 구하였다.
phase는 45도 단위로 범위를 나눠서 총 네가지 경우로 분류를 하였다.
그다음은 위에서 Sobel Operation 을 통해 얻은 외곽선에서 Non-Maximum Value 를 구분해 내야 한다
방법은 여러가지가 있겠지만 이번 실험에서는 Phase 방향의 앞 뒤 픽셀의 데이터를 비교하는 방식으로 Non-Maximum Value 를 찾았다.
Phase 방향의 앞 뒤 픽셀이 모두 255의 값을 가지면 그 픽셀은 Non-Maximum value 로 살려두고
전후 두 픽셀중 하나라도 0의 값을 가지면 그 픽셀은 값은 0으로 바꿔주게 된다.
다음 단계는 위의 사진처럼 검출된 엣지를 크기에 따라 세 단계로 구분해야한다.
위의 단계에서 살아남은 데이터들을 Double Threshold 를 이용하여 세 단계로 구분을 한다.
Low Threshold 보다 낮은 Magnitude를 가지는 픽셀은 엣지가 아니라 판단하고 0으로 버리고
Low Threshold 와 High Threshold 사이의 값은 엣지인지 아닌지 판별이 필요한 값으로 두고 128의 값으로
High Threshold 이상의 값은 확실한 엣지로 판단하고 255의 값을 가지게 한다.
이후 128의 값을 가지는 픽셀들을 Blob 방식으로 따라가다가 255의 값을 가지는 Edge를 만나게 되면 그 따라온 픽셀들은
실제 엣지라 판단을 내리고 그 크기를 255로 바꿔주고,
반대의 경우로 따라가다가 실제 강한 Edge를 만나지 못하고 끝나버릴 경우 그 픽셀은 Edge 가 아니라 판단하고
크기를 0으로 치환해 주게 된다.
이와 같은 연산을 영상 전체 영역에 대하여 수행하게 되면 실제 엣지와 연결된 엣지들은 살아남고
엣지와 연결되지 않은 애매한 값들은 제거된다.
이렇게 얻는 영상이 Canny Algorithm 으로 구한 Edge 가 된다.
Lenna 영상에 LowThreshold 15, HighThreshold 60을 주고 연산한 Edge영상은 다음과 같다.
OpenCv에 구현된 케니 엣지 연산의 결과와는 다소 차이가 있지만 다른 마스크를 통한 엣지 검출에 비해
상당히 만족스러운 결과를 볼 수 있었다.
결과의 차이는 OpenCV 에서 구현한 Canny Detection 단계에서 뭔가 가공된 연산이 있지 않을까.. 하는 생각을하고
Canny Edge Detection 프로그램은 여기서 마친다.
'전공관련 > 실습 프로그램' 카테고리의 다른 글
Gender Classification (0) | 2013.06.14 |
---|---|
웹캠을 이용한 가위바위보 게임 (18) | 2013.04.16 |
Skin Color Detection에 적합한 Color Model 을 찾기위한 간단한 실험 (0) | 2013.04.16 |