前言

在医学图像领域,由于不同设备的采集、成像因素等原因造成相同的组织在图像灰度信息上的不一致,图像归一化就是在保留具有诊断价值的灰度差异的同时,减小甚至消除图像中灰度不一致而进行的图像转换方法,图像的归一化更有利于计算机自动分析处理。因此,图像归一化就是通过一系列的变换,将待处理的原始图像转换成相应的标准形式。

下面将介绍两种常见的归一化方法,并展示相应的python代码。

1.min-max归一化

通过遍历图像矩阵中的每一个像素,设定max和min,进行数据的归一化处理:
x n o r m a l i z a t i o n = x − M i n M a x − M i n x_{normalization}=\frac{x-Min}{Max-Min} xnormalization=MaxMinxMin
该方法适用大多数类型的数据,能较好的保持原有数据分布结构,但是不适合用于稀疏数据的处理,对异常值的存在非常敏感。

在这里插入图片描述

import SimpleITK as sitk
import os
from os.path import join

image = sitk.ReadImage(imagepath)
resacleFilter = sitk.RescaleIntensityImageFilter()
resacleFilter.SetOutputMaximum(255)
resacleFilter.SetOutputMinimum(0)
res = resacleFilter.Execute(image)
sitk.WriteImage(res, outputpath)

2.Z-score归一化

Z-score给予原始数据的均值(mean)和标准差(standard deviation)进行数据的归一化,公式如下,意义为数值距离均值有几个标准差,当E(Z)=0,SD(Z)=1,即均值为0,标准差为1,则表示经过处理后的数据符合标准正态分布。
x n o r m a l i z a t i o n = x − μ σ x_{normalization}=\frac{x-\mu }{\sigma } xnormalization=σxμ
该方法适用大多数类型的数据,但是它是一种中心化方法,会改变原有数据的分布结构,同样也不适用于稀疏数据的处理。

在这里插入图片描述

import SimpleITK as sitk
import os

image = sitk.ReadImage(imagepath)
img_arr = sitk.GetArrayFromImage(image)
img_ori = image.GetOrigin()
img_spacing = image.GetSpacing()
img_dir = image.GetDirection()
mn = img_arr.mean()
sd = img_arr.std()
new_arr = (img_arr - mn) / sd
res = sitk.GetImageFromArray(new_arr)
res.SetOrigin(img_ori)
res.SetSpacing(img_spacing)
res.SetDirection(img_dir)
sitk.WriteImage(res, os.path.join(res, outputpath))
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