normalize函数「opencv normalize函数」
如何在power point做直方图
CV_EXPORTS void calcHist( const Mat* images,

int nimages,
const int* channels,
InputArray mask,
OutputArray hist,
int dims,
const int* histSize,
const float** ranges,
bool uniform=true,
bool accumulate=false );
参数1表示需要用来计算直方图的源图像序列,因此可以允许有多张大小一样,数据类型相同的图像被用来统计其直方图特征。
参数2表示的就是使用多少张图像序列中的图像用于计算直方图。
参数3的出现主要是考虑到输入的每一张图像有可能是多通道的,比如说RGB图就是3通道的,那么从统计意义上来讲,
一张RGB图其实就是3张单通道的图像,而计算直方图时其本质也是针对单张图像进行的。这里虽然我们输入的图像序列images中有很多图片,但是并不是
每一张图片的每一个通道都会被用来计算。所以参数3的功能是指定哪些通道的图像被用来计算(后面的解释都假设图像序列中图像是3通道的,那么有的图像可能
有多个通道都被用来计算,有的图像可能连一个通道都没有被采用),这时参数3里面保存的是通道的序号,那么图像序列images中的第一张图片的通道序号
(假设图像时3通道的)为0,1,2;images中第二张图片的图像序列接着上一次的,为3,4,5,;依次类推即可。
参数4是mask掩膜操作,即指定每张图片的哪些像素被用于计算直方图,这个掩膜矩阵不能够针对特定图像设定特定的掩膜,因此在这里是一视同仁对待的。
参数5是保存计算的直方图结果的矩阵,有可能是多维矩阵。
参数6是需要计算的直方图的维数。
参数7是所需计算直方图的每一维的大小,即每一维bin的个数。
参数8是所需计算直方图的每一维的范围,如果参数9的uniform为true,这此时的参数8的大小为2,里面的
元素值表示的是每一维的上下限这两个数字;如果参数9的uniform为false,则此时的参数8的大小为bin的个数,即参数7的值,参数8里面的元
素值需要人为的指定,即每一维的坐标值不一定是均匀的,需要人为指定。
参数9如果为true的话,则说明所需计算的直方图的每一维按照它的范围和尺寸大小均匀取值;如果为false的话,说明直方图的每一维不是均匀分布取值的,参考参数8的解释。
参数10如果为false,则表示直方图输出矩阵hist在使用该函数的时候被清0了,如果为true,则表示hist在使用calcHist()函数时没有被清0,计算的结果会累加到前一次保存的值中。
使用该函数的时候需要注意,如果在默认参数的情况下uniform = true,则此时的ranges大小必须是histSize大小的两倍,并且channels的大小必须等于dims维数。
从上面可以理解,channels里的值已经指定了使用哪些单通道的图像来计算目标直方图,因此一旦channels的尺寸确定,则对应的直方图的维数也就确定了,所以我们不能使用多张图像来计算一个一维的直方图。
以上内容来自:基础学习笔记之opencv(19):有关图像序列的直方图计算
[cpp] view plain copy print?
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include
using namespace std;
using namespace cv;
/** @函数 main */
int main( int argc, char** argv )
{
Mat src, dst;
/// 装载图像
src = imread( argv[1], 1 );
if( !src.data )
{ return -1; }
/// 分割成3个单通道图像 ( R, G 和 B )
vector rgb_planes;
split( src, rgb_planes );
/// 设定bin数目
int histSize = 255;
/// 设定取值范围 ( R,G,B) )
float range[] = { 0, 255 } ;
const float* histRange = { range };
bool uniform = true; bool accumulate = false;
Mat r_hist, g_hist, b_hist;
/// 计算直方图:
calcHist( rgb_planes[0], 1, 0, Mat(), r_hist, 1, histSize, histRange, uniform, accumulate );
calcHist( rgb_planes[1], 1, 0, Mat(), g_hist, 1, histSize, histRange, uniform, accumulate );
calcHist( rgb_planes[2], 1, 0, Mat(), b_hist, 1, histSize, histRange, uniform, accumulate );
// 创建直方图画布
int hist_w = 400; int hist_h = 400;
int bin_w = cvRound( (double) hist_w/histSize );
Mat histImage( hist_w, hist_h, CV_8UC3, Scalar( 0,0,0) );
/// 将直方图归一化到范围 [ 0, histImage.rows ]
normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
/// 在直方图画布上画出直方图
for( int i = 1; i histSize; i++ )
{
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at(i-1)) ) ,
Point( bin_w*(i), hist_h - cvRound(r_hist.at(i)) ),
Scalar( 0, 0, 255), 2, 8, 0 );
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at(i-1)) ) ,
Point( bin_w*(i), hist_h - cvRound(g_hist.at(i)) ),
Scalar( 0, 255, 0), 2, 8, 0 );
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at(i-1)) ) ,
Point( bin_w*(i), hist_h - cvRound(b_hist.at(i)) ),
Scalar( 255, 0, 0), 2, 8, 0 );
}
/// 显示直方图
namedWindow("calcHist Demo", CV_WINDOW_AUTOSIZE );
imshow("calcHist Demo", histImage );
waitKey(0);
return 0;
}
Python pandas数据计数函数value_counts
value_counts是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中个数,类似Excel里面的count函数
其是pandas下面的顶层函数,也可以作用在Series、DataFrame下
常规用法:
pandas 的 value_counts() 函数可以对Series里面的每个值进行计数 并且 排序,默认是降序
可以看出,既可以对分类变量统计,也可以对连续数值变量统计
如果是要对结果升序排列,可以添加 ascending=True 来改变
如果不想看统计的个数,而是想看占比,那么可以设置 normalize=True 即可,结果是小数形式
可以通过apply,对每一列变量进行统计
以上是自己实践中遇到的一些点,分享出来供大家参考学习,欢迎关注DataShare公众号
matlab如何实现自相关函数
自相关函数是描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度.设原函数是f(t),则自相关函数定义为R(u)=f(t)*f(-t),其中*表示卷积.\x0d\x0a\x0d\x0a给个例子:\x0d\x0adt=.1;\x0d\x0at=[0:dt:100];\x0d\x0ax=cos(t);\x0d\x0a[a,b]=xcorr(x,'unbiased');\x0d\x0aplot(b*dt,a)\x0d\x0a上面代码是求自相关函数并作图,\x0d\x0a\x0d\x0amatlab中查看帮助时,\x0d\x0ahelp xcorr 解释其意思是: \x0d\x0aC(m) = E[A(n+m)*conj(B(n))] = E[A(n)*conj(B(n-m))];\x0d\x0a\x0d\x0a但是,在调用xcorr函数求自相关时,有 scaleopt参数\x0d\x0ar=xcorr(s,SCALEOPT)\x0d\x0a\x0d\x0aSCALEOPT有\x0d\x0a 'biased - scales the raw cross-correlation by 1/M.\x0d\x0a 'unbiased- scales the raw correlation by 1/(M-abs(lags)).\x0d\x0a 'coeff - normalizes the sequence so that the auto-correlations\x0d\x0a at zero lag are identically 1.0.\x0d\x0a 'none - no scaling (this is the default).\x0d\x0a\x0d\x0a注意观察下面的测试:\x0d\x0as = [1 2 3]\x0d\x0ar = xcorr(s);\x0d\x0ar =\x0d\x0a 3.0000 8.0000 14.0000 8.0000 3.0000\x0d\x0a\x0d\x0a当用r=xcorr(s,'unbiased')时就能得到\x0d\x0ar =3.0000 4.0000 4.6667 4.0000 3.0000
四个变量能画matlab图吗?
Matlab画不了四个变量
MATLAB可以使用fit函数来实现四变量曲线拟合。fit函数的语法如下:
[fitresult, gof] = fit(xData, yData, ft, opts)
其中,xData和yData分别为输入变量和输出变量,ft为拟合函数,opts为可选参数。
例如,要拟合一个四变量曲线,可以使用以下语句:
[fitresult, gof] = fit(xData, yData, 'poly4', 'Normalize', 'on')
其中,poly4表示使用4次多项式拟合,Normalize表示对输入变量和输出变量进行归一化处理。
matlab的神经网络例程中这段的意义是什么?
我把程序逐句注释下:
function test_example_NN %函数定义
load mnist_uint8; %将样本数据加载进来,看名字是一个unsigned int
train_x = double(train_x) / 255; %将所有数据归为1内
test_x = double(test_x) / 255;
train_y = double(train_y);
test_y = double(test_y);
% normalize
[train_x, mu, sigma] = zscore(train_x); %化为标准分数,这是统计上的知识
test_x = normalize(test_x, mu, sigma); %归一化函数
总结一下,上面的代码主要起样本归一化的功能。但是事实上,MATLAB提供了许多自带的归一化函数,无需这么烦杂的进行统计归一化。
Python sklearn.metrics模块混淆矩阵常用函数
1.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
参数分别为y实际类别、预测类别、返回值要求(True返回正确的样本占比,false返回的是正确分类的样本数量)
eg:
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
accuracy_score(y_true, y_pred)
0.5
accuracy_score(y_true, y_pred, normalize=False)
2.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2)
参数:真是类别,预测类别,目标类别名称
eg:
3.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
输出为混淆矩阵
eg:
太多了,写3个常用的吧,具体参考help(metrics)
defcm_plot(y,yp):#参数为实际分类和预测分类
fromsklearn.metricsimportconfusion_matrix
#导入混淆矩阵函数
cm = confusion_matrix(y,yp)
#输出为混淆矩阵
importmatplotlib.pyplotasplt
#导入作图函数
plt.matshow(cm,cmap=plt.cm.Greens)
# 画混淆矩阵图,配色风格使用cm.Greens
plt.colorbar()
# 颜色标签
forxinrange(len(cm)):
foryinrange(len(cm)):
plt.annotate(cm[x,y],xy=(x,y),horizontalalignment='center',verticalalignment='center')
#annotate主要在图形中添加注释
# 第一个参数添加注释
# 第一个参数是注释的内容
# xy设置箭头尖的坐标
#horizontalalignment水平对齐
#verticalalignment垂直对齐
#其余常用参数如下:
# xytext设置注释内容显示的起始位置
# arrowprops 用来设置箭头
# facecolor 设置箭头的颜色
# headlength 箭头的头的长度
# headwidth 箭头的宽度
# width 箭身的宽度
plt.ylabel('True label')# 坐标轴标签
plt.xlabel('Predicted label')# 坐标轴标签
returnplt
#函数调用
cm_plot(train[:,3],tree.predict(train[:,:3])).show()