Program/OPEN_CV

[Open CV] 영상의 특징 추출 _ 그래디언트와 엣지 검출

사막여유 2022. 5. 30. 08:04
728x90

 

영상의 그래디언트 ( Gradient )

 - 함수 f ( x , y )를 x축과 y축으로 각각 편미분 ( partial derivative ) 하여 벡터 형태로 표현한 것 

 

영상이라는 것은 2차원의 평면이기때문에 미분을 할 때 x방향과 y 방향을 각각 따로 미분을 해줘야하는데

그렇게 되면 수식이 지저분해질 수 있기 때문에 묶어서 하나로 표현한 것을 Gradient 라고 한다.즉, x 방향의 미분값과 y 방향의 미분값을 묶어서 하나의 수로 표현하는 방법이다.

 

그래디언트 ( Gradient ) 수식

 그래디언트 크기 : 

 그래디언트 방향 : 

 

 

그럼 이 크기와 방향이 의미하는 것은 무엇인가?

 

실제 영상에서 구한 그래디언트 크기와 방향

 - 그래디언트 크기 : 픽셀 값의 차이에 비례 , 픽셀값이 얼만큼 급격하게 변하고 있는지

 - 그래디언트 방향 : 픽셀 값이 가장 급격하게 변화 ( 증가 ) 하는 방향

 

 

위 이미지를 참고하면 a 와 b의 배경색은 같고 내부 Gray Value 도 같다. 

따라서 a 와 b의 Gradient 크기는 같다.

하지만 c를 보게되면 a , b 와 배경색은 같지만 내부 Gray Value 는 더 밝기 때문에

c는 a 와 b 보다는 Gradient 크기가 더 크다.

그리고 Grdient 방향은 급격히 증가하는 방향이기때문에 가장 밝은 내부로 빨간직선이 향하는 것을 볼 수 있다.

 


2D 벡터의 크기 계산 함수 

 cv2.magnitude ( x, y, magnitude ) -> magnitude ( dst )

  x : 2D 벡터의 x 좌표 행렬. 실수형

  y :  2D 벡터의 y 좌표 행렬. x와 같은 크기. 실수형

  magnitude : 2D 벡터의 크기 행렬. x와 같은 크기, 같은 타입

 

 cv2.phase ( x, y, angle, angleInDegrees ) -> angle ( dst )

  x : 2D 벡터의 x 좌표 행렬. 실수형

  y :  2D 벡터의 y 좌표 행렬. x와 같은 크기. 실수형

  angle : 2D 벡터의 크기 행렬. x와 같은 크기, 같은 타입
              angle ( I ) = atan2( y(I) , x(I) )
              만약 x(I) = y(I) = 0 이면 angle은 0으로 설정됨

  angleInDegrees : True이면 각도 단위, False 이면 래디언 단위


 

실제로 코딩을 구현해보면 

 

src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)

dx = cv2.Sobel(src, cv2.CV_32F, 1, 0)
dy = cv2.Sobel(src, cv2.CV_32F, 0, 1)

 # 이전 강의에서 배웠던 Sobel 함수를 사용하여 x 와 y 의 미분값을 구해준 뒤


mag = cv2.magnitude(dx, dy)
mag = np.clip(mag, 0, 255).astype(np.uint8)

 # magnitude 함수를 사용하여 x 와 y 의 미분값을 하나로 묶어주고 0 부터 255까지 Clip 해준다.

 # 이후 영상에서 사용해야하기 때문에 uint8로 타입을 변환 시켜준다.


dst = np.zeros(src.shape[:2], np.uint8)
dst[mag > 120] = 255  # threshold(120) 역할

 

 

Sobel 필터에서의 dy 성분을 보게되면 위 기둥이 보이지 않던 현상을 볼 수 있었는데

magnitude 함수를 사용하여 dx , dy 성분을 묶은 값을 보면 기둥이 잘 표현되는 것을 볼 수 있다.

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90