-
이미지 처리-2 이미지 필터 처리이미지 처리 2023. 6. 17. 10:31
1. blur, gaussianblur
import cv2 import matplotlib.pyplot as plt import numpy as np image_path ='../picture/car.jpg' image = cv2.imread(image_path,0) blurred_1 = np.hstack([ cv2.blur(image,(3,3)), cv2.blur(image,(9,9)), cv2.blur(image,(11,11)), ]) plt.imshow(blurred_1,'gray') plt.show()
커널을 늘려가며 블러처리한 것을 회색 이미지로 표현하여 hstack으로 쌓아준다.
gaussian_blurred_1 = np.hstack([ cv2.GaussianBlur(image, (1,1),1), cv2.GaussianBlur(image, (9,9),2), cv2.GaussianBlur(image, (15,15),50), ]) plt.imshow(gaussian_blurred_1,'gray') plt.show()
cv2.GaussianBlur 함수로 가우시안 블러처리한 것을 회색 이미지로 표현하여 hstack으로 쌓아준다.
2. filter2d, transform
image_rgb =cv2.imread(image_path) image_rgb = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2RGB) filter = np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]) sharpen_img = cv2.filter2D(image_rgb, -1 ,filter) plt.imshow(sharpen_img) plt.show()
이미지 선명화를 하기 위해 cv2.filter2D 함수를 사용하였으며 샤프닝 필터의 어레이는 대표적으로 두가지가 존재한다.
([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]), ([[0,-1,0],[-1,5,-1],[0,-1,0]) 이렇게 두가지의 배열을 사용하여 이미지를 날카롭게 만든다.
filter = np.array([[0.3, 0.5, 0.3],[0.1,0.7,0.1],[0.3, 0.5,0.3]]) image = cv2.imread(image_path,1) sepia_img = cv2.transform(image, filter) plt.imshow(sepia_img) plt.show()
배열의 값을 잘 조정하여 원하는 세피아 느낌의 이미지를 연출할 수 있다.
filter = np.array([[-1,-1,0],[-1,0,1],[0,1,1]]) emboss_img = cv2.filter2D(image, -1, filter) emboss_img = emboss_img +128 plt.imshow(emboss_img) plt.show()
엠보싱 필터는 이미지의 윤곽을 얻을 수 있는 필터로 ([[-1,-1,0],[-1,0,1],[0,1,1]])의 배열을 지닌다. 엠보싱 효과를 더 확실히 보기 위해서 픽셀 값에 128을 더해준다.
3. threshold, dilate, erode, morpholodyEx
_, mask = cv2.threshold(image , 70, 400, cv2.THRESH_BINARY_INV) kernel = np.ones((3,3), np.uint8) dilation = cv2.dilate(mask, kernel, iterations=3) image_list = np.hstack([ image, mask, dilation ]) plt.imshow(image_list) plt.show()
cv2.threshold 함수의 THRESH_BINARY_INV 인자는 값이 70보다 크면 400으로 할당하고 작으면 0으로 처리한다. 따라서 색상을 이진화할 수 있다.
cv2.dilate 함수는 이미지를 팽창시키는 함수로 팽창연산은 흰색 물체의 외곽 픽셀에 흰색을 추가하는 것이다. 원본 이미지와 함수를 실행한 함수들은 hstack으로 쌓아 비교한다. uint8은 부호없는 정수형을 의미하며 0에서 255까지의 범위이다.
erosion = cv2.erode(mask,kernel) opening= cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) closing= cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) image_list= np.hstack([ erosion, opening, closing ]) plt.imshow(image_list) plt.show()
cv2.erode 함수는 이미지를 침식연산하는 함수로 침식연산은 흰색 물체의 외곽 픽셀에 검은색을 추가한다.
cv2.morphologyEX의 MORPH_OPEN 함수는 이미지의 흰색을 제거하는 역할을 한다. 이 과정에서 erode -> dilate 연산을 거친다.
cv2.morphologyEX의 MORPH_CLOSE 함수는 이미지의 검은 색을 메우는 역할을 한다. 이 과정에서 dilate-> erode 연산을 거친다.
mg= cv2.morphologyEx(mask, cv2.MORPH_GRADIENT, kernel) th= cv2.morphologyEx(mask, cv2.MORPH_TOPHAT, kernel) image_list= np.hstack([ image, mg, th ]) plt.imshow(image_list) plt.show()
cv2.morphologyEX의 MORPH_GRADIENT 함수는 이미지의 엣지를 검출하며 이 과정에서 dilate - erode 연산을 거친다.
cv2.morphologyEX의 MORPH_TOPHAT함수는 밝기 값이 크게 튀는 영역을 강조한다. 반대로 BLACKHAT 연산은 어두운 부분을 강조할 수 있다. 각각 원본 - OPEN, CLOSE- 원본 연산과정을 거친다.
'이미지 처리' 카테고리의 다른 글
이미지 처리-5 이미지 혼합 (0) 2023.06.19 이미지 처리-4 얼굴 이미지 회전 (0) 2023.06.19 이미지 처리-3 번호판 (2) 2023.06.18 이미지 처리-1 이미지 기초 처리 (0) 2023.06.14