图像归一化——精选推荐

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像归⼀化
⼀、简介
图像归⼀化是计算机视觉、模式识别等领域⼴泛使⽤的⼀种技术。

所谓图像归⼀化, 就是通过⼀系列变换, 将待处理的原始图像转换成相应的唯⼀标准形式(该标准形式图像对平移、旋转、缩放等仿射变换具有不变特性)。

近年来, 基于矩的图像归⼀化技术受到了⼈们的普遍关注, 其基本⼯作原理为: ⾸先利⽤图像中对仿射变换具有不变性的矩来确定变换函数的参数, 然后利⽤此参数确定的变换函数把原始图像变换为⼀个标准形式的图像(该图像与仿射变换⽆关)。

⼀般说来, 基于矩的图像归⼀化过程包括 4 个步骤即坐标中⼼化、x-shearing 归⼀化、缩放归⼀化和旋转归⼀化。

基本上归⼀化思想是利⽤图像的不变矩寻找⼀组参数使其能够消除其他变换函数对图像变换的影响。

也就是转换成唯⼀的标准形式以抵抗仿射变换。

图像归⼀化使得图像可以抵抗⼏何变换的攻击,它能够找出图像中的那些不变量,从⽽得知这些图像原本就是⼀样的或者⼀个系列的。

以下你要知道的:
1.归⼀化处理并没有改变图像的对⽐度
2.归⼀化处理很简单,假设原图像是8位灰度图像,那么读⼊的像素矩阵最⼤值为256,最⼩值为1,定义矩阵为I,J=I/256,就是归⼀化的图像矩阵,就是说归⼀化之后所有的像素值都在[0,1]区间内。

⼆、什么是归⼀化
就是通过⼀系列变换(即利⽤图像的不变矩寻找⼀组参数使其能够消除其他变换函数对图像变换的影响),将待处理的原始图像转换成相应的唯⼀标准形式(该标准形式图像对平移、旋转、缩放等仿射变换具有不变特性)。

基于矩的图像归⼀化技术基本⼯作原理为:⾸先利⽤图像中对仿射变换具有不变性的矩来确定变换函数的参数,然后利⽤此参数确定的变换函数把原始图像变换为⼀个标准形式的图像(该图像与仿射变换⽆关)。

⼀般说来,基于矩的图像归⼀化过程包括4个步骤,即坐标中⼼化、x-shearing 归⼀化、缩放归⼀化和旋转归⼀化。

图像归⼀化使得图像可以抵抗⼏何变换的攻击,它能够找出图像中的那些不变量,从⽽得知这些图像原本就是⼀样的或者⼀个系列的。

三、为什么归⼀化
1.基本上归⼀化思想是利⽤图像的不变矩寻找⼀组参数使其能够消除其他变换函数对图像变换的影响。

也就是转换成唯⼀的标准形式以抵抗仿射变换。

图像归⼀化使得图像可以抵抗⼏何变换的攻击,它能够找出图像中的那些不变量,从⽽得知这些图像原本就是⼀样的或者⼀个系列的。

2.matlab⾥图像数据有时候必须是浮点型才能处理,⽽图像数据本⾝是0-255的UNIT型数据所以需要归⼀化,转换到0-1之间。

3.归⼀化是⼀种简化计算的⽅式,即将有量纲的表达式,经过变换,化为⽆量纲的表达式,成为纯量。

⽬的是为了:
(1)避免具有不同物理意义和量纲的输⼊变量不能平等使⽤
(2)bp中常采⽤sigmoid函数作为转移函数,归⼀化能够防⽌净输⼊绝对值过⼤引起的神经元输出饱和现象
(3)保证输出数据中数值⼩的不被吞⾷
3.神经⽹络中归⼀化的原因:
归⼀化是为了加快训练⽹络的收敛性,可以不进⾏归⼀化处理;
归⼀化的具体作⽤是归纳统⼀样本的统计分布性。

归⼀化在0-1之间是统计的概率分布,归⼀化在-1--+1之间是统计的坐标分布。

归⼀化有同⼀、统⼀和合⼀的意思。

⽆论是为了建模还是为了计算,⾸先基本度量单位要同⼀,神经⽹络是以样本在事件中的统计分别⼏率来进⾏训练(概率计算)和预测的,归⼀化是同⼀在0-1之间的统计概率分布;当所有样本的输⼊信号都为正值时,与第⼀隐含层神经元相连的权值只能同时增加或减⼩,从⽽导致学习速度很慢。

