mat2gray对多重分泌的影响

时间:2016-07-04 15:01:27

标签: matlab image-processing cluster-analysis image-segmentation

我不明白为什么在“原始”双图像上使用multithresh获得的分割与在mat2gray缩放的同一图像上使用相同参数的分割不同。

E.g:

testimage = randi(100,[200 200]);
figure;imagesc(testimage)


threshs = multithresh(testimage,5);
l0 = imquantize(testimage,threshs);

threshs = multithresh(mat2gray(testimage),5);
l1 = imquantize(mat2gray(testimage),threshs);

此处,在我的情况下,l1与808像素中的l0不同。为什么? testimagemat2gray(testimage)中像素之间的相对差异应该相等,只是绝对差异会发生变化。多线程的重要性如何?

1 个答案:

答案 0 :(得分:2)

您间接遇到浮动精度错误。如果我们修改一点你的代码,只是为了可视化它

testimage = randi(100,[200 200]);
figure;imagesc(testimage)

gray_image=mat2gray(testimage);

threshs1 = multithresh(testimage,5);
l0 = imquantize(testimage,threshs1);

threshs2 = multithresh(gray_image,5);
l1 = imquantize(gray_image,threshs2);

%For this example
threshs1
%threshs1 =
%       17.6941    34.0000    50.6941    67.0000    83.6941

threshs2
%threshs2 =
%        0.1686     0.3333     0.5020     0.6667     0.8353

然后我们找到两个原始矩阵中的一个差异点

find(l0~=l1,1)
%ans =
%    67

testimage(67)
%ans =
%    34

gray_image(67)
%ans =
%    0.3333

这是浮动精度发挥作用的地方

testimage(67)==threshs1(2)  % 34 == 34.0000
%ans =
%     1

gray_image(67)==threshs2(2) % 0.3333 == 0.3333
%ans =
%     0

1/3的值未正确保存为二进制,see here for an explanation whyimquantize必须将图片的值与>=或类似的阈值进行比较,它将在一个案件中通过而在另一个案件中失败。

遗憾的是,我看不到修改代码的简单方法,以确保l0l1在每种情况下都相同。