【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization

标签: 【编程开发】 【机器学习】


声明:引用请注明出处http://blog.csdn.net/lg1259156776/


说明:在机器学习中,最常见的处理就是对输入的特征向量进行normalization,在opencv中就实现了normalize函数进行各种normalization,本文结合我的实际应用来进行说明。


代码实现

首先参看代码:

/*normalized*/
Mat dataCol;
for (int j=0; j<len; j++)
{
dataCol = FeatureValue.colRange(j,j+1).clone();
normalize(dataCol,dataCol);
for (int i=0; i<Num; i++)
{
FeatureValue.at<float>(i,j) = dataCol.at<float>(i,0);//log(abs(dataCol.at<float>(i,0)));
}
}

上面的一段代码实现的是对Mat中某一列元素进行normalization,实现的是L2范数的normalization。

Mat取行或列

首先opencv Mat中如何取出某一行或某几行,某一列或某几列呢?

Mat dataCol;
dataCol = FeatureValue.colRange(j,j+1).clone();

直接使用Mat类中成员函数,方法,colRange对应的是列,rowRange对应的是行,从第j列(下标从0开始)到第j列,也就是说只取出第j列而已。后面的clone表示深拷贝,不使用clone表示浅拷贝。

深拷贝与浅拷贝

浅拷贝的说明如下:

Mat B;
B = image // 第一种方式
Mat C(image); // 第二种方式

这两种方式称为浅copy,是由于它们有不同的矩阵头,但是它们共享内存空间,即指向一个矩阵。当图像矩阵发生变化时,两者相关联,都会变化。

深拷贝的说明如下:

Mat B,C;
B = image.clone(); // 第一种方式
image.copyTo(C); // 第二种方式

深拷贝是真正的copy了一个新的图像矩阵,此时image,B,C三者相互没有影响。

normalize函数说明

函数原型:

void normalize(InputArray src,OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )

该函数归一化输入数组使它的范数或者数值范围在一定的范围内。

Parameters的说明如下:

  • src:输入数组
  • dst:输出数组,支持原地运算inplace操作
  • alpha:range normalization模式的最小值
  • beta:range normalization模式的最大值,不用于norm normalization(范数归一化)模式。
  • normType:归一化的类型,可以有以下的取值:
NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。
NORM_INF: 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)
NORM_L1 : 归一化数组的L1-范数(绝对值的和)
NORM_L2: 归一化数组的(欧几里德)L2-范数

可能最常见的要数NORM_L2和NORM_MINMAX。

  • dtype:dtype为负数时,输出数组的type与输入数组的type相同;否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).
  • mask:操作掩膜,用于指示函数是否仅仅对指定的元素进行操作。

1、线性函数转换,表达式如下:(对应NORM_MINMAX)

ifmask(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(a,b), a‘=MIN(a,b);

  1. 当norm_type!=CV_MINMAX:

    ifmask(i,j)!=0

    dst(i,j)=src(i,j)*a/norm (src,norm_type,mask)

    else

    dst(i,j)=src(i,j)

其中,函数norm的功能是计算norm(范数)的绝对值

Thefunctions norm calculate an absolute norm of src1 (when there is no src2 ):


2015-11-06 调试记录 张朋艺

【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization的更多相关文章

  1. 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系

    [编程开发] C与C++中的关于函数指针的强制类型转换与指针函数的关系 标签: [编程开发] [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 以 ...

  2. 【OpenCV】访问Mat中的每个像素值

    其中注意i,j的位置,写错了好几次.第二个for循环中的if语句用异或来判断图像中哪些像素点发生了改变.

  3. 利用SMB jcifs实现对windows中的共享文件夹的操作

    需求是在本地上传文件到服务器上,服务器是windows的,使用共享文件夹提供权限给你的. 利用第三方: CIFS (Common Internet File System) SMB(Server Me ...

  4. ddr3调试经验分享(一)——modelsim实现对vivado中的MIG ddr3的仿真

    Vivado中的MIG已经集成了modelsim仿真环境,是不是所有IP 都有这个福利呢,不知道哦,没空去验证. 第一步:使用vivado中的MIG IP生成一堆东西 ,这个过程自己百度.或者是ug5 ...

  5. 基于TerraExplorer Pro 6.1 实现对Shape中Feature对象拾取查询

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Python利用Plotly实现对MySQL中的数据可视化

    Mysql表数据: demo.sql内容 create table demo( id int ,product varchar(50) ,price decimal(18,2) ,quantity i ...

  7. 【aardio】如何对listview中某一列,某一行的特定值进行修改?

    用表格创建数组来实现. import win.ui; /*DSG{{*/ var winform = ..win.form( bottom=399;parent=...;right=599;text= ...

  8. 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验

    在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...

  9. opencv-访问Mat中每个像素的值

    参考:[OpenCV]访问Mat中每个像素的值(新)   膜拜大佬 以下例子代码均针对8位单通道灰度图. 1 .ptr和[]操作符 Mat最直接的访问方法是通过.ptr<>函数得到一行的指 ...

随机推荐

  1. Java中的Listener 监听器

    Listener的定义与作用 监听器Listener就是在application,session,request三个对象创建.销毁或者往其中添加修改删除属性时自动执行代码的功能组件. Listener ...

  2. groovy http

    import groovy.json.JsonOutput void api(){ def data = [jobId : "11111111111111", data : 5,s ...

  3. BZOJ 3931 / Luogu P3171 [CQOI2015]网络吞吐量 (最大流板题)

    题面 中文题目,不解释: BZOJ传送门 Luogu传送门 分析 这题建图是显然的,拆点后iii和i′i'i′连容量为吞吐量的边,根据题目要求,111和nnn的吞吐量看作∞\infty∞. 然后用di ...

  4. ITextSharp开源PDF处理库

    1:官方完整开源项目 http://sourceforge.net/projects/itextsharp/ 2:使用NUGET :> install-package itextsharp

  5. 题解 [APIO2014]连珠线

    题解 [APIO2014]连珠线 题面 解析 首先这连成的是一棵树啊. 并且\(yy\)一下,如果钦定一个根, 那么这上面的蓝线都是爸爸->儿子->孙子这样的,因为像下图这样的构造不出来: ...

  6. Python--编码的疑惑

    XML语法分析器在处理的时候,使用的是Unicode字符串,并且将其返回.Unicode可以处理特殊字符,但是如果将Unicode字符串转换为普通字符串,就会引发异常,比如Print, >> ...

  7. 2019牛客暑期多校训练营(第六场)E 构造、原图是补图的同构图

    https://ac.nowcoder.com/acm/contest/886#question 题意  问是否存在某个n个点的无向图G是其补图H的同构图,若存在输出G的邻接矩阵以及H关于G的映射. ...

  8. LOJ166 拉格朗日插值 2【卷积,NTT】

    题目链接:LOJ 题目描述:输入多项式的次数$n$,一个整数$m$和$f(0),f(1),f(2),\ldots,f(n)$,输出$f(m),f(m+1),f(m+2),\ldots,f(m+n)$ ...

  9. spring事物不回滚的问题

    学习spring分布式事务的时候,自己整了个demo,写test测试的时候发先事物没有回滚.此问题和分布式事务没关系.1.在service层引入@Transaction注解 使用 throw new ...

  10. java 架构师思维导图

    java 基础 . 理解IO.多线程.集合等基础框架.对JVM原理有一定了解. spring  spring boot  ibatis   structs开源框架了解. 熟悉分布式系统设计和应用. 小 ...