【问题标题】:Different Behaviour: graythresh vs multithresh不同的行为:graythresh 与 multithresh
【发布时间】: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 之间的元素,有关更多信息,请参阅documentationimbinarize(IM) 的结果是什么? `
  • 结果是显示的那个,但是你解决了我的问题,因为我没有考虑到阈值有不同的范围。我可能会规范化输入图像并使用 graythresh。非常感谢你! :)

标签: matlab image-processing


【解决方案1】:

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

  • multithresh:与原图范围相同

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

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

这些阈值与输入图像 A 在同一范围内,不像 graythresh 函数,它在 范围 [0, 1]。

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 2011-09-28
    • 2014-09-19
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多