(注:文中引号里的内容都摘自参考文献,如果侵权,请私信联系)
“所谓图像归一化, 就是通过一系列变换, 将待处理的原始图像转换成相应的唯一标准形式(该标准形式图像对平移、旋转、缩放等仿射变换具有不变特性)。近年来, 基于矩的图像归一化技术受到了人们的普遍关注, 其基本工作原理为: 首先利用图像中对仿射变换具有不变性的矩来确定变换函数的参数, 然后利用此参数确定的变换函数把原始图像变换为一个标准形式的图像(该图像与仿射变换无关)。 一般说来, 基于矩的图像归一化过程包括 4 个步骤 即坐标中心化、x-shearing 归一化、缩放归一化和旋转归一化。注意:
1.归一化处理并没有改变图像的对比度 ;
2.归一化处理很简单,假设原图像是8位灰度图像,那么读入的像素矩阵最大值为256,最小值为1,定义矩阵为I,J=I/256,就是归一化的图像矩阵,就是说归一化之后所有的像素值都在[0,1]区间内。”
“不同的医学成像因素造成相同性质的组织在图像灰度信息上的不一致。灰度归一化就是在保留具有诊断价值的灰度差异的同时,减小甚至消除图像中灰度不一致而进行的图像转换方法,以便计算机自动分析处理。当前常见的算法根据灰度转换的依据分为基于直方图的灰度归一化以及基于图像内容特征的灰度归一化两大类。”
itk中提供的类叫做:itkNormalizeImageFilter
作用:将图像的均值设为0,方差设为1。
pix_output = ( pix_input - mean) / sqrt( variance )
typedef itk::NormalizeImageFilter< FloatImageType, FloatImageType >FilterType;
FilterType::Pointer normalizeFilter = FilterType::New();
normalizeFilter->SetInput(input_data);
typename StatisticsImageFilter<TInputImage>::Pointer m_StatisticsFilter;
typename ShiftScaleImageFilter<TInputImage,TOutputImage>::Pointer m_ShiftScaleFilter;2.数据生成 template <class TInputImage, class TOutputImage>
void
NormalizeImageFilter<TInputImage, TOutputImage>
::GenerateData()
{
//以下四行暂时不看,没什么用
ProgressAccumulator::Pointer progress = ProgressAccumulator::New();
progress->SetMiniPipelineFilter(this);
progress->RegisterInternalFilter(m_StatisticsFilter,.5f);
progress->RegisterInternalFilter(m_ShiftScaleFilter,.5f);
// Gather statistics 通过m_StatisticsFilter获取图像现在均值和方差
m_StatisticsFilter->SetInput(this->GetInput());
m_StatisticsFilter->GetOutput()->SetRequestedRegion(this->GetOutput()->GetRequestedRegion());
m_StatisticsFilter->Update();
// Set the parameters for Shift 通过m_ShiftScaleFilter进行变换
m_ShiftScaleFilter->SetShift(-m_StatisticsFilter->GetMean());//偏移后均值为0
m_ShiftScaleFilter->SetScale(NumericTraits<ITK_TYPENAME StatisticsImageFilter<TInputImage>::RealType>::One
/ m_StatisticsFilter->GetSigma());//缩放后方差为1
//注意:
//NumericTraits<ITK_TYPENAME StatisticsImageFilter<TInputImage>::RealType>::One
//这么长的一段,其实就是最后一个单词有用:1
m_ShiftScaleFilter->SetInput(this->GetInput());
m_ShiftScaleFilter->GetOutput()->SetRequestedRegion(this->GetOutput()->GetRequestedRegion());
m_ShiftScaleFilter->Update();
// Graft the mini pipeline output to this filters output
this->GraftOutput(m_ShiftScaleFilter->GetOutput());
}itkShiftScaleImageFilter:对图像的灰度值线性变换,偏移量和缩放比例由用户指定。pix_output = (pix_input + shift) * scale
SetShift():偏移量
SetScale():缩放比例
如果现在需要比较样本二与样本一、样本三哪个最相似?为简单起见我们使用欧式距离。
样本二与样本一的相似度:99*99+0*0+0*0+0*0=99*99;
样本二与样本三的相似度:0*0+1*1+1*1=2;
很显然样本二与样本三最为相似。 如果我们对数据进行线性归一化到[0,1],则归一化后的数据为
样本二与样本一的相似度:1*1+0*0+0*0+0*0=1;
样本二与样本三的相似度:0*0+1*1+1*1=2;
很显然样本二与样本一最为相似。
其实最终结果应该是样本二与样本一最为相似,上述的这种数据归一化我们将它称为特征向量内部归一化。
很显然有内部归一化就有外部归一化。这两者的区别在于归一化的对象。内部归一化对于其中特定的某一维特征向量进行归一化,外部归一化则是对于每个样本的N维特征向量进行归一化。
内部归一化:一般使用的方法为:高斯归一化;
外部归一化:有线性缩放到单位区间、线性缩放到单位方差、变换为[0,1]上均匀分布的随机变量、排序归一化。”
-----摘自百度文库中《图像处理中特征向量的归一化》
冥冥之中,万事皆有因果。君子之道,谨言慎行。
本文详细介绍了图像归一化的概念及应用,包括基于矩的图像归一化技术、灰度归一化方法及其在医学图像处理中的作用。同时,通过示例展示了归一化在特征向量融合中的重要性。
531

被折叠的 条评论
为什么被折叠?



