OpenCV中的normalize函数以及NORM_MINMAX、NORM_INF、NORM_L1、NORM_L2具体应用介绍

在OpenCV中,normalize函数用于将图像或矩阵的值规范化到一个特定的范围内。这在图像处理中非常有用,比如在调整图像的对比度、准备数据进行机器学习处理时。规范化可以提高不同图像之间的可比性,或是为了满足特定算法对数据范围的要求。

normalize

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:输出数组,存储规范化后的结果。dst可以和src是同一个数组。
  • alpha:规范化到范围的下限(当norm_type=NORM_MINMAX时)。
  • beta:规范化到范围的上限(当norm_type=NORM_MINMAX时)。
  • norm_type:规范化的类型。最常用的是NORM_MINMAX,用于将数据线性变换到alpha,betaalpha,beta区间。其他选项包括NORM_L1、NORM_L2等,用于不同的数学规范化操作。
  • dtype:输出数组的深度。当值为-1时,输出数组和输入数组的深度相同。可以指定为CV_32F等,以改变输出数据的类型。
  • mask:可选的操作掩码,用于指定要规范化哪些数组元素。

norm_type

norm_type=NORM_MINMAX

最常用的规范化类型,它将输入数组的所有元素线性缩放到一个指定的范围内(通常是[alpha, beta])。对于数组中的每个元素x,转换后的值x’计算如下:
在这里插入图片描述其中minValmaxVal分别是数组中的最小值和最大值。
应用场景:图像处理、数据预处理。
用途:将数据规范化到一个特定的范围内,常用于调整图像亮度和对比度,或在输入机器学习模型前将特征缩放到同一范围。这有助于提高算法的收敛速度和精度。
优势:简单直观,易于实现,可以使数据分布更均匀。

norm_type=NORM_INF

此规范化类型将数组的所有元素缩放,使得结果数组的最大绝对值等于alpha。具体算法是将每个元素x除以数组的最大绝对值maxVal,然后乘以alpha:
在这里插入图片描述
应用场景:优化问题、数值计算。
用途:限制数组或向量的无穷范数(即最大绝对值)。在某些优化问题中,可能需要将解的范围限制在一定界限内,使用NORM_INF规范化可以达到这一目的。
优势:保证了数据中没有极端的大值,有利于数值稳定性

norm_type=NORM_L1

NORM_L1规范化使得结果数组的L1范数(即数组元素绝对值之和)等于alpha。每个元素x的计算公式为:
在这里插入图片描述 应用场景:稀疏编码、特征选择、压缩感知。
用途:L1规范化倾向于产生稀疏的解,即大部分元素为零,少数元素非零。这在特征选择中特别有用,可以自动地忽略不重要的特征。
优势:促进稀疏性,有助于提高模型的可解释性,减少模型复杂度。

norm_type=NORM_L2

NORM_L2规范化使得结果数组的L2范数(即数组元素的平方和的平方根)等于alpha。每个元素x的计算公式为:
在这里插入图片描述
应用场景:机器学习、信号处理、图像去噪。
用途:L2规范化倾向于使得所有元素的大小都差不多,这在避免过拟合(如机器学习中的权重衰减)、信号去噪(通过最小化能量)等场景中非常有用。
优势:防止数据中的个别点对总体结果产生过大影响,提高模型的泛化能力。

norm_type总结

  • NORM_MINMAX适用于需要将数据规范化到相同尺度的场景。
  • NORM_INF适用于需要控制数据的最大值不超过特定阈值的场景。
  • NORM_L1适用于需要稀疏解的场景,如特征选择或构建稀疏模型。
  • NORM_L2适用于需要平滑解、防止过拟合的场景,如机器学习中的正则化处理。

举例(norm_type=NORM_MINMAX)

//图像像素归一化
void QuickDemo::normalize_pixel_demo(Mat &image){
   
	Mat dst;
	image.convertTo(image, CV_32F);//把无符号整型转换为浮点型
	std::cout << "image raw type:"<<image.type() << std::endl;//16---代表CV_8UC3
	std::cout << "image convertTo CV_32F type:" << image.type() << std::endl;//21---CV_32FC3
	normalize(image, dst,2.0,0,NORM_MINMAX );
	std::cout << "CV_32F image NORM_MINMAX type:" << dst.type() << std::endl;//21---CV_32FC3
	imshow("NORM_MINMAX image", dst);
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述

相关推荐

  1. R语言Scale函数normalize.quantiles()函数异同

    2024-02-22 09:32:03       45 阅读
  2. 全角半角以及Normalizer

    2024-02-22 09:32:03       27 阅读
  3. pyspark学习-spark.sql.functions normal函数

    2024-02-22 09:32:03       44 阅读
  4. ArcGIS要点和难点以及具体应用和优缺点介绍

    2024-02-22 09:32:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 09:32:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 09:32:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 09:32:03       82 阅读
  4. Python语言-面向对象

    2024-02-22 09:32:03       91 阅读

热门阅读

  1. 开源模型应用落地-业务优化篇(六)

    2024-02-22 09:32:03       56 阅读
  2. 怎么卸载Nvidia显卡驱动

    2024-02-22 09:32:03       77 阅读
  3. Qt day2

    Qt day2

    2024-02-22 09:32:03      47 阅读
  4. 自定义postcss插件,根据倍率增大font-size大小

    2024-02-22 09:32:03       41 阅读
  5. 子网络划分与互通,上网行为审计

    2024-02-22 09:32:03       58 阅读
  6. MyBatis框架-EhCache(三级缓存)

    2024-02-22 09:32:03       57 阅读
  7. springboot实现Aop(通知)切面编程的案例

    2024-02-22 09:32:03       52 阅读
  8. 微信小程序canvas开发的一些坑和总结-持续更新

    2024-02-22 09:32:03       52 阅读