【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
来源:互联网 发布:mac地址ip地质作用 编辑:程序博客网 时间:2024/06/06 08:33
【编程开发】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);
当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
- 【pandas】对矩阵的某一行、某一列进行求和
- 对ArrayList中某一元素进行排序
- 对ArrayList中的元素按照某一列进行排序
- 对ArrayList中的元素按照某一列进行排序
- Python numpy 提取矩阵的某一行或某一列
- selenium用java找到表格某一行某一列中含有特定文字的某个元素
- 使用qsort对二维数组李的某一列元素进行排序
- datatable对某一列的值进行模糊或非模糊搜索
- C#中对ListView某一列进行刷新
- DataGridView中某一行的某一列及当前行的选取方法(C#实现)
- 读取datagrid中某一行某一列的值
- 对表的某一列进行操作的SQL命令
- 如何对excel某一列的数据进行分列
- awk_对某一列进行去重
- 获取某一表格的某一行某一列的值
- web开发中如何对json对象的某一属性对其进行排序
- Oracle如何实现对某一列的自动加一
- hdoj2053(switch game
- Intent 传数据
- POJ 3009 dfs暴搜
- 外键约束和级联操作
- Java学习笔记(1):重载方法
- 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
- READING NOTE: Two-Stream Convolutional Networks for Action Recognition in Videos
- 用于Android ART虚拟机JNI调用的NativeBridge介绍
- 配置ADT
- C中堆和栈的区别
- 最长递增子序列详解(longest increasing subsequence)
- BLOck基本理解
- 代理和协议
- This Android SDK requires Android Developer Toolkit version 23.0.0 or above