Adaptive Threshold Gaussian
1 개요
Gaussian Filter를 사용한 적응형 임계값을 통해 이진화 연산을 수행하는 알고리즘
2 알고리즘 상세 설명
각 픽셀을 기준으로 커널 사이즈 영역 내부의 가우시안 값을 계산하여 그 값을 임계값으로 사용하여 이진화를 진행합니다.
원본 이미지 | Gaussian filter 결과 | Adaptive Threshold Gaussian 결과 이미지 |
---|---|---|
![]() |
![]() |
![]() |
Fig. Normal모드 결과
- Normal 이진화 연산
- 원본 이미지
- 결과 이미지
- 가우시안 필터
- 오프셋 값
기본 Normal모드에서는 각 픽셀의 값이 가우시안 값 - 오프셋 값보다 크거나 같으면 범위 내값(Range Value), 작으면 범위 외값(Out of Range Value)을 출력합니다.
최종적으로 Source와 같은 format으로 출력하는 일반 Gaussian Filter와는 다르게 format별로 지정된 부동 소수점 타입에서 가우시안 값의 계산과 임계값 비교를 전부 진행합니다.
원본 이미지 | Gaussian filter 결과 | Adaptive Threshold Gaussian 결과 이미지 (offset = 3) |
---|---|---|
![]() |
![]() |
![]() |
Fig. Range모드 결과
- Range 이진화 연산
- 원본 이미지
- 결과 이미지
- 가우시안 필터
- 오프셋 값
Range 모드에서는 각 픽셀의 값과 가우시안 값의 차이가 offset보다 작으면 범위 내값(Range Value), 크거나 같으면 범위 외값(Out of Range Value)을 출력합니다.
원본 이미지 | Channel Condition And | Channel Condition Or |
---|---|---|
![]() |
![]() |
![]() |
Fig. 채널 조건별 결과
다채널 이미지의 경우 채널별 조건을 파라미터로 설정하여 최종 이진화 결과를 결정합니다.
3 파라미터 설정 및 사용 방법
-
SetThresholdOffset
- 임계치 식에 사용하는 오프셋을 설정합니다.
- Normal모드에서는 Source의 가중치, Range모드에서는 체크하는 범위의 역할을 수행합니다.
- 기본값은 채널별로 0입니다.
-
SetKernel
- Gaussian Filter적용에 사용할 커널 사이즈를 설정합니다.
- 기본값은 5입니다.
-
SetAdaptiveThresholdMethod
- 이진화 계산 방식을 결정합니다.
- 기본값은
EAdaptiveThresholdMethod_Normal
입니다. EAdaptiveThresholdMethod_Normal
- Normal 모드
EAdaptiveThresholdMethod_Range
- Range 모드
- 각 모드의 설명은 알고리즘 상세 설명에서 확인 가능합니다.
-
SetLogicalConditionOfChannels
- 각 채널의 논리 조건 결과를 처리할 방법을 설정합니다.
- 기본값은
ELogicalConditionOfChannels_And
입니다. ELogicalConditionOfChannels_And
- 각 채널 결과의 'And' 조건
ELogicalConditionOfChannels_Or
- 각 채널 결과의 'Or' 조건
-
SetRangeValue
- 조건이 참일 때의 이진화 출력값을 설정합니다.
- 설정하지 않을 경우 integer format의 경우 MAX값, floating format의 경우 1을 출력합니다.
-
SetOutOfRangeValue
- 조건이 거짓일 때의 이진화 출력값을 설정합니다.
- 설정하지 않을 경우 integer format의 경우 MIN값, floating format의 경우 0을 출력합니다.
4 예제 코드
CAdaptiveThresholdGaussian adaptiveThresholdGaussian;
CFLImage fliSourceImage;
CFLImage fliDestinationImage;
adaptiveThresholdGaussian.SetSourceImage(fliSourceImage);
adaptiveThresholdGaussian.SetDestinationImage(fliDestinationImage);
adaptiveThresholdGaussian.SetKernel(51);
adaptiveThresholdGaussian.Execute();