Ошибка в реализации локального порога в Octave

Я пытаюсь реализовать метод Sauvola & Pietaksinen для выполнения бинаризации изображения с помощью локального порогового значения.

Метод определяет порог каждого пикселя (x,y) как T(x,y) = mean(x,y)*[1+k(std(x,y)/R-1)], как в статье «Адаптивная бинаризация изображения документа». Среднее значение и стандартное отклонение рассчитываются в окрестности (x, y). k и R предполагаются равными 0,5 и 128 соответственно.

Вот как выглядит мой код:

filtered = colfilt(image, [n n], "sliding", @(x) (mean(x).*(1+0.5*(std(x)/128 - 1))));
image(image < filtered) = 0;
image(image >= filtered) = 255;

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

Может ли кто-нибудь помочь мне?

Заранее спасибо.


person gcolucci    schedule 20.10.2014    source источник
comment
Вы пытались масштабировать изображение (imshow(image,[]))? Я согласен с @Andy. Вы не должны перезаписывать имена функций (например, изображения).   -  person kkuilla    schedule 20.10.2014


Ответы (1)


Я не вижу проблемы. Вы действительно должны включить свой источник и, возможно, также ваше входное изображение и параметр для n. Кстати, вы не должны перезаписывать имена функций (например, изображение в вашем случае).

Входное изображение:

Ленна в

pkg load image
img = imread ("lenna256.jpg");
k = 0.5;
R = 128;
n = 5;
filtered = colfilt(img, [n n], "sliding", @(x) (mean(x).*(1+0.5*(std(x)/128 - 1))));
img(img < filtered) = 0;
img(img >= filtered) = 255;

image (img)
imwrite (img, "lenna_out.png")

который создает

Ленна вышла

person Andy    schedule 20.10.2014
comment
Спасибо, что указали на это! В конце концов, я думаю, что это проблема со значениями параметров, особенно с R. Мне удалось улучшить результаты, проигнорировав исходное предложение авторов и попробовав разные значения, так что это не проблема с кодом. . Я отмечу это как исправленное. - person gcolucci; 20.10.2014