Adaptive Threshold Median
1 개요
Median Filter를 사용한 적응형 임계값을 통해 이진화 연산을 수행하는 알고리즘
2 알고리즘 상세 설명
각 픽셀을 기준으로 커널 사이즈 영역 내부의 중앙 값을 계산하여 그 값을 임계값으로 사용하여 이진화를 진행합니다.
원본 이미지 | Median filter 결과 | Adaptive Threshold Median 결과 이미지 |
---|---|---|
![]() |
![]() |
![]() |
Fig. Normal모드 결과
- Normal 이진화 연산
- 원본 이미지
- 결과 이미지
- 중앙 값 필터
- 오프셋 값
기본 Normal모드에서는 각 픽셀의 값이 중앙 값 - 오프셋 값보다 크거나 같으면 범위 내값(Range Value), 작으면 범위 외값(Out of Range Value)을 출력합니다.
원본 이미지 | Median filter 결과 | Adaptive Threshold Median 결과 이미지 (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
- Median Filter 적용에 사용할 커널 사이즈를 설정합니다.
- Width와 Height 사이즈를 각각 설정할 수 있습니다.
- 기본값은 Width와 Height 모두 7입니다.
-
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 예제 코드
CAdaptiveThresholdMedian adaptiveThresholdMedian;
CFLImage fliSourceImage;
CFLImage fliDestinationImage;
adaptiveThresholdMedian.SetSourceImage(fliSourceImage);
adaptiveThresholdMedian.SetDestinationImage(fliDestinationImage);
adaptiveThresholdMedian.SetKernel(41, 41);
adaptiveThresholdMedian.Execute();