Otsu Threshold
1 개요
픽셀 히스토그램 정보를 바탕으로 클래스 간 분산을 이용하여 최적 임계값을 적용하는 알고리즘입니다.
2 알고리즘 상세 설명
알고리즘은 두 클래스 분산의 가중 합으로 정의된 클래스 내 분산을 최소화하는 임계값을 조사하여 적용합니다.
σw2(t)=ω0(t)σ02(t)+ω1(t)σ12(t)
- ω0,ω1 : 임계값 t에서의 각 클래스 확률
- σ02,σ12 : 임계값 t에서의 각 클래스 분산
입력 이미지 |
결과 이미지 |
 |
 |
Fig. Otsu Threshold 동작 예시
3 예제 코드
COtsuThreshold otsuThreshold;
CFLImage fliSourceImage;
otsuThreshold.SetSourceImage(fliSourceImage);
CMultiVar<int64_t> mvLogicalCondition;
mvLogicalCondition.PushBack((int64_t)(ELogicalCondition_Greater));
otsuThreshold.SetLogicalCondition(mvLogicalCondition);
CMultiVar<double> mvOffset(0);
otsuThreshold.SetThresholdOffset(mvOffset);
otsuThreshold.Execute();
COtsuThreshold otsuThreshold = new COtsuThreshold();
CFLImage fliSourceImage = new CFLImage();
otsuThreshold.SetSourceImage(ref fliSourceImage);
CMultiVar<long> mvLogicalCondition = new CMultiVar<long>();
mvLogicalCondition.PushBack((long)(ELogicalCondition.Greater));
otsuThreshold.SetLogicalCondition(mvLogicalCondition);
CMultiVar<double> mvOffset = new CMultiVar<double>(0);
otsuThreshold.SetThresholdOffset(mvOffset);
otsuThreshold.Execute();
otsuThreshold = COtsuThreshold()
fliSourceImage = CFLImage()
otsuThreshold.SetSourceImage(fliSourceImage)
mvLogicalCondition = CMultiVar[Int64]()
mvLogicalCondition.PushBack(int(ELogicalCondition.Greater))
otsuThreshold.SetLogicalCondition(mvLogicalCondition)
mvOffset = CMultiVar[Double](0)
otsuThreshold.SetThresholdOffset(mvOffset)
otsuThreshold.Execute()
4 파라미터 설정 및 사용 방법
멤버함수 |
파라미터 |
설 명 |
SetThresholdOffset |
CMultiVar<double> |
mvOffset |
IN |
이진화 적용 Offset |
산출된 Threshold 값에 Offset 만큼 더 적용하여 이진화를 수행하게 됩니다.