그라디언트는 엣지 검출, 객체검출, 이미지 분류와 같은 작업에 유용하고, 컬러나 강도의 변경을 나타낸다.
특정 방향에서 계산될 수 있어서 방향에 따라 계산이 달리되어 이미지가 다르게 나타남
소벨 연산자에서 사용하는 수학 공식을 보면 3*3커널 2개를 사용한다
이커널이 이미지에 적용되어서 도함수의 근사값을 계산하는데 하는 수평변화, 하나는 수직변화값을 계산함
https://en.wikipedia.org/wiki/Sobel_operator
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img = cv2.imread('../DATA/sudoku.jpg',0)
스도쿠 이미지를 불러온다
def display_img(img):
fig = plt.figure(figsize=(12,10))
ax = fig.add_subplot(111)
ax.imshow(img,cmap='gray')
display_img(img)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
laplacian = cv2.Laplacian(img,cv2.CV_64F)
소벨 연산자에 이미지와 원하는 depth(픽셀의 정확성)를 입력해준다 24:8, 32:64d와 같은 것을 연상하면 된다.
64F는 64float point정확성을 의미한다. 다음두변수는 x방향, y방향을 의미하고 커널 사이즈를 정의해준다
라플라시안 연산자는 x방향, y방향 모두 사용해준다.
display_img(sobelx)
그래디언트의 수직라인 위치는 확인하기 용이하지만 수평라인은 확인이 어렵다
display_img(sobely)
수평라인이 눈에띄게 나온다
display_img(laplacian)
라플라시안은 그라디언트의 관계가 주어지면 이미지의 라플라시안을 계산함
엣지 검출을 시도한 것처럼 보인다. x,y에 그라디언트를 사용해 노이즈를 제거하여 엣지부분 그라디언트는 선명히 보임
blended = cv2.addWeighted(src1=sobelx,alpha=0.5,src2=sobely,beta=0.5,gamma=0)
display_img(blended)
sobel x와 sobel y를 블렌딩하여 수평, 수직라인이 뚜렷하게 나오게 한다 반반씩 베타값을 설정함
kernel = np.ones((4,4),np.uint8)#정수사용해야 버그 안생김
gradient = cv2.morphologyEx(blended,cv2.MORPH_GRADIENT,kernel)
display_img(gradient)
커널을 4*4로 0으로 가득채우고, morphology operator를 사용하여 앞서 만든 blended와 커널을 이용하여 그라디언트를 다시 계산해본다. 흑백으로 꽤나 뚜렷한 결과가 나온다. 숫자는 흐릿하지만 하얀색을 명확하게 볼 수 있다
ret,th1 = cv2.threshold(img,100,255,cv2.THRESH_BINARY)
display_img(th1)
이진 임계치를 적용할 수 있다. 엣지를 잘 검출 했지만 안의 그리드 라인은 검출하지 못했다
ret,th1 = cv2.threshold(gradient,200,255,cv2.THRESH_BINARY_INV)
display_img(th1)
이전 morphologyEX로 구한 것을 이미지로 넣어서 binary_inv로 해주면 안의 그리드가 뚜렷하게 나온다
ret,th1 = cv2.threshold(blended,100,255,cv2.THRESH_BINARY_INV)
display_img(th1)
앞서 sobel x, sobel y로 블렌딩한 이미지를 넣으면 엣지뿐아니라 그리드까지 뚜렷하게 나오는 것을 알 수 있다
출처: udemy X KMOOC OpenCV 및 딥러닝을 이용한 Computer Vision 파이썬
'Deep Learning > Computer Vision' 카테고리의 다른 글
파이썬으로 카메라 연결하기 (2) | 2023.07.23 |
---|---|
Histograms with OpenCV (1) | 2023.07.16 |
Image Blurring & Smoothing (0) | 2023.07.16 |
Image Binary (0) | 2023.07.16 |
파이썬 마우스로 이미지에 직접 그리기 (0) | 2023.07.09 |