2016-10-11 4 views
4

enter image description hereПочему бинаризация изображения показывает более низкие результаты?

См. this journal article.

В последнем абзаце раздела 4.1 (предварительной обработки) говорит, что, enter image description here

Используя [threshold = (mean + std dev)] наряду с Оцу Thresholding дает следующий результат,

enter image description here

.

И, без них я получаю следующий результат,

enter image description here

.

Поэтому у меня есть три вопроса,

(1) Какова главная проблема с моей реализации бинарного Thresholding?

(2) Если Otsu Threshold действительно дает хороший результат, почему авторы статьи предложили использовать [threshold = (mean + std dev)]?

(3) Как я могу применить значение double как порог Otsu?


enter image description here

Исходный код

enter image description here

Here is the GitHub repository.

Наиболее значимой частью исходного кода следующим образом,

private void thresholdButton_Click(object sender, EventArgs e) 
    { 
     Bitmap color = (Bitmap)this.inputImagePictureBox.Image; 

     Bitmap temp = Grayscale.ToGrayscale((Bitmap)color.Clone()); 

     ImageStatistics imgStat = new ImageStatistics(temp); 

     Histogram histogram = imgStat.Gray; 

     double meanPlusStdDev = histogram.Mean + histogram.StdDev; 

     OtsuThreshold otsu = new OtsuThreshold(); 

     int thres = otsu.getOtsuThreshold(temp);////// 

     //otsu.Apply(temp, (int)meanPlusStdDev); 

     otsu.Apply(temp, thres); 

     thresholdedImagePictureBox.Image = temp; 
    } 
+0

Являются ли условия одинаковыми, то есть вы применяли гомоморфную фильтрацию перед порогом? Не могли бы вы предоставить нам тестовое изображение? – Tapio

+0

@Tapio, вот мой HomoFilter http://stackoverflow.com/questions/39427106/homomorphic-filter-output – anonymous

+0

@Tapio, тестовое изображение встроено в решение VS2013. – anonymous

ответ

2

Ответьте только (2). Я не видел, чтобы кто-либо использовал среднее значение + stdev в глобальном масштабе, но это довольно часто встречается при применении методов локальной адаптивной порогового значения. Поэтому вместо вычисления одного порога для всего изображения вы вычисляете один для каждого пикселя на основе его окрестности. Это будет иметь больше смысла в заявке, описанной в статье. Niblack адаптивные пороговый для пикселя (х, у) с локальным средним (х, у) и местное STDEV (х, у):

среднего (х, у) + к * STDEV (х, у)

Где k - регулируемый параметр. Это довольно часто используется в бинаризации документов. Другим распространенным является

т * среднее (х, у) + к * STDEV (х, у)

Где можно регулировать как локальное среднее и локальные пороги StDev. Точкой определения stdev является придание веса краям.Скресты всегда будут областями с высоким локальным стандартным отклонением, поэтому наличие термина, связанного с ним, должно быть более эффективным, чем простое среднее пороговое значение.

Вы также можете проверить алгоритм Sauvola, если они кажутся интересными, это дополнительная модификация алгоритма Niblack. Ознакомьтесь с концепцией интегральных изображений, если вы хотите реализовать их самостоятельно.

2

1) нет «проблемы». Вы устанавливаете порог с разными порогами, затем получаете разные результаты.

2) нет универсального метода определения глобального порога, а глобальное пороговое значение может быть очень плохим решением. Одним из незначительных преимуществ метода «средний/stdev» является то, что он оставляет регулируемый параметр (коэффициент перед stdev), который дает исполнителю (ложное) чувство контроля.

3) Я не могу понять этот вопрос. Порог представляет собой целое число, поскольку значения пикселей являются целыми.

+0

Что вы говорите о ответе тапио? – anonymous

+0

@ anonymous: ничего особенного. –

Смежные вопросы