Концептуальная проблема с кодированием метода Оцу - skimage.filters.thresholding.threshold_otsu

Метод Оцу выполняет пороговое значение бинарного изображения и состоит в максимизации дисперсии между двумя подклассами (передний план/фон), созданной путем разделения изображения на заданном пороге. Математически это выражается как:

variance12 = weight1 * (mean1 - meanT)**2 + weight2 * (mean2 - meanT)**2

(meanT — общее среднее значение гистограммы изображения). Однако у меня возникли проблемы с пониманием того, как это реализовано в функции threshold_otsu в scikit-image, которая пишет это как:

variance12 = weight1 * weight2 * (mean1 - mean2)**2.

Хотя определения весов и средних значений в этой функции немного различаются, я не понимаю, почему эти две формулировки одинаковы, даже если они дают одинаковые ответы. Кто-нибудь хотел бы уточнить?

Спасибо за помощь.


person Dai    schedule 08.12.2017    source источник


Ответы (1)


Вы можете доказать, что эти две формулировки одинаковы, используя определения весов и среднего T.

meanT = weight1*mean1 + weight2*mean2  (1)
weight1 + weight2 = 1                  (2)

Если вы вставите (1) в свою первую формулу, вы получите что-то вроде этого

[(mean1-mean2)**2]*[weight1*weight2**2] + [(mean1-mean2)**2]*[weight2*weight1**2]

Если вы учтете это и используете (2), вы получите свой результат.

Полное доказательство приведено ниже, а определения можно проверить в оригинальной статье Оцу здесь< /а>.

Надеюсь это поможет. Доказательство пороговой формулы Оцу

person NeverNervous    schedule 08.12.2017
comment
Спасибо @NeverNervous. Как глупо с моей стороны не довести до конца мою алгебру! - person Dai; 12.12.2017
comment
Нет проблем! Не стесняйтесь принять ответ, если он помог :) - person NeverNervous; 13.12.2017