Maximum Entropy Threshold

1 개요

이미지의 엔트로피가 최대화되도록 자동 임계값을 계산 합니다.

2 알고리즘 상세 설명

Topt=arg max(Hf(T)+(Hb(T))\textbf{T}_{opt} = \textbf{arg max}(\textbf{H}_{f}(\textbf{T})+(\textbf{H}_{b}(\textbf{T}))

Hf(T)=i=1TP(i)P(T)×logP(i)P(T)\textbf{H}_{f}(\textbf{T}) = -\sum_{i=1}^{\textbf{T}}\frac{P(i)}{P(\textbf{T})}\times log \frac{P(i)}{P(\textbf{T})}

Hb(T)=i=TGP(i)1P(T)×logP(i)1P(T)\textbf{H}_{b}(\textbf{T}) = -\sum_{i=\textbf{T}}^{\textbf{G}}\frac{P(i)}{1-P(\textbf{T})}\times log \frac{P(i)}{1-P(\textbf{T})}

입력 이미지 결과 이미지
Source Image Maximum Entropy Threshold Result
Fig. Maximum Entropy Threshold 동작 예시

3 예제 코드

CMaximumEntropyThreshold maximumEntropyThreshold;

CFLImage fliSourceImage;
maximumEntropyThreshold.SetSourceImage(fliSourceImage);

CMultiVar<int64_t> mvLogicalCondition;
mvLogicalCondition.PushBack((int64_t)(ELogicalCondition_Greater));

maximumEntropyThreshold.SetLogicalCondition(mvLogicalCondition);

CMultiVar<double> mvOffset(0);
maximumEntropyThreshold.SetThresholdOffset(mvOffset);
maximumEntropyThreshold.Execute();
CMaximumEntropyThreshold maximumEntropyThreshold = new CMaximumEntropyThreshold();

CFLImage fliSourceImage = new CFLImage();
maximumEntropyThreshold.SetSourceImage(ref fliSourceImage);

CMultiVar<long> mvLogicalCondition = new CMultiVar<long>();
mvLogicalCondition.PushBack((long)(ELogicalCondition.Greater));

maximumEntropyThreshold.SetLogicalCondition(mvLogicalCondition);

CMultiVar<double> mvOffset = new CMultiVar<double>(0);
maximumEntropyThreshold.SetThresholdOffset(mvOffset);
maximumEntropyThreshold.Execute();

4 파라미터 설정 및 사용 방법

멤버함수 파라미터 설 명
SetThresholdOffset CMultiVar<double> mvOffset IN 이진화 적용 Offset

산출된 Threshold 값에 Offset 만큼 더 적용하여 이진화를 수행하게 됩니다.