opencv--normalize函数详解

函数解析

normalize函数的作用使输入数组的范数或者数值范围归一到一定范围内。函数原型如下:

void normalize(InputArray src,OutputArray dst, double alpha = 1, double beta = 0, intnorm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());
src:输入图像/数组
dst:输出图像/数组
alpha:范围的最小值
beta:范围的最大值(不用于范数归一化)
intnorm_type:归一操作的类型,有如下三种:
			NORM_MINMAX:将数组的数值归一化到[alpha,beta]内,常用。
			NORM_L1:归一化数组的L1-范数(绝对值的和)
			NORM_L2:归一化数组的(欧几里德)L2-范数
dtype:为负数时,输出数组的类型与输入数组相同,否则只是通道数相同,类型默认为:type = CV_MAT_DEPTH
mask:指定操作的区域/空间,不懂得可以看看这篇博文:[图像位操作](https://blog.csdn.net/m0_60447786/article/details/125650689?spm=1001.2014.3001.5501)

归一化作用

归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快

归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。

此外,归一化还有其他作用:
1.无量纲化
例如房子数量和收入,从业务层知道这两者的重要性一样,所以把它们全部归一化,这是从业务层面上作的处理。

2.避免数值问题
不同的数据在不同列数据的数量级相差过大的话,计算起来大数的变化会掩盖掉小数的变化。

3.一些模型求解的需要
例如梯度下降法,如果不归一化,当学习率较大时,求解过程会呈之字形下降。学习率较小,则会产生直角形路线,不管怎么样,都不会是好路线。

4.时间序列
进行log分析时,会将原本绝对化的时间序列归一化到某个基准时刻,形成相对时间序列,方便排查。

5.收敛速度
加快求解过程中参数的收敛速度。

归一化目的

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

归一化原理

//当intnorm_type = NORM_MINMA时:
if mask(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(alpha,beta ) , a' = MIN(alpha,beta );
//当intnorm_type !=NORM_MINMAX时:
if mask(i,j) != 0
    dst(i,j) = src(i,j) *alpha / norm (src,norm_type,mask)
else
    dst(i,j) = src(i,j)
函数norm的功能是计算norm(范数)的绝对值

实例

opencv--normalize函数详解_第1张图片
SERENDIPITY
SERENDIPITY
SERENDIPITY
SERENDIPITY

你可能感兴趣的:(opencv,计算机视觉,c++)