- шаги алгоритма:
1. Сформировать гистограмму, т.е. подсчитать количество пикселей каждого уровня серого.
2. Гистограмма нормализуется, то есть, общая рассчитывается для каждого пикселя пикселей шкалы уровней серого.
3. Итеративной градации от 0 до 255 серой шкалы, каждая итерация соотношение пикселей переднего плана (w0 пикселей градации от 0 до градации текущей итерации), и вычисляет средние пиксельные передний план U0 градационных значения;
Пропорциональный расчет пиксель фона (градации текущей итерация градации 255 пикселей), и в среднем градаций w1 из U1;
4. Каждая итерация фона и переднего плана пикселей вычисляется дисперсия г = w 0 * w1 * (и0-и1) ^ 2;
5. Сравните каждую итерацию дисперсии, что итерации с максимальным порогом бинаризации градации дисперсии.
- Алгоритм работы:
Упомянутое число передних плана пикселей n0, отношение w0, и градация s0, u0 является средним серым, количество пикселей фона n1, отношение w1 и градация s1, среднего уровня серого U1;
Общее количество пикселей изображения равно п, и градация с, средним серыми и. Между классом-дисперсии г.
Он имеет следующую формулу:
w 0 = n0 / п; w 1 = N 1 / N; N0 + N1 = п; w 0 + w 1 = 1;
и0 = s0 / n0; u1 = s1 / n1; и = з / п и = и0 * и0 + и1 * w 1;
г = w0 * (и0-и) ^ 2 + w 1 (и1-и) ^ 2;
В конце концов, прибудете г = w0 * w1 * (u0-u1) ^ 2;
Для гистограммы изображения имеет два пика, большой порог закона приближает требуемую впадину между двумя пиками, он может быть использован для разделения двух значений.
- Алгоритм:
Для того чтобы уменьшить глубину итераций, используя формулу и = u0 * w 0 + w 1 * u1 от до г = w 0 * w1 * (и0-и1) ^ 2 в u1, чтобы дать формулу:
г = w 0 / (1-w 0) * (и0-и) ^ 2
Код реализуется следующим образом:
беззнаковое символ Ostu ( INT размер, беззнаковое символ * изображение) { Int I; беззнаковое символ пороговое значение = 0 ; // пороговое значение с плавающей точкой дисперсии = 0 ; // дисперсия между двумя классами с плавающей точкой maxvariance = 0 ; // максимальной дисперсии с плавающей точкой Серый = 0 ; / / передний план в оттенках серого с плавающей точкой W0 = 0 ; // на первом план соотношения пикселей с плавающей точкой U0 = 0 ; // переднего план означает серый поплавок U = 0 ; // Общий среднего уровень серого, я = передний план можно рассматривать как серую шкалу при 255 с плавающей точкой Гистограммы [ 256 ] = { 0 }; // гистограмма для (I = 0 ; I <размер, я ++ ) { гистограмма [ * (изображение + I)] ++; // пиксель гистограммы } для (I = 0 ; I < 256 ; я ++ ) { гистограмм [ я]/ = Размер; // коэффициент гистограммы U + = Гистограмма [I] , I *; // Получить Перспективы я = 255 серой шкалы, то есть, общий средний серый } для (я = 0 ; I < 256 ; я ++ ) { W 0 + = Гистограмма [I]; // переднего плана отношение пикселей серый Гистограмма + = I * [I]; // переднего плана серая шкала U0 = серый / W 0; // переднего плана переднего плана = серая шкала среднее соотношение серый / серый пиксель = степень и / пиксель и дисперсия = W0 / ( 1. -w0) * (U-U0) * (U-U0); // найти дисперсию IF (дисперсия> maxvariance) { maxvariance = дисперсия; порог = я; // максимальное значение G I в качестве соответствующего глобального порога изображения } } возврата порога; }