使用 ITK 计算图像的中值
Compute the median value of an image using ITK
我是图片处理新手,尤其是ITK的使用。我想计算 Dicom 图像(CT 扫描)的 Canny 过滤器,为此,我需要使用上限和下限阈值调整过滤器。我读到 there 可以用图像的中值和统计假设来计算阈值参数,并且在大多数情况下它都能给出很好的结果。
问题是我很难计算这个中值。我试图从我的图像的直方图计算中获得它,但这大大扩展了我的代码,我发现任何人都很难轻易理解我在项目的这一部分所做的工作。
在 ITK 中,除了计算直方图之外,还有其他方法可以计算图像的中值吗?
在此先感谢您的帮助。
当然,ITK 的示例中包含计算图像中值的示例:
您可以先应用此过滤器计算中位数,然后将其用作 Canny 过滤器阈值的输入。
我相信您想计算整个图像的一些基本图像强度统计信息。请查看 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
我是图片处理新手,尤其是ITK的使用。我想计算 Dicom 图像(CT 扫描)的 Canny 过滤器,为此,我需要使用上限和下限阈值调整过滤器。我读到 there 可以用图像的中值和统计假设来计算阈值参数,并且在大多数情况下它都能给出很好的结果。
问题是我很难计算这个中值。我试图从我的图像的直方图计算中获得它,但这大大扩展了我的代码,我发现任何人都很难轻易理解我在项目的这一部分所做的工作。
在 ITK 中,除了计算直方图之外,还有其他方法可以计算图像的中值吗?
在此先感谢您的帮助。
当然,ITK 的示例中包含计算图像中值的示例:
您可以先应用此过滤器计算中位数,然后将其用作 Canny 过滤器阈值的输入。
我相信您想计算整个图像的一些基本图像强度统计信息。请查看 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