【问题标题】:Error in implementation of local thresholding in Octave在 Octave 中实现局部阈值时出错
【发布时间】:2014-10-20 04:45:52
【问题描述】:

我正在尝试实现 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 太陌生了,直到现在才找到它。

有人可以帮我吗?

提前致谢。

【问题讨论】:

  • 您是否尝试过缩放图像 (imshow(image,[]))?我同意@Andy。您不应该覆盖函数名称(如图像)。

标签: image-processing octave threshold


【解决方案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")

创造

【讨论】:

  • 感谢您的指出!归根结底,我认为这是参数值的问题,特别是 R。我能够通过忽略作者的原始建议并尝试不同的值来改进结果,所以这不是代码的问题.我会将其标记为已修复。
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多