MATLAB阈值处理

时间:2017-06-02 08:20:04

标签: image matlab image-processing

我使用以下MATLAB代码进行Niblack二值化。

    mean= averagefilter2(image1);
    meanSquare = averagefilter2(image1.^2);
    standardDeviation = (meanSquare - mean.^2).^0.5;
    binaryImage = image1 >=  (mean + k_threshold * standardDeviation);

   function img=averagefilter2(image1)
       meanFilter = fspecial('average',[60 60]);
       img = imfilter (image1,meanFilter);
   end

但是当我实施它时, Original Image 变  Binarised Image

(忽略黑色边框..只是为了突出显示图像边缘的白色斑点)

也就是说,在边缘附近,一些数据像素会丢失并变为白色(顶部和右侧边缘处的白色斑点)。我在这个实现中的任何地方都错了?是否有更好的“MATLAB方式”来实现它,还是应该使用嵌套循环手动计算平均值和标准差?

1 个答案:

答案 0 :(得分:2)

可能这是由imfilter函数的边界条件和你自己的函数averagefilter2的perharps引起的。

过滤时,在边缘情况下,您需要访问图像外部的像素。这意味着您需要对边界外发生的事情做出假设。

imfiltera parameter来选择假设在外面的内容,默认情况下假设为零。这肯定会导致平均值的较小值,也许这会使二值化被删除"那里。

尝试不同的值,并确保为您自己的功能实现它。

我建议从'symmetric'

开始