【问题标题】:Compute the median value of an image using ITK使用 ITK 计算图像的中值
【发布时间】:2017-08-14 22:29:58
【问题描述】:

我是图片处理的新手,尤其是在使用 ITK 方面。我想计算 Dicom 图像(CT 扫描)的 Canny 过滤器,为此,我需要使用上限和下限阈值调整过滤器。我读到there 可以使用图像的中值和统计假设来计算阈值参数,并且在大多数情况下它会给出很好的结果。

问题是我很难计算这个中值。我试图从图像的直方图计算中获得它,但这大大扩展了我的代码,我发现任何人都很难轻松理解我在项目的这一部分所做的工作。

除了计算直方图之外,还有其他方法可以计算 ITK 中图像的中值吗?

提前感谢您的帮助。

【问题讨论】:

    标签: c++ itk


    【解决方案1】:

    我相信您想计算整个图像的一些基本图像强度统计信息。请看itk::StatisticsImageFilter:

    https://itk.org/Doxygen/html/classitk_1_1StatisticsImageFilter.html

    这很接近,它计算平均值和标准差,但不计算中位数。

    标签 do 上的运算符的统计过滤器包括中位数。过滤器调用 *itk::LabelStatisticsImageFilter:

    https://itk.org/Doxygen/html/classitk_1_1LabelStatisticsImageFilter.html

    LabelStatisticsImageFilter 通常在标签图像上运行。标签图像只是一个整数图像,它使用整数值来表示分割的对象。

    在这种情况下,我们将创建一个代表整个图像的标签图像,以便我们对整个图像进行统计。如果复制图像,并使用 Image::Fill 制作全 1 的标签图像,您可以获得所需的统计信息。

    这里有一些 SimpleITK Python 代码来演示这个想法:

    In [1]: import SimpleITK as sitk
    
    In [2]: img = sitk.Image([10]*2, sitk.sitkUInt8)
    
    In [3]: img = sitk.AdditiveGaussianNoise(img)
    
    In [4]: stats = sitk.LabelStatisticsImageFilter()
    
    In [5]: stats.UseHistogramsOn()
    
    In [6]: onesImage = (img == img)
    
    In [7]: stats.Execute(img+1, onesImage)
    
    In [8]: stats.GetMean(1)
    Out[8]: 1.43
    
    In [9]: stats.GetMedian(1)
    Out[9]: 1.0
    

    【讨论】:

    • 你的回答对我很有帮助,谢谢。但是,我仍然无法理解:标签图像的目的是什么?在你提到它之前我已经看过这个文档,但我放弃了它,因为我不知道标签是什么,因为我想在整个图像上使用这个过滤器,而不仅仅是它的一小部分。跨度>
    • 我已经更新了我的答案,以阐明标签图像是什么以及我们如何使用它。
    • 我用直方图计算解决了这个问题,但我也试过你的答案,效果很好。谢谢。
    【解决方案2】:

    当然,ITK 的示例中有一个计算图像中值的示例:

    您可以先应用此过滤器来计算中值,然后将其用作 Canny 过滤器阈值的输入。

    【讨论】:

    • 这个例子不计算中值滤波器吗?因为我只是在寻找中值,所以我不想应用任何平滑滤波器。对不起,如果我的问题很愚蠢,这个问题真的让我很困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多