归一化

cvNormalize函数

void cvNormalize( const CvArr* src, CvArr* dst,

double a=1, double b=0, int norm_type=CV_L2,

const CvArr* mask=NULL );

cvNormalize函数(续)

Normalize

根据某种范数或者数值范围归一化数组.

void
cvNormalize( const CvArr* src, CvArr* dst,

double
a=1, double b=0, int norm_type=CV_L2,

const
CvArr* mask=NULL );

src

输入数组

dst

输出数组,支持原地运算

a

输出数组的最小/最大值或者输出数组的范数

b

输出数组的最大/最小值

norm_type

归一化的类型,可以有以下的取值:

CV_C
- 归一化数组的C-范数(绝对值的最大值)

CV_L1
- 归一化数组的L1-范数(绝对值的和)

CV_L2
- 归一化数组的(欧几里德)L2-范数

CV_MINMAX
- 数组的数值被平移或缩放到一个指定的范围

mask

操作掩膜,用于指示函数是否仅仅对指定的元素进行操作

该函数归一化输入数组使它的范数或者数值范围在一定的范围内

对于不同的norm_type, 根据我的试验(mask=null)的时候, a,b(a>b)起的作用结果如下:

norm_type=CV_C时, src 被重新"缩放"(rescale)到dst, 使得dst的值是线性映射到[0,1]区间.(a,b其实无作用)

norm_type=CV_L1,或者 CV_L2时, 得到L1,L2规范化的dst.(a,b其实无作用)

norm_type=CV_MINMAX时, src会被缩放(rescale)和移动(translation)到dst,使得dst的值是线性映射到[b,a]区间.

cvNormalize函数(续)

代码:

#include
<iostream>

#include
<stdio.h>

#include
<stdlib.h>

#include
<cv.h>

#include
<cxcore.h>

#include
<highgui.h>

void
displayMat(const CvMat* mat){

int
col=mat->width;

int
row=mat->height;

double*
data=mat->data.db;

for(int
i=0;i<row;i++){

for(int
j=0;j<col;j++){

std::cout<<data[i*col+j]<<",
";

}

}

std::cout<<std::endl;

}

int
main (int argc, char * const argv[]) {

//
insert code here...

std::cout
<< "normalization\n";

double
data[]={1,4,5,6,7,10};

CvMat
src=cvMat(6,1,CV_64FC1,data);

CvMat
dst=cvMat(6,1,CV_64FC1,data);

std::cout<<"a=5,b=0:
";cvNormalize(&src,&dst,5,0,CV_C,NULL);

displayMat(&dst);std::cout<<"---------"<<std::endl;

std::cout<<"a=5,b=0:
";cvNormalize(&src,&dst,5,0,CV_L1,NULL);

displayMat(&dst);std::cout<<"---------"<<std::endl;

std::cout<<"a=5,b=0:
";cvNormalize(&src,&dst,5,0,CV_L2,NULL);

displayMat(&dst);std::cout<<"---------"<<std::endl;

std::cout<<"a=5,b=0:
";cvNormalize(&src,&dst,5,0,CV_MINMAX,NULL);

displayMat(&dst);std::cout<<"---------"<<std::endl;

return
0;

}

当cvMat={1,4,5,6,7,10}, a=5,b=0的时候,输出结果如下:

a=5,b=0:
CV_C: 0.1, 0.4, 0.5, 0.6, 0.7, 1,

---------

a=5,b=0:
CV_L1: 0.030303, 0.121212, 0.151515, 0.181818, 0.212121, 0.30303,

---------

a=5,b=0:
CV_L2: 0.0663723, 0.265489, 0.331862, 0.398234, 0.464606, 0.663723,

---------

a=5,b=0:
CV_MINMAX: 0, 1.66667, 2.22222, 2.77778, 3.33333, 5,

---------

L1_norm:
每個元素乘上1/sqrt(1+4+5+6+7+10)

L2_norm:
每個元素乘上1/sqrt(1+16+25+36+49+100)

CV_MINMAX:使每個元素限制在[a=5,b=0]之間算法如下:dst(i)=(src(i)-min(src))*(5-0)/(max(src)-min(src))

1-->0

4-->3*5/9=1.6666

5-->4*5/9=2.2222

opencv中关于cvNorm函数的使用

Norm

计算数组的绝对范数, 绝对差分范数或者相对差分范数

double
cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_type=CV_L2, const
CvArr* mask=NULL );

opencv中关于cvNorm函数的使用(续)

参数:

arr1             第一输入图像

arr2             第二输入图像 ,如果为空(NULL),
计算 arr1 的绝对范数,否则计算 arr1-arr2 的绝对范数或者相对范数。

normType  范数类型,参见“讨论”。

mask          可选操作掩模。

如果 arr2 为空(NULL),函数
cvNorm 计算 arr1 的绝对范数:

norm
= ||arr1||C = maxI abs(arr1(I)), 如果 normType = CV_C

norm
= ||arr1||L1 = sumI abs(arr1(I)), 如果 normType = CV_L1

norm
= ||arr1||L2 = sqrt( sumI arr1(I)2), 如果 normType = CV_L2

如果 arr2 不为空(NULL), 该函数计算绝对差分范数或者相对差分范数:

norm
= ||arr1-arr2||C = maxI abs(arr1(I)-arr2(I)), 如果 normType = CV_C

norm
= ||arr1-arr2||L1 = sumI abs(arr1(I)-arr2(I)), 如果 normType = CV_L1

norm
= ||arr1-arr2||L2 = sqrt( sumI (arr1(I)-arr2(I))2 ), 如果 normType = CV_L2

