인공지능/Computer Vision

[CV - python] 2D Partial Derivative for Edge Detection (엣지 검출을 위한 2차원 편미분)

바보1 2022. 10. 13. 23:02

코드가 궁금하다면 댓글을 남겨주세요.

import numpy as np
import cv2

img = cv2.imread('test4.jpg', cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (400, 600))

new_x = np.zeros(img.shape)
new_y = np.zeros(img.shape)

img = np.pad(img, (1, 1), 'constant', constant_values = 0)

mask_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
mask_y = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]])

for i in range(1, img.shape[0] - mask_x.shape[0] + 2):
    for j in range(1, img.shape[1] - mask_y.shape[0] + 2):
        new_x[i - 1, j - 1] = np.sum(img[i - 1 : i + 2, j - 1 :j + 2] * mask_x)
        new_y[i - 1, j - 1] = np.sum(img[i - 1 : i + 2, j - 1 : j + 2] * mask_y)

new_xy = np.add(new_x, new_y)
new_x = (new_x - np.min(new_x)) / np.ptp(new_x)
new_y = (new_y - np.min(new_y)) / np.ptp(new_y)
new_xy = (new_xy - np.min(new_xy)) / np.ptp(new_xy)

cv2.imshow('original', img)
cv2.imshow('derivative_x', new_x)
cv2.imshow('derivative_y', new_y)
cv2.imshow('derivative_xy', new_xy)
cv2.waitKey()
cv2.destroyAllWindows()

 

이미지는 제 프로필의 이미지를 사용했습니다.

 

원본 이미지
좌측부터 x축 방향 편미분, y축 방향 편미분, 전체 이미지 편미분

역시 시험기간엔 뭘 해도 재밌다.

'인공지능 > Computer Vision' 카테고리의 다른 글

[CV - Python] 가우시안 필터의 성질  (1) 2022.10.15
[CV - Python] Gaussian Filtering  (3) 2022.10.14
[CV] Camera & Optics  (2) 2022.09.23
[CV] 빛의 속성 (Properties of Light)  (4) 2022.09.22
cs231n 강의  (4) 2022.09.01