OpenCV的函数normalize()的两个作用:调整矩阵的值范围(归一化处理)、规范化矩阵的范数为某个值

这篇具有很好参考价值的文章主要介绍了OpenCV的函数normalize()的两个作用:调整矩阵的值范围(归一化处理)、规范化矩阵的范数为某个值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV的函数normalize()的两个作用:调整矩阵的值范围(归一化处理)、规范化矩阵的范数为某个值

函数normalize()有两个原型:
原型一:

void cv::normalize(InputArray 	src,
                   InputOutputArray dst,
                   double 	alpha = 1,
                   double 	beta = 0,
                   int 	norm_type = NORM_L2,
                   int 	dtype = -1,
                   InputArray 	mask = noArray() )	
dst=cv.normalize(src, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]])

原型二:

void cv::normalize(const SparseMat & 	src,
                   SparseMat & 	dst,
                   double 	alpha,
                   int 	normType )	
dst=cv.normalize(src, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]])

原型一的适用对象是密集矩阵,通常我们的矩阵都是密集矩阵。
原型二的适用对象是稀疏矩阵,在这篇博文中暂不作介绍。

在介绍各参数的意义前,先说下函数normalize()的作用。

函数normalize()有两个作用:
第一个作用:规范化矩阵的范数为某个值;
第二个作用:规范化矩阵的值范围,即我们常说的对矩阵进行归一化处理。

究竟函数normalize()发挥什么作用,这取决于参数norm_type取什么值。

当它起第一个作用时,即用于规范化矩阵的范数为某个值时,它通过线性缩放和平移操作实现如下目标:
normalize函数,图像处理原理、工具、代码,矩阵规范化,归一化
当p=Inf时,对应的参数normType取值为NORM_INF;
当p=1时,对应的参数normType取值为NORM_L1;
当p=2时,对应的参数normType取值为NORM_L2;
关于参数normType取值为NORM_INF、NORM_L1、NORM_L2时,函数究竟对原矩阵作了怎样的操作?
请参看本博文的原文,本博文的原文链接
https://www.hhai.cc/thread-214-1-1.html

当它起第二个作用时,即对矩阵进行归一化处理时,它通过线性缩放和平移操作实现如下目标:
normalize函数,图像处理原理、工具、代码,矩阵规范化,归一化
即此时函数normalize()会把原矩阵中的值范围从[min(src), max(src)]按比例线性变换到[alpha, beta]的范围。

根据上面的这个目标,可知实现的具体数学表达式如下:
normalize函数,图像处理原理、工具、代码,矩阵规范化,归一化
根据上式,可以得到dst(i,j)的表达式,如下:
normalize函数,图像处理原理、工具、代码,矩阵规范化,归一化
有了上面的准备知识后,接下来,开始介绍其原型一各参数的意义,这里再把原型一复制如下:

void cv::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—在第一个作用中,它表示目标范数值(Norm Value);在第二个作用中,函数normalize()会把原矩阵中的值范围从[min(src), max(src)]按比例线性变换到[alpha, beta]的范围。
beta—在第一个作用中,此参数没有作用,是一个无效参数。在第二个作用的情况中,函数normalize()会把原矩阵中的值范围从[min(src), max(src)]按比例线性变换到[alpha, beta]的范围。
norm_type—这个参数决定了函数normalize()对输入矩阵作哪种规范化操作。其可取值如下表所示:
normalize函数,图像处理原理、工具、代码,矩阵规范化,归一化
我们常常用这个函数对矩阵进行归一化处理,即上面说的第二个作用,此时norm_type取NORM_MINMAX。
当norm_type取NORM_MINMAX时,需要注意两点:
①当norm_type=NORM_MINMAX时,矩阵src只能为密集矩阵。
②当有掩码矩阵参数时,它是在掩码矩阵所选取的子矩阵上进行操作,包括最大值,最小值的选取也是在子矩阵的范围内,而不是整个原矩阵的范围内进行最大值最小值的选取。

在上面的norm_type取值表中,NORM_INF、NORM_L1、NORM_L2、NORM_L2SQR 情况下都存在src2的情况,可是函数normalize()并没有两个输入参数啊,这是怎么回事呢?
是因为并不是只有函数normalize()取这些枚举值,其它函数也会取这些枚举值,比如norm()的参数也需要取这些枚举值。norm()的OpenCV4.4.0官方文档链接:https://docs.opencv.org/4.4.0/d2/de8/group__core__array.html#ga55a581f0accd8d990af775d378e7e46c

dtype—输出矩阵的数据类型,当它为负值时,和输入矩阵的数据类型一样。否则,按它指定的数据类型生成输出矩阵。
mask—操作掩码矩阵。如果操作掩码矩阵存在,则掩码值为0的矩阵元素不参与运算,掩码值为1矩阵元素参与运算。

接下来上示例代码:

首先是利用函数normalize()将原矩阵的范数规范化为某个值的Python代码:

# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术

# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询

# OpenCV的版本为4.4.0

import cv2 as cv
import numpy as np

A = np.array([[1, 2, 4],
              [8, 16, 32]], dtype='int8')

B1 = A.copy()
B2 = A.copy()
B3 = A.copy()

alpha1 = 100

# 将矩阵A的所有元素的最大绝对值调整为参数alpha1的值
cv.normalize(A, B1, alpha1,  norm_type=cv.NORM_INF)

# 将矩阵A的所有元素的绝对值之和调整为参数alpha1的值
cv.normalize(A, B2, alpha1,  norm_type=cv.NORM_L1)

# 将矩阵A的所有元素绝对值的平方和进行开方后的值调整为参数alpha1的值 
cv.normalize(A, B3, alpha1,  norm_type=cv.NORM_L2)