为了避免出现这种情况,加快⽹络学习速度,可以对输⼊信号进⾏归⼀化,使得所有样本的输⼊信号其均值接近于0或与其均⽅差相⽐很⼩。

归⼀化是因为sigmoid函数的取值是0到1之间的,⽹络最后⼀个节点的输出也是如此,所以经常要对样本的输出归⼀化处理。

所以这样做分类的问题时⽤[0.9 0.1 0.1]就要⽐⽤[1 0 0]要好。

但是归⼀化处理并不总是合适的,根据输出值的分布情况,标准化等其它统计变换⽅法有时可能更好。

四、matlab图像处理如何归⼀化
matlab中的归⼀化处理有三种⽅法
1. premnmx、postmnmx、tramnmx、mapminmax
(1)premnmx函数⽤于将⽹络的输⼊数据或输出数据进⾏归⼀化,归⼀化后的数据将分布在[-1,1]区间内。

premnmx语句的语法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T),其中P,T分别为原始输⼊和输出数据。

在训练⽹络时如果所⽤的是经过归⼀化的样本数据,那么以后使⽤⽹络时所⽤的新数据也应该和样本数据接受相同的预处理,这就要⽤到tramnmx函数:
(2)tramnmx语句的语法格式是:[PN]=tramnmx(P,minp,maxp)
其中P和PN分别为变换前、后的输⼊数据,maxp和minp分别为premnmx函数找到的最⼤值和最⼩值。

⽹络输出结果需要进⾏反归⼀化还原成原始的数据,常⽤的函数是:postmnmx。

(3)postmnmx语句的语法格式是:[PN] = postmnmx(P,minp,maxp)
其中P和PN分别为变换前、后的输⼊数据,maxp和minp分别为premnmx函数找到的最⼤值和最⼩值。

(4)还有⼀个函数是mapminmax,该函数可以把矩阵的每⼀⾏归⼀到[-1 1].
mapminmax语句的语法格式是:[y1,PS] = mapminmax(x1),其中x1 是需要归⼀的矩阵 y1是结果。

当需要对另外⼀组数据做归⼀时,就可以⽤下⾯的⽅法做相同的归⼀了
y2 = mapminmax('apply',x2,PS)
当需要把归⼀的数据还原时,可以⽤以下命令:
x1_again = mapminmax('reverse',y1,PS)
1> 默认的map范围是[-1, 1],所以如果需要[0, 1],则按这样的格式提供参数:
MappedData = mapminmax(OriginalData, 0, 1);
2> 只按⾏归⼀化,如果是矩阵,则每⾏各⾃归⼀化;
3> 如果需要对整个矩阵归⼀化,⽤如下⽅法:
FlattenedData = OriginalData(:)'; % 展开矩阵为⼀列,然后转置为⼀⾏。

MappedFlattened = mapminmax(FlattenedData, 0, 1); % 归⼀化。

MappedData = reshape(MappedFlattened, size(OriginalData)); % 还原为原始矩阵形式。

此处不需转置回去,因为reshape恰好是按列重新排序
三种归⼀化⽅法:
除以序列最⼤值的,叫峰归⼀化;
除以序列之和的,叫⾯积归⼀化;
除以序列的模,叫数值归⼀化,得到序列的⽅差为0,均值为1;
(1) 线性函数转换,表达式如下:
y=(x-MinValue)/(MaxValue-MinValue)
y=0.1+(x-min)/(max-min)*(0.9-0.1)(归⼀到0.1-0.9之间)
说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最⼤值和最⼩值。

(2) 对数函数转换,表达式如下:
y=log10(x)
说明:以10为底的对数函数转换。

(3) 反余切函数转换,表达式如下:
y=atan(x)*2/PI
(4) Z-score标准化⽅法
这种⽅法给予原始数据的均值(mean)和标准差(standard deviation)进⾏数据的标准化。

经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
其中为所有样本数据的均值,为所有样本数据的标准差。

(5)⼀个归⼀化代码.
I = double(I);
maxvalue = max(max(I)');
%max在把矩阵每列的最⼤值找到,并组成⼀个单⾏的数组,转置⼀下就会⾏转换为列,再max就求⼀个最⼤的值,如果不转置,只能求出每列的最⼤值。

f = 1 - I/maxvalue; %为什么要⽤1去减?
Image1 = f;
参考:。

相关文档
最新文档