什么是Matlab中的区域容忍度?

时间:2017-07-13 09:35:50

标签: matlab image-segmentation

以下代码中tolerance的含义是什么?它对图片的影响是什么?

我所理解的是,此容差值可以是0到255.如果我使用零,输出图像将变为全黑,如果我使用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);

1 个答案:

答案 0 :(得分:1)

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

因此,公差可以被认为是从区域的平均值到新的候选像素的最大“步长”。让我们举个例子:

假设我们有一个uint8图像,因此它的值范围为0到255.该区域的当前平均值为120,容差为30.然后,如果候选像素的值为在90到150之间。

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

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

这是uint8文件的全部内容。例如。你的图像存储为double,你必须使用更高的公差值!