使用 ITK 计算图像的中值
Compute the median value of an image using ITK
我是图片处理的新手,尤其是在使用ITK方面。我想计算Dicom图像的Canny过滤器(CT扫描(,为此,我需要使用上限和下限阈值调整过滤器。我在那里读到,可以使用图像的中值和统计假设来计算阈值参数,并且在大多数情况下都能给出良好的结果。
问题是我在计算这个中值时遇到了困难。我试图从我的图像的直方图计算中获得它,但这极大地扩展了我的代码,我发现任何人都很难轻易理解我在项目的这一部分所做的工作。
除了计算直方图之外,还有其他方法可以计算ITK中图像的中值吗?
提前感谢您的帮助。
我相信你想计算整个图像的一些基本图像强度统计数据。请查看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
当然,ITK的示例中包含计算图像的中值的示例:
- https://itk.org/ITKExamples/src/Filtering/Smoothing/ApplyMedianFilter/Documentation.html
您可以先应用此过滤器来计算中位数,然后将其用作 Canny 过滤器阈值的输入。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 使用 ITK 计算图像的中值
- ITK - 如何合并两个图像
- 如何在Visual Studio中使用ITK配置的C 读取图像
- FloatType图像ITK上的分割故障
- 如何将调色板图像读为具有ITK标量图像
- 读取 *.mhd/*.raw 在 ITK 中格式化 3D 图像
- 如何在Python中实现ITK映像和SimpleItk图像之间的转换
- ITK-图像处理,计算3D图像的形状特征
- ITK 中具有稀疏和连续坐标的图像
- 如何使用vtk和itk创建可变维图像查看器
- 更新itk图像在Qt用户界面