不同的行为:graythresh vs multithresh

时间:2017-07-30 17:34:03

标签: matlab image-processing

我想创建一个MRI扫描的二进制图,从背景中划分感兴趣的区域。我想过使用Otsu的方法,我首先使用了' graythresh'功能,但结果很差。我尝试使用multithresh函数只将图像作为输入(默认为2级)并获得了更好的结果。 我在网上搜索,我发现答案说他们都实现了Otsu方法,应该返回相同的结果。所以我想知道差异是什么,如果有的话,或者只是为什么我会得到不同的结果。是否有不同的实现算法可以在某些情况下获得更好的结果?

我无法附加我正在处理的图片,因为它来自私人数据库,但我使用的代码就是这个(IM是图像,是从.nii文件加载的并且是一个double的矩阵,我也得到了度量输出,因为我需要在不同的任务中):

[level, metric]=graythresh(IM);
bin_mask=imbinarize(IM,level);
figure
imshowpair(IM,bin_mask,'montage')


[level1, metric1]=multithresh(IM);
bin_mask1=imbinarize(IM,level1);
figure
imshowpair(IM,bin_mask1,'montage')

灰色结果:

graythresh_result

多重结果:

mutithresh_result

1 个答案:

答案 0 :(得分:0)

正如我在评论中指出的那样,两个函数的输出,即阈值,具有不同的范围:

  • multithresh:与原始图片相同的范围

  • graythresh:归一化范围,即介于0和1之间

multithresh的文档中也指出了这一点:

  

这些阈值与输入图像A的范围相同,不像   graythresh函数,返回标准化阈值   范围[0,1]。