使用 SimpleITK 进行直方图均衡化
Histogram equalization with SimpleITK
关于这个 建议我这个代码:
import SimpleITK as sitk
import numpy as np
# Create a noise Gaussian blob test image
img = sitk.GaussianSource(sitk.sitkFloat32, size=[240,240,48], mean=[120,120,24])
img = img + sitk.AdditiveGaussianNoise(img,10)
# Create a ramp image of the same size
h = np.arange(0.0, 255,1.0666666666, dtype='f4')
h2 = np.reshape(np.repeat(h, 240*48), (48,240,240))
himg = sitk.GetImageFromArray(h2)
print(himg.GetSize())
# Match the histogram of the Gaussian image with the ramp
result=sitk.HistogramMatching(img, himg)
# Display the 3d image
import itkwidgets
itkwidgets.view(result)
为什么我需要两张图做直方图均衡?
因为我想做Histogram Equalization,这个就是Histogram Matching。在此article解释不同。
通过直方图匹配实现直方图均衡化有点变通。
'himg' 是一个渐变图像,所以强度从 0 到 255。它的所有强度均等表示,所以它的直方图是平坦的。
因此,我们正在将您图片的直方图与平面直方图进行匹配。最终结果是直方图均衡。
关于这个
import SimpleITK as sitk
import numpy as np
# Create a noise Gaussian blob test image
img = sitk.GaussianSource(sitk.sitkFloat32, size=[240,240,48], mean=[120,120,24])
img = img + sitk.AdditiveGaussianNoise(img,10)
# Create a ramp image of the same size
h = np.arange(0.0, 255,1.0666666666, dtype='f4')
h2 = np.reshape(np.repeat(h, 240*48), (48,240,240))
himg = sitk.GetImageFromArray(h2)
print(himg.GetSize())
# Match the histogram of the Gaussian image with the ramp
result=sitk.HistogramMatching(img, himg)
# Display the 3d image
import itkwidgets
itkwidgets.view(result)
为什么我需要两张图做直方图均衡?
因为我想做Histogram Equalization,这个就是Histogram Matching。在此article解释不同。
通过直方图匹配实现直方图均衡化有点变通。
'himg' 是一个渐变图像,所以强度从 0 到 255。它的所有强度均等表示,所以它的直方图是平坦的。
因此,我们正在将您图片的直方图与平面直方图进行匹配。最终结果是直方图均衡。