我试图实施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上也是新手,直到现在还无法找到它。
有人可以帮我一把吗?
提前致谢。
答案 0 :(得分:2)
我无法看到问题。你真的应该包括你的来源,也许还包括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")
创建