图像处理中Normalization的应用

图像处理中Normalization的应用

背景:我想把肺部CT图像数据和对应的掩码标签重合显示,也就是下图这种效果,通过对应元素相乘实现,但是两张图像的数据格式和分布都不相同,因此用到了normalization。

图像处理中Normalization的应用_第1张图片

首先查看数据,两张图片的尺寸都是512*512,将numpy数据打印出来:

print(min(img_org), max(img_org))
print(img_org)
print(mask_org)
-2048 3038
[[-2048 -2048 -2048 ... -2048 -2048 -2048]
 [-2048 -2048 -2048 ... -2048 -2048 -2048]
 [-2048 -2048 -2048 ... -2048 -2048 -2048]
 ...
 [-2048 -2048 -2048 ... -2048 -2048 -2048]
 [-2048 -2048 -2048 ... -2048 -2048 -2048]
 [-2048 -2048 -2048 ... -2048 -2048 -2048]]
[[False False False ... False False False]
 [False False False ... False False False]
 [False False False ... False False False]
 ...
 [False False False ... False False False]
 [False False False ... False False False]
 [False False False ... False False False]]

可以看到img_org的像素区间是[-2048,3038],mask的数据是布尔值。需要对img_org进行normalization到[0,1],把布尔值也转换为0和1。

normalization

维基百科:在图像处理中,normalization是一个改变像素强度值范围的过程。例如,一份报纸将努力使一期中的所有图像共享一个相似的灰度范围。

linear normalization:

在这里插入图片描述

将newMin=0,newMax=1带入可以得到:

image = (img_org - np.min(img_org)) / (np.max(img_org) - np.min(img_org))

对于mask图像:

 mask = mask_org.astype(int)

(本来想用mask[mask=False]=0)不知道为什么不行)

这样两张图像的像素值都在[0,1]区间内了,相乘就可以得到合成图:

img_overlap = image * mask

fig,ax = plt.subplots(1,3,figsize=[8,8])
ax[0].imshow(image[310:410,250:350],cmap='gray')
ax[1].imshow(mk[310:410,250:350],cmap='gray')
ax[2].imshow(img_overlap[310:410,250:350],cmap='gray')
for x in ax.ravel():
x.axis("off")
plt.show()

你可能感兴趣的:(计算机视觉,python,数字图像处理,normalization)