运行结果如下:
normalize函数,图像处理原理、工具、代码,矩阵规范化,归一化
对上面运行结果的说明和验证,
请参看本博文的原文,
本博文的原文链接如下:

https://www.hhai.cc/thread-214-1-1.html

然后是利用函数normalize()将原矩阵的值归一化到某个区间的Python代码:

# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术

# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询

# OpenCV的版本为4.4.0

import cv2 as cv
import numpy as np

# 注意矩阵A的数据类型设置为uint8
# 昊虹君测试过如果设置为int8,得不到想要的结果
A = np.array([[1, 2, 4],
              [8, 16, 32]], dtype='uint8')

B1 = A.copy()

alpha1 = 100
beta1 = 200

# 将矩阵A的元素值范围调整到区间[alpha1  beta1]
cv.normalize(A, B1, alpha1, beta1,  norm_type=cv.NORM_MINMAX)

运行结果如下:
normalize函数,图像处理原理、工具、代码,矩阵规范化,归一化文章来源地址https://www.toymoban.com/news/detail-734933.html

到了这里,关于OpenCV的函数normalize()的两个作用:调整矩阵的值范围(归一化处理)、规范化矩阵的范数为某个值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • matlab中如何求解两个范围的交集区间范围

    问题 :如何求解两个范围的交集范围 案例 :a的范围是(-4,2),b的范围是(-1,5),a∩b的范围是(-1,2)。 数学解答: matlab代码: 结果: 升级应用 :一组矩阵数据如何设定在一个范围内 案例 :将矩阵a=[1,2,3,4,5,6,7,8,9]设定在[3,6]的范围内。 matlab代码: 结果: 需要注意

    2024年02月14日
    浏览(23)
  • new THREE.Vector3(1, 1, 1).normalize();mesh.translateOnAxis(axis, 100);两个方法介绍,

    `new THREE.Vector3(1, 1, 1).normalize()` 是一个使用Three.js库中`Vector3`对象的方法,用于将一个三维向量归一化(normalize)。具体说明如下: 在Three.js中,`Vector3`是一个表示三维向量的对象。使用`new THREE.Vector3(x, y, z)`构造一个新的向量对象,其中`x`、`y`、`z`分别表示向量在X轴、Y轴和

    2024年02月12日
    浏览(37)
  • OpenCV中reshape()函数详解-改变矩阵的通道数,对矩阵元素进行序列化

    OpenCV中reshape()函数详解-改变矩阵的通道数,对矩阵元素进行序列化 在opencv中reshape函数,既可以改变矩阵的通道数,又可以对矩阵元素进行序列化 1、函数原型 2、示例 初始化一个矩阵,20行30列1通道 3、结论: 由此可见,不管怎么变,都遵循这样一个等式: 变化之前的 row

    2024年01月17日
    浏览(26)
  • [开发|java] java 比较两个对象的指定属性的值是否相等

    Java中比较两个对象的指定属性的值是否相等,可以使用Apache Commons Lang库中的EqualsBuilder类。EqualsBuilder提供了一种便捷的方法来比较两个对象的属性值是否相等,具体步骤如下: 通过构造器创建一个EqualsBuilder对象。 调用EqualsBuilder对象的append方法,传入需要比较的两个对象以

    2024年02月16日
    浏览(36)
  • torch.normal()函数

    torch.normal()函数:返回一个张量;是从一个给定mean(均值),std(方差)的正态分布中抽取随机数。mean和std都是属于张量类型的; 参数: mean:均值; std:标准差; out:输出张量; size:张量的大小; 源码参数:

    2024年02月16日
    浏览(38)
  • Linux学习之变量引用和作用范围

    使用 ${变量名} 或者 $变量名 就可以引用变量, $变量名 其实是 ${变量名} 的省略写法。 要是变量名后边还有其他字符就需要加上 {} ,比如 helloToBash 这个变量的值是 Hello Bash ,而需要输出的字符串是“Hello Bashing”,这样就需要加上 {} ,演示如下: echo $helloToBashing 输出为空,

    2024年02月15日
    浏览(30)
  • 两个显示屏之间鼠标移动方向调整

    目录 1 多屏幕左右顺序调整  2 屏幕缩放比例调整 简单说明一下 鼠标右键桌面-显示设置 或者:系统-屏幕 就是鼠标左键按下、选中一个序号,拖动鼠标即可调整位置。  

    2024年02月11日
    浏览(36)
  • OpenCV各模块函数使用实例(11)--- 矩阵和数组操作(Operations on arrays)

    OpenCV各模块函数使用实例(11) M、 矩阵和数组操作( Operations on arrays ) 本节描述矩阵的基本操作,这些操作是图像处理和其他数组算法实现的基本操作,包括矩阵的运算,特征值和特征向量,范数和逆矩阵,高阶多项式的根等数学运算。矩阵运算包括点积,叉积,卷积,滤

    2024年02月03日
    浏览(27)
  • 图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作

    大家看这篇博文前可以先看一看下面这篇博文,下面这篇博文是这篇博文的基础: 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作 图像形态学腐蚀可以将细小的噪声区域去除,但是会将图像主要区域

    2024年02月06日
    浏览(42)
  • python正态分布中的normal函数

    python正态分布中的normal函数 概念 1、正态分布又名高斯分布,是人们最常用的描述连续型随机变量的概率分布。 在金融学研究中,收益率等变量的分布假定为正态分布或者对数正态分布(取对数后服从正态分布)。因为形状的原因,正态分布曲线也被经常称为钟形曲线。 正态分

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包