불균일한 조명성분이 있는 영상에대한 조명 이진화 기법에 대한 설명이다.
저번 영상에서 쌀알들이 조명이 균일하지 않아 어떤 부분은 보이고 어떤부분은 보이지 않는 현상이 있었다.
위 이미지처럼
영상 하단 부분은 평균보다 어둡기때문에 쌀알이 잘 표현되지 않는 듯한 모습을 볼 수 있다.
그럼 이처럼 균일하지 않은 조명의 영향을 해결하기 위해서는
픽셀 주변에 작은 윈도우를 설정하여 지역 이진화를 수행해야한다.
고려해야할 상황으로는
- 윈도우의 크기는 ?
- 윈도우 형태는? Uniform? Gaussain?
부분 영상을 잘라냈을때 중앙을 가중치를 더 줄것인지 등에 대한 고려
- 윈도우를 겹칠 것인가 ? Overlap? Non-Overlap?
- 윈도우 안에 배경 또는 객체만 존재한다면 ?
부분영상내부에 Background or Object 즉, 0 또는 255의 값만 있는 경우에 대한 고려
우리가 해볼 방법으로는 영상을 16등분한 뒤 각각을 Otsu 알고리즘으로 이진화하여
다시 이어 붙이는 방식으로 진행할 예정이다.
일단 bw 와 bh 로 이미지의 가로 세로 크기를 구한 뒤 4로 나눠주어
영상을 16등분해준다.
이후 for문을 사용하여
src영상에서 y를 0부터 128 ( bh/4 ) 까지 x를 0부터 128 ( bw/4 ) 까지 자른다
* src_ dst_는 src와 dst2의 픽셀값을 공유한다.
따라서 dst_를 변경할 경우에는 dst2도 픽셀값이 변경된다.
그리고 cv2.threshold 함수를 사용하여 src에서 자른 부분을 Otsu 방법을 사용하여 이진화한 뒤 dst_에 저장하도록 한다.
위와같은 방법을 총 16번 수행하여 영상의 전체를 16부분으로 쪼개 이진화 시키는 것이다.
* 이 전 강의에서처럼 _, dst_ = cv2.threshold 의 형태를 사용하지 않은 이유는 dst_를 출력으로만 받기 때문에
완전히 새로운 영상으로 만들게된다. 따라서 윗줄에서 만들었던 dst_의 정보를 잃어버리기때문에 뒤 인자로 주어
입력이자 출력의 형태로 사용하도록 해야한다.
* dst_의 크기는 src_와 크기가 같아야한다.
이와 다른 방법으로는 OpenCV 적응형 이진화 방법이 있다.
cv2.adaptiveThreshold ( src, maxValue, adaptiveMethod, thresholdType, bolckSize, C, dst )
src : 입력영상 . 그레이스케일 영상
maxvalue : 임계값 함수 최댓값. 보통 255
adaptiveMethod : 블록 평균 계상 방법지정.
cv2.ADAPTIVE_THRESH_MEAN_C는 산술 평균
cv2.ADAPTIVE_THRESH_GAUSSIAN_C는 가우시안 가중치 평균
thresholdType : cv2.THRESH_BINARY 또는 cv2.THRESH_BIANRY_INV 지정
blockSize : 블록크기 . 3이상의 홀수
C : 블록 내 평균값 또는 블록 내 가중 평균값에서 뺄 값
실제 Adaptive 를 사용하여 구현한 이미지인데 중간 중간 보이는 검은 점들은
block 내부에 배경또는 객체만 있는 경우 생기는 노이즈이다.
* 위 방법은 전에 설명한 지역이진화 방법보다 연산이 느리다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 이진 영상 처리 _ 모폴로지 _ 열기와 닫기 (0) | 2022.06.08 |
---|---|
[Open CV] 이진 영상 처리 _ 모폴로지 _ 침식과 팽창 (0) | 2022.06.07 |
[Open CV] 이진 영상 처리 _ 모폴로지 _ 자동이진화 ( OTSU ) (0) | 2022.06.05 |
[Open CV] 이진 영상 처리 _ 영상의 이진화 (0) | 2022.06.04 |
[Open CV] 영상의 특징 추출 _ 실전코딩 ( 동전 카운터 ) (0) | 2022.06.03 |