영상에서 미분을 구하는 이뉴는 에지를 검출하기 위함이다.
에지 ( Edge )
- 영상에서 픽셀의 밝기 값이 급격하게 변하는 부분
- 일반적으로 배경과 객체, 또는 객체와 객체의 경계
좌측 상단의 수직형태로 바뀌는 부분을 Step Function 이라고 말하는데 이러한 형태는 실제로는 보기 드문 형태이다.
그렇기 때문에 우측 상단에 있는 형태처럼 Smoody한 형태로 바뀌는 형태가 보통이다.
또는 좌측 하단에 있는 형태처럼 노이즈가 들어가있는 경우도 볼 수 있는데 이러한 형태에 Gaussian Blur 필터를
적용시켜주면 우측 하단에 있는 형태처럼 바꿀 수 있다. ( 픽셀값 증가의 엣지 )
그렇기에 값이 급격하게 바뀌는 부분을 찾기 위해서 미분값을 사용하게 되는데
미분이라는 것은 간단히 말하면 변화율이라고 생각할 수 있다.
그래서 기본적인 엣지 검출 방법은
영상을 ( x , y ) 변수의 함수로 간주했을 때, 이 함수의 1차 미분 값이 크게 나타나는 부분을 검출하는 것이다.
위와같이 급격히 변하는 부분을 실제로 미분해서 그래프로 표현해보면 fx( x, y ) 의 그래프로 표현된다.
변화가 없는 부분은 0의 값을 갖는것을 볼 수 있고 변화가 시작되는 부분은 값이 상승 또는 하강하는 것을 볼 수 있다.
( 값이 가장 급격히 바뀌는 부분은 피크치를 갖는다. )그리고 T 값이 의미하는 것은 정해놓은 Threshold 값인데 미리 설정해 놓은 Threshold 값을 넘는 부분을 영상에서의 엣지라고 판단할 수 있다.
실제 영상에서의 엣지 검출을 우측 사진에서 볼 수 있는데 Threshold값을 얼만큼 지정해주느냐에 따라서
3픽셀 혹은 4픽셀 등으로 엣지가 검출될 수 있다. ( 위 이미지에 따른 값 도출 )
미분 계산 방식
미분에서의 계산방식을 살펴보면우리가 본래 알고 있는 미분 공식과 크게 다를건 없다.우리가 원래 알고있는 미분의 공식을 살펴보면 아래와 같다.
위와같은 미분 공식과 실제 영상에서 엣지를 구하기 위한 미분 계산 방식은 크게 차이나지 않는다.
아래 이미지를 참고하자
h 가 의미하는 것은 0으로 수렴하는 가장 작은 값인데
영상에서는 가장 작은 값이 1픽셀이기 때문에 h가 1이라고 생각하고 본다면
전진 차분 ( Forward Difference )
- 현재의 픽셀값과 현재 픽셀값 + 1 에 위치해있는 픽셀값의 미분값을 계산
후진 차분 ( Backward Difference )
- 현재의 픽셀값과 현재 픽셀값 - 1 에 위치해있는 픽셀값의 미분값을 계산
중앙 차분 ( Centered Difference )
- 현재의 픽셀값과 현재 픽셀값 + 1 에 위치해있는 픽셀값과
현재 픽셀값 - 1 에 위치해있는 픽셀값의 미분값을 계산
현재 영상에서 가장 정확한 미분값을 구하는 방법으로는 중앙차분이 많이 사용되고 있다.
미분값을 구할때 기본적으로 많이 사용하는 마스크 종류이다.
-1 0 1 의 마스크를 사용하게되면 노이즈에 취약하기 때문에 기본적으로 3 x 3 마스크를 사용하게 되고
그 중에서도 Prewitt , Sobel , Scharr 의 3종류가 있다.
Sobel : 자기자신에 대해서는 가중치를 주어 1:2:1의 비율로 필터링 ( 가장 많이 사용하는 형태 )
Scharr : 3:10:3 의 비율로 가우시안을 좀 더 잘표현하고 미분이 좀더 정확함
소벨 필터를 이용한 미분 함수
cv2.Sobel ( src, ddepth, dx, dy, dst, ksize, scale, delta, borderType )
cv2.Scharr ( src, ddepth, dx, dy, dst, ksize, scale, delta, borderType )
src : 입력영상
ddpeth : 출력영상 데이터 타입 ( -1이면 입력 영상과 같은 데이터 타입을 사용 )
dx : x 방향 미분 차수 dy : y 방향 미분 차수dst : 출력영상ksize : 커널 크기. ( Defalt = 3 )scale : 연산 결과에 추가적으로 곱할 값. ( Default = 1 )delta : 연산 결과에 추가적으로 더할 값. ( Default = 0 )borderType : 가장자리 픽셀 확장 방식 . ( Default = cv2.BORDER_DEFAULT )
* 보통 미분을 계산하기 위해서는 GrayScale 영상을 사용하는 것이 좋다. ( cv2.CV_32F )
보통 dx , dy 는 1,0 or 0,1 을 입력해준다.
실제 구현해보면
위와같이 어떤 부분이 미분값이 크고 어떤 부분이 미분값이 작은지를 직접 확인할 수 있다.
* 기둥부분을 자세히 보면 dx 와 dy 의 차이값을 확연히 알 수 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 영상의 특징 추출 _ 캐니 엣지 검출 (0) | 2022.05.31 |
---|---|
[Open CV] 영상의 특징 추출 _ 그래디언트와 엣지 검출 (0) | 2022.05.30 |
[Open CV] 기하학적 변환 _ 실전코딩 ( 문서 스캐너 ) (0) | 2022.05.28 |
[Open CV] 기하학적 변환 _ 리매핑 (0) | 2022.05.27 |
[Open CV] 기하학적 변환 _ 어파인 변환과 투시변환 (0) | 2022.05.26 |