그래디언트 Gradient
그래디언트는 함수 f(x,y)를 x축과 y축으로 각각 편미분(partial derivative)하여 벡터 형태로 표현한 것이다.
x방향 미분과 y방향 미분을 따로 계산하고 벡터라는 것으로 묶은 것이 그래디언트이다.
그래디언트 크기는 픽셀 값의 차이, 변화량을 의미하며, 그래디언트 방향은 픽셀 값이 가장 급격하게 증가하는 방향을 나타낸다.
✔︎ 2D 백터의 크기 계산 함수 - cv2.magnitude
소벨 필터로 구한 x방향, y방향 미분 값을 cv2.magnitude에 입력값으로 설정하면 백터의 크기를 계산할 수 있다.
magnitude = cv2.magnitude(x, y, magnitude=None)
- x : 2D 벡터의 x 좌표 행렬. 실수형.
- y : 2D 벡터의 y 좌표 행렬. x와 같은 크기. 실수형
- magnitude : 2D 벡터의 크기 행렬. x와 같은 크기, 같은 타입.
✔︎ 2D 백터의 방향 계산 함수 - cv2.phase
angle = cv2.phase(x, y, angle=None, angleInDegrees=None)
- x : 2D 벡터의 x 좌표 행렬. 실수형.
- y : 2D 벡터의 y 좌표 행렬. x와 같은 크기. 실수형.
- angle : 2D 벡터의 크기 행렬. x와 같은 크기, 같은 타입.
- angleInDegrees : True이면 각도 단위, False이면 래디언 단위
💬 소벨필터를 이용한 에지 검출 예제
import sys
import numpy as np
import cv2
src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
dx = cv2.Sobel(src, cv2.CV_32F, 1, 0)
dy = cv2.Sobel(src, cv2.CV_32F, 0, 1)
mag = cv2.magnitude(dx, dy)
mag = np.clip(mag, 0, 255).astype(np.uint8)
dst = np.zeros(src.shape[:2], np.uint8)
dst[mag > 120] = 255
#_, dst = cv2.threshold(mag, 120, 255, cv2.THRESH_BINARY)
cv2.imshow('src', src)
cv2.imshow('mag', mag)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] 영상의 특징 추출 : 영상에서 직선 검출하기 - 허프 변환 (0) | 2022.02.04 |
---|---|
[OpenCV with Python] 영상의 특징 추출 : 캐니 에지 검출 cv2.Canny (1) | 2022.02.04 |
[OpenCV with Python] 영상의 특징 추출 : 영상의 미분과 소벨 필터 (0) | 2022.02.04 |
[OpenCV with Python] 영상 기하학적 변환 : 리매핑(remapping) - cv2.remap (0) | 2022.02.02 |
[OpenCV with Python] 영상 기하학적 변환 : 투시 변환 (0) | 2022.02.02 |