一、什么是归一化

  归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在一定范围的之内。为了后面数据处理的方便,其次是保证程序运行时收敛加快。
  归一化的目的,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。

二、归一化的方式

2.1 基本API

1
2
3
4
5
6
7
8
9
void normalize(
InputArray src,
InputOutputArray dst,
double alpha = 1,
double beta = 0,
int norm_type = NORM_L2,
int dtype = -1,
InputArray mask = noArray()
);
参数 作用
src 输入数组
dst 输出数组
alpha 归一化最小值
beta 归一化最大值
norm_type 归一化的类型
dtype 负数时输出数组的type与输入数组的type相同
mask 指示函数是否仅仅对指定的元素进行操作

其中norm_type有以下几种类型:

  • NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。
  • NORM_INF:此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)
  • NORM_L1 : 归一化数组的L1-范数(绝对值的和)
  • NORM_L2: 归一化数组的(欧几里德)L2-范数

2.2 示例程序

1
2
3
4
5
6
7
8
9
void MyDemo::normalize_Demo(Mat& image) {
Mat dst;
std::cout << image.type() << std::endl; //CV_8UC3
image.convertTo(image, CV_32F); //像素数据转换为浮点数数据
std::cout << image.type() << std::endl; //CV_32FC3
normalize(image, dst, 0, 1.0, NORM_MINMAX); //归一化
std::cout << dst.type() << std::endl;
imshow("Normalize", dst);
}