【发布时间】:2017-07-30 17:34:02
【问题描述】:
我想创建 MRI 扫描的二进制图,以将感兴趣区域与背景分开。我想用Otsu的方法,我首先使用了'graythresh'函数,但结果很差。我尝试了仅将图像作为输入(默认为 2 级)的 multithresh 函数,并获得了更好的结果。 我在网上搜索,我找到的答案说它们都实现了 Otsu 方法并且应该返回相同的结果。所以我想知道有什么区别,如果有的话,或者只是为什么我得到不同的结果。是否有不同的实现算法可以在某些情况下产生更好的结果?
我无法附加我正在处理的图像,因为它来自私人数据库,但我使用的代码是这个(IM 是图像,从 .nii 文件加载,是一个双精度矩阵,我也得到了指标输出,因为我在不同的任务中需要它):
[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 结果:
多重阈值结果:
【问题讨论】:
-
我看到的唯一区别是 multithresh 返回与原始图像相同范围内的阈值,而 graythresh 返回介于 0 和 1 之间的元素,有关更多信息,请参阅documentation。
imbinarize(IM)的结果是什么? ` -
结果是显示的那个,但是你解决了我的问题,因为我没有考虑到阈值有不同的范围。我可能会规范化输入图像并使用 graythresh。非常感谢你! :)