我想创建一个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')
灰色结果:
多重结果:
答案 0 :(得分:0)
正如我在评论中指出的那样,两个函数的输出,即阈值,具有不同的范围:
multithresh
:与原始图片相同的范围
graythresh
:归一化范围,即介于0和1之间
multithresh
的文档中也指出了这一点:
这些阈值与输入图像A的范围相同,不像
graythresh
函数,返回标准化阈值 范围[0,1]。