Matlab 中区域增长的公差是多少?

What is tolerance in region growing in Matlab?

下面代码中的tolerance是什么意思,对图像有什么影响?

我的理解是,这个公差值可以从0到255。如果我使用0,输出图像就会变成全黑,如果我使用255,输出就会变成全白。

为什么我们不总是将它的值设置为 127?

https://www.mathworks.com/matlabcentral/fileexchange/35269-simple-single-seeded-region-growing

segCroissRegion.m

function Phi = segCroissRegion(input_image, x, y, tolerance)
    if(x == 0 || y == 0)
        imshow(input_image,[0 255]);
        [x,y] = ginput(1);
    end
    Phi = false(size(input_image,1),size(input_image,2));
    %ref = true(size(I,1),size(I,2));
    PhiOld = Phi;
    Phi(uint8(x),uint8(y)) = 1;

    while(sum(Phi(:)) ~= sum(PhiOld(:)))
        PhiOld = Phi;
        segm_val = input_image(Phi);
        meanSeg = mean(segm_val);
        posVoisinsPhi = imdilate(Phi,strel('disk',1,0)) - Phi;
        voisins = find(posVoisinsPhi);
        valeursVoisins = input_image(voisins);
        Phi(voisins(valeursVoisins > meanSeg - tolerance & valeursVoisins < meanSeg + tolerance)) = 1;
    end

    % Uncomment this if you only want to get the region boundaries
    % SE = strel('disk',1,0);
    % ImErd = imerode(Phi,SE);
    % Phi = Phi - ImErd;
end

main.m

overlaid_image = gray_imread('region_growing.png');
[x, y] = get_one_point_from_image(overlaid_image);
tolerance = 127;
Phi = segCroissRegion(overlaid_image, x, y, tolerance);
imshow(Phi);

算法将当前区域扩大一个像素。然后将每个新像素(候选像素)的值与当前区域的平均值进行比较。如果像素值在当前平均值的容差范围内,则将其添加到该区域,否则丢弃。

所以容差可以被认为是从区域的平均值到新的候选像素的最大值"step size"。让我们举个例子:

假设我们有一个 uint8 图像,因此它的值可以在 0 到 255 之间。该区域的当前平均值是 120,容差是 30。然后只有当候选像素是值介于 90 和 150 之间。

因此,如果您将公差设置为 0,则只有当新像素的值 完全 与区域均值相同时才会添加新像素 - 这不太可能!另一方面,如果将公差设置为 255,则将添加每个像素,因为无论平均值如何,值都不能超出公差。

将容差设置为 127 将是一个非常高的步长,因此可能不是一个好主意。例如。如果当前平均值为 100,则将添加 0 到 227 之间的每个候选像素,这可能几乎是每个像素。

这都是针对 uint8 文件的。例如。您的图像存储为双倍图像,您必须使用更高的公差值!