以下代码中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);
答案 0 :(得分:1)
算法将当前区域扩大一个像素。然后将这些新像素(候选像素)中的每一个的值与当前区域的平均值进行比较。如果像素的值在当前平均值的容差范围内,则将其添加到该区域,否则将被丢弃。
因此,公差可以被认为是从区域的平均值到新的候选像素的最大“步长”。让我们举个例子:
假设我们有一个uint8图像,因此它的值范围为0到255.该区域的当前平均值为120,容差为30.然后,如果候选像素的值为在90到150之间。
因此,如果将公差设置为0,则只有在 与区域平均值相同时才会添加新像素 - 这是非常不可能的!另一方面,如果将公差设置为255,则会添加每个像素,因为无论平均值如何,这些值都不能超出公差范围。
将公差设置为127将是一个非常高的步长,因此可能是一个坏主意。例如。如果当前均值为100,那么将添加0到227之间的每个候选像素,这可能几乎是每个像素。
这是uint8文件的全部内容。例如。你的图像存储为double,你必须使用更高的公差值!