#adaptive
5. 적응형 이진화
- 영상을 여러 영역으로 나눈 뒤, 그 주변 픽셀 값만 활용하여 임계값을 구함
- cv2.adaptiveThreshold()
cv2.ADAPTIVE_THRESH_MEAN_C
-이웃 픽셀의 평균으로 결정
- 선명하지만 잡티가 많아질 가능성이 있음
- 문서 스캔과 같이 이미지가 고르게 조명된 경우에 효과적
cv2.ADAPTIVE_THRESH_GAUSSIAN_C
- 가우시안 분포에 따른 가중치의 합으로 결정
- 선명도는 조금 떨어지지만 잡티가 적음
- 조명이 불균일한 이미지나 디테일을 유지하고자 할 때 효과적
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('./sudoku.jpg', cv2.IMREAD_GRAYSCALE)
th, dst1 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
#blockSize : 9*9를 의미함
#C(5) : 더 계산할 필요할게있다면 전체적으로 좀 더 조절해주는것
dst2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 5)
# 가우시안 C로 만든 dst3
dst3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 9, 5)
# cv2.THRESH_OTSU ,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.ADAPTIVE_THRESH_GAUSSIAN_C의 값을 각각 딕셔너리로만들어서 비교해보기
dic = {'img': img, 'dst1': dst1, 'dst2': dst2, 'dst3': dst3}
for i, (k,v) in enumerate(dic.items()):
plt.subplot(2,2, i+1)
plt.title(k)
plt.imshow(v, 'gray')
plt.show()
결과확인
자동이진화(dst1)를 하면 빛이 균등하지않아서 아래쪽은 하나도안보이게되어서 사실상 사용할 수없게 되고
dst2(meanC)는 오츠보다는 훨씬 잘 보이지만 노이즈가 좀 생기는것을 확인할 수 있습니다.
dst3(가우시안)은 또렷하지만 뿌옇습니다 그러나, 잡음이 좀 덜하다는 차이가 있습니다.
이런 옵션을 확인해서 전처리를 확인할 수 있습니다.
'AI 컴퓨터 비전프로젝트' 카테고리의 다른 글
[DL] 투시변환(persective), 명함을 이용한 사진 활용 (5) | 2024.10.06 |
---|---|
[DL] 영상의 변환(이동), resize (0) | 2024.10.05 |
[DL] 오츠의 이진화(스레숄드값을 자동으로 잡아주기) (0) | 2024.10.03 |
[DL]영상의 이진화(Binarization) (0) | 2024.10.02 |
[DL] 마스크 연산_cv2.copyTo(), 동영상 합성 (0) | 2024.10.01 |