在Octave中实现局部阈值的错误

时间:2014-10-20 04:45:52

标签: image-processing octave threshold

我试图实施Sauvola& amp; Pietaksinen通过局部阈值处理在图像中进行二值化的方法。

该方法将每个像素(x,y)的阈值定义为T(x,y)= mean(x,y)* [1 + k(std(x,y)/ R-1)],在arcticle“自适应文档图像二值化”。平均值和标准偏差在(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上也是新手,直到现在还无法找到它。

有人可以帮我一把吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我无法看到问题。你真的应该包括你的来源,也许还包括n的输入图像和参数。顺便说一句,你不应该覆盖函数名称(如你的情况下的图像)。

输入图片:

Lenna in

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")

创建

Lenna out