使用ITK计算图像的中值

时间:2017-08-09 13:38:03

标签: c++ itk

我是图像处理的新手,特别是在使用ITK时。我想计算一个Dicom图像的Canny过滤器(CT扫描),为此,我需要调整过滤器的上部和下部。较低的阈值。我读到there可以用图像的中值和统计假设来计算阈值参数,并且在大多数情况下它可以得到很好的结果。

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

有没有其他方法可以计算ITK中图像的中值而不是计算其直方图?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我相信你想在整个图像上计算一些基本的图像强度统计数据。请查看 itk :: StatisticsImageFilter

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

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

统计信息过滤器标签上的运算符包含中位数。过滤器是调用* 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

答案 1 :(得分:0)

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

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