或者

norm
= ||arr1-arr2||C/||arr2||C, 如果 normType = CV_RELATIVE_C

norm
= ||arr1-arr2||L1/||arr2||L1, 如果 normType = CV_RELATIVE_L1

norm
= ||arr1-arr2||L2/||arr2||L2, 如果 normType = CV_RELATIVE_L2

函数 Norm 返回计算所得的范数。多通道数组被视为单通道处理,因此,所有通道的结果是结合在一起的。

时间: 2024-08-06 20:05:44

归一化的相关文章

python基础--接口与归一化设计、封装、异常、网络编程

1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合 继承的两种用途 一:继承基类的方法,并且做出自己改变或者扩展(代码重用):实践中,继承的这种用途意义并不很大,甚至常常是有害的.因为它使得子类与基类出现强耦合. 二:声明某个子类兼容于某基类,定义一个接口类(模仿java的Interface),接口类中

MATLAB(5)——生成归一化直方图

作者:桂. 时间:2017-03-10  22:13:36 链接:http://www.cnblogs.com/xingshansi/p/6533579.html 声明:欢迎转载,不过记得注明出处哦~ 前言 本文作为:曲线拟合与分布拟合 一文的补充内容,主要介绍MATLAB直方图的绘制,以及对应归一化直方图的实现.全文分三部分简单介绍: 1)直方图(hist)绘制: 2)栅栏图(bar)绘制: 3)归一化直方图实现. 一.直方图(hist) 可以对hist的直方图进行限定,两种途径:个数模式(n

什么情况需要数据归一化处理?

当GDP变动百分之几的时候,可能往往数量是多少百万元,多少千万元,甚至多少亿元作为单位的量纲,但如果我们考察的是区域内的企业个数与GDP的关系时(比如做灰色关联度分析),就会出现变化相同的百分比,在绝对值上相差太多,一个的量纲是亿,而另一个的量纲却是个(毕竟区域内的企业一般也就几百到几千个),所以为了分析统计的方便,要进行归一化处理,把它们处理在(0,1)之间. 参考: http://bbs.pinggu.org/thread-708553-1-1.html

数据归一化的两种常用方法

数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性.原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价.以下是两种常用的归一化方法: 一.min-max标准化(Min-Max Normalization) 也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间.转换函数如下: 其中max为样本数据的最大

标准化与归一化

标准化(Standardization) 是按某个维度进行标准化,例如有下面的矩阵 >>> X = np.array([[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]]) 正态分布标准化后的结果就是 array([[ 0. ..., -1.22..., 1.33...], [ 1.22..., 0. ..., -0.26...], [-1.22..., 1.22..., -1.06...]]) 归一化(Normalization

数据归一化

数据归一化 数据的标准化是将数据按比例缩放,使之落入一个小的特定区间,一般为0到1之间.在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权. 常见的数据归一化的方法有: 1.min-max标准化(离差标准化) 是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下: 其中max为样本数据的最大值,min为样本数据的最小值.这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义. 2.

正则化和归一化

http://blog.sina.com.cn/s/blog_4a1853330102w2en.html http://blog.csdn.net/oppoa113/article/details/22102103 正则化,归一化(标准化和正规化):对数据进行预处理的两种方式,目的是让数据更便于计算和获得更加泛化的结果,但并不改变问题的本质. 正则化:要求一个逻辑回归问题,假设一个函数,覆盖所有可能:y=wx,其中w为参数向量,x为已知样本的向量,用yi表示第i个样本的真实值,用f(xi)表示样

C语言 &#183; 复数归一化

算法提高 复数归一化 时间限制:1.0s   内存限制:512.0MB 编写函数Normalize,将复数归一化,即若复数为a+bi,归一化结果为a/sqrt(a*a+b*b) + i*b/sqrt(a*a+b*b) .使用结构体指针类型作为函数参数可能是必要的.其中实部和虚部由键盘输入,输出为归一化结果,如果归一化结果的实部或虚部为小数的要求保留一位小数. 样例输入:(格式说明:3 4 分别为以空格隔开的实数的实部和虚部) 3 4 样例输出:0.6+0.8i 样例输入: 2 5样例输出:0.4

【CV知识学习】神经网络梯度与归一化问题总结+highway network、ResNet的思考

这是一篇水货写的笔记,希望路过的大牛可以指出其中的错误,带蒟蒻飞啊~ 一.    梯度消失/梯度爆炸的问题 首先来说说梯度消失问题产生的原因吧,虽然是已经被各大牛说烂的东西.不如先看一个简单的网络结构, 可以看到,如果输出层的值仅是输入层的值与权值矩阵W的线性组合,那么最终网络最终的输出会变成输入数据的线性组合.这样很明显没有办法模拟出非线性的情况.记得神经网络是可以拟合任意函数的.好了,既然需要非线性函数,那干脆加上非线性变换就好了.一般会使用sigmoid函数,得到,这个函数会把数据压缩到开

自组织竞争神经网络(SOM)之向量归一化

http://wenku.baidu.com/link?url=DWqrVJ4Ph6NjU3fukUdZl-uE0zlME8V6cprB4SuzcL2q5kOUh-3wQ_Qd1FuEV18Ww1HZQ_VwgzSyOaprPCX_AQwxkC3p8I0t0CL7QUuMaW 基础部分直接上链接,过程很详细.依照步骤详解敲代码的时候对“向量归一化”该出现的位置有了疑惑. 首先可以肯定的是,输入向量全部需要归一化,可以在输入前整体归一化处理,也可以在与网络权值比较的前一刻进行归一化处理.那么神经网