首页 文章

Otsu方法(matlab中的graythresh函数)产生一个比例尺的结果? 0:255,0:max(px强度),min:max?

提问于
浏览
3

只是澄清一下关于Otsu阈值方法的观点,该方法缺乏文档和维基百科文章中的定义 . 如果应用Otsu方法(在matlab函数 graythresh 中),则返回0到1之间的阈值 .

给出2个假设的灰度图像:

  • dark (像素强度范围为0到100)和

  • light (像素强度范围为155到255)

如果我分别为 darklight 图像得到0.75的Otsu阈值,那么在每种情况下它会映射到什么灰度像素强度?

  • dark -> 75light -> 231 例如相对于每个图像中的值范围

  • dark -> 75light -> 191 例如相对于0到最大像素值的范围

  • dark -> 191light -> 191 例如相对于全范围的灰度像素值(0-255)?

4 回答

  • 2

    正确的答案是第一个:

    相对于每个图像中的值范围,暗= 75并且光= 230

    graythresh 使用图像中的最小值和最大值作为边界,这是最符合逻辑的行为 .

  • 1

    @Ratbert接受的答案是错误的说法

    正确的答案是第一个

    graythresh使用图像中的最小值和最大值作为边界,这是最符合逻辑的行为 .

    而rayryeng似乎同意这一点 . 大卫帕克斯似乎已经凭经验证实了这一点 .

    Anand给出了正确答案,奇怪的是,这似乎有一个反对票 . 他非常令人信服地解释说

    全范围的灰度像素值'取决于输入图像的数据类型

    正如他解释的那样

    这是第三种选择

    除了 dark 图像不可能达到0.75的阈值这一事实 .

    首先让我们澄清最简单案例的声明之间的区别,在明确的MATLAB中,所以没有混淆 . 对于值为 minmax 的图像,该问题提出了三种可能性,当转换为等式时:

    • threshold = min + (max-min) * graythresh

    • threshold = max * graythresh

    • threshold = 255 * graythresh

    假设图像只包含两个点,强度为0,另一个点为100.这意味着 dark = uint8([0 100]); . 第二张图片 light = dark+155; . 当我们计算 255*graythresh(dark) 时,我们得到 49.5 . 当我们计算 255*graythresh(light) 时,我们得到 204.5 . 这些答案明显表明第三种选择是唯一的可能性 .

    还有一个细节 . 如果您尝试 255*graythresh(uint8(1:2)) ,答案是 1 ,而不是 1.5 . 所以看起来如果你使用 greythresh 来阈值图像,你应该使用 image <= 255*graythesh(image) 与小于或等于,而不是简单的小于 .

  • 0

    您的第三个答案似乎对我来说最合适,澄清“全范围的灰度像素值”取决于输入图像的数据类型 . 例如,对于uint8图像,Otsu阈值0.75对应于大约191.对于uint16图像,这将对应于49151 .

  • 1

    那么,为了后人的缘故,我对前面提到的方法进行了比较 . 我拍摄了具有全范围灰度像素强度的典型图像,然后拍摄了相同图像的 darklight 版本,并获得了每个的 graythresh 值 . 我使用上述每个映射应用Otsu阈值 .

    光图像非常清楚地表明该算法在图像的像素强度范围内产生阈值 . 如果我们假设全范围的像素强度,Otsu算法将产生低于图像中任何实际存在的阈值,这没有多大意义,至少假设现有的黑色背景是透明/不相关的 .

    如果你假设图像的现有黑色部分是相关的黑暗,我想有人可以为假设像素强度的全范围做出论证 . 我当然欢迎那里的评论 .

    Full size images seen below

    Comparison of grayscale intensity obtained from OTSU threshold


    修改上面的话:当我将除了 light 图像的上半部分以外的所有图像变黑并再次取出Otsu阈值时,我得到相同的阈值0.3020 . 如果图像的暗部分与Otsu阈值相关,则额外的黑暗会影响该值,因此,Ratbert的答案在经验上被证明是正确的 .

    Further test

相关问题