归一化函数naomalize详解

来源:互联网 发布:java 线程池返回值 编辑:程序博客网 时间:2024/06/06 16:30

opencv 2 归一化函数normalize详解

1. 归一化定义与作用

    归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。

    归一化的目的简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。

2. normalize 函数介绍

函数原型:

void normalize(const InputArray src, OutputArray dst, double alpha=1, double beta=0,     int normType=NORM_L2, int rtype=-1, InputArray mask=noArray())

    该函数归一化输入数组使它的范数或者数值范围在一定的范围内。当用于归一化时,normType应该为cv::NORM_MINMAX,alpha为归一化后的最大值,beta为归一化后的最小值。

    normalize的原矩阵必须是单通道(src.channel==1),函数执行完,结果矩阵的大小和类型与原矩阵相同。无论之前是否初始化结果矩阵,最后的结果都与原矩阵类型相同。

Parameters:

src

    输入数组

dst

    输出数组,支持原地运算

alpha

    range normalization模式的最d值

beta

    range normalization模式的最大值,不用于norm normalization(范数归一化)模式。

normType

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

    NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。

    NORM_INF: 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)

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

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

dtype

    dtype为负数时,输出数组的type与输入数组的type相同;

否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).

mask

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

3.归一化公式:

1、线性函数转换,表达式如下:(对应NORM_MINMAX)ifmask(i,j)!=0    dst(i,j)=(src(i,j)-min(src))*(b‘-a‘)/(max(src)-min(src))+ a‘else     dst(i,j)=src(i,j)    其中b‘=MAX(a,b), a‘=MIN(a,b);2. 当norm_type!=CV_MINMAX:ifmask(i,j)!=0    dst(i,j)=src(i,j)*a/norm (src,norm_type,mask)else    dst(i,j)=src(i,j)    其中,函数norm的功能是计算norm(范数)的绝对值Thefunctions norm calculate an absolute norm of src1 (when there is no src2 ):技术分享



4.小例子:

cv::Mat mat1=Mat(2,2,CV_32FC1);mat1.at<float>(0,0) = 1.0f;mat1.at<float>(0,1) = 2.0f;mat1.at<float>(1,0) = 3.0f;mat1.at<float>(1,1) = 4.0f;// 对于这种小矩阵,还有更简单的赋值方式,找时间再改cout<<"Mat 1:"<<endl;cout<<mat1<<endl;normalize(mat1,mat1,1.0,0.0,NORM_MINMAX);cout<<"Mat 2:"<<endl;cout<<mat1<<endl;
 程序截图:
归一化函数normalize详解


0 0
原创粉丝点击