OpenCV中的cvNormalize函数原理

  • 参数介绍
void cvNormalize( const CvArr* src, CvArr* dst,
                  double a=1, double b=0, 
                  int norm_type=CV_L2,
                  const CvArr* mask=NULL );

src:输入的源数据(矩阵,图像)
dst:输出的数据(矩阵,图像)

下面参数是要介绍的重点

a:输出数组的最小/最大值或者输出数组的范数
b:输出数组的最大/最小值
norm_type:归一化的类型,可以有以下的取值:

CV_C - 归一化数组的C-范数(绝对值的最大值)
CV_L1 - 归一化数组的L1-范数(绝对值的和)
CV_L2 - 归一化数组的(欧几里德)L2-范数
CV_MINMAX - 数组的数值被平移或缩放到一个指定的范围

mask:遮罩

  • 结合例子来解释下上面重点提到的参数

加入输入矩阵cvMat={1,4,5,6,7,10}, a=5,b=0的时候,输出结果如下:

a=5, b=0: CV_C: { 0.1, 0.4, 0.5, 0.6, 0.7, 1 }

a=5,b=0: CV_L1: { 0.030303, 0.121212, 0.151515, 0.181818, 0.212121, 0.30303 }

a=5,b=0: CV_L2: { 0.0663723, 0.265489, 0.331862, 0.398234, 0.464606, 0.663723 }

a=5,b=0: CV_MINMAX: { 0, 1.66667, 2.22222, 2.77778, 3.33333, 5 }

上述实验对应的计算原理如下(sqrt是平方)

CV_L1: 每个元素乘上1/sqrt(1+4+5+6+7+10)

CV_L2: 每个元素乘上1/sqrt(1+16+25+36+49+100)

CV_MINMAX:使每个元素限制在[a=5,b=0]之间算法如下:

dst(i)=(src(i)-min(src))*(5-0)/(max(src)-min(src))
   1–>0
   4–>3*5/9=1.6666
   5–>4*5/9=2.2222
    ……

L1用的是绝对值即曼哈顿距离,L2用的是平方即欧几里得距离,MINMAX就是映射到a,b区间内。

最后补充下mask这个大部分都没怎么介绍,以图像为例,遮罩就是你要选择处理的区域,默认的NULL是处理图像的所有区域。

参考:http://blog.sina.com.cn/s/blog_7136a32f01010zgd.html
参考:http://www.opencv.org.cn/forum.php?mod=viewthread&tid=7577

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值