C++代码改Python实现PCA算法:从一组照片中获取特征脸(特征向量)?

PCA处理的基本步骤为:

1、获取m个样本,每个样本有n个特征。

2、每个样本作为一行,构成m*n的举证A。

3、将矩阵转置再乘以自己得到C=A(t)*A。

4、求出矩阵C的特征值及特征向量,特征向量即为特征脸。
以下是C++实现代码,求解决一份Python实现出的代码

#include "stdafx.h"
#include <string>
#include <opencv2\opencv.hpp> 
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
    //获取了mean_face
    int num_sample = 38;
    int norm_row = 64, norm_col = 56;
    int num;
    Mat imgs = loadImages(num);
    Mat mean_face = Mat(norm_row, norm_col, CV_8UC1);
    vector<int> mean_face_total;
    mean_face_total.resize(norm_row * norm_col);

    for (int i = 0; i < num; i++)
    {
        for (int j = 0; j < norm_row * norm_col; j++)
        {
            mean_face_total.at(j) += imgs.at<uchar>(i * norm_row * norm_col + j);
            //eigen_face_total[j] += imgs.at<uchar>(i * 192 * 168 + j);
        }
    }
    for (int j = 0; j < norm_row * norm_col; j++)
    {
        mean_face.at<uchar>(j) = (uchar)(mean_face_total.at(j) / num);
    }

    imwrite("C:/Users/dhj555/Desktop/YelaFaces/eigen_face/0001.jpg", mean_face);
    imshow("eigen_face", mean_face);

    //1、初始化数据
    CvMat* pData = cvCreateMat(num_sample, norm_row * norm_col, CV_32FC1);
    CvMat* pMean = cvCreateMat(1, norm_row * norm_col, CV_32FC1);
    //每个数标志一个特征值
    CvMat* pEigVals = cvCreateMat(1, min(num_sample, norm_row * norm_col), CV_32FC1);
    //每行表示一个特征向量
    CvMat* pEigVecs = cvCreateMat(min(num_sample, norm_row * norm_col), norm_row * norm_col, CV_32FC1);

    for (int i = 0; i < num_sample; i++)
    {
        for (int j = 0; j < norm_row * norm_col; j++)
            cvmSet(pData, i, j, imgs.at<uchar>(i * norm_row * norm_col + j));
    }

    //2、PCA处理
    cvCalcPCA(pData, pMean, pEigVals, pEigVecs, CV_PCA_DATA_AS_ROW);

    //3、选出前P个特征向量(主成份),然后投影,结果保存在pResult中,pResult中包含了P个系数
    //CvMat* pResult = cvCreateMat(num_sample, 20, CV_32FC1);
    //cvProjectPCA(pData, pMean, pEigVecs, pResult);

    //4、重构, 结果保存在pRecon中
    //CvMat* pRecon = cvCreateMat(num_sample, norm_row*norm_col, CV_32FC1);
    //cvBackProjectPCA(pResult, pMean, pEigVecs, pRecon);

    //5、显示重构的图像
    //Mat mRecon = Mat(pRecon);


    //4、显示与保存特征向量
    for (int i = 0; i < min(num_sample, norm_row * norm_col); i++)
    {
        float min = LLONG_MAX, max = LLONG_MIN, span = 0.0;
        for (int index = 0; index < norm_row*norm_col; index++)
        {
            float d = cvmGet(pEigVecs, i, index);
            if (d>max)
                max = d;
            if (d < min)
                min = d;
        }
        span = max - min;
        Mat eigen_face = Mat(norm_row, norm_col, CV_8UC1);
        for (int index = 0; index < norm_row*norm_col; index++)
        {
            float d = cvmGet(pEigVecs, i, index);
            eigen_face.at<uchar>(index) = (d - min) / span * 255.0;
        }
        char buffer[128];
        sprintf_s(buffer, "C:/Users/dhj555/Desktop/YelaFaces/eigen_face/001/1-000%d.jpg", i);
        string imgPath(buffer);
        imshow(imgPath, eigen_face);
        printf("%d st:\t%f\n", i, cvmGet(pEigVals, 0, i));
        imwrite(imgPath, eigen_face);
    }
}

1个回答

https://www.cnblogs.com/clnchanpin/p/7199713.html 参考一下这个吧,python只要几行即可

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++代码改Python实现PCA算法:从一组照片中获取特征脸(特征向量)?
PCA处理的基本步骤为: 1、获取m个样本,每个样本有n个特征。 2、每个样本作为一行,构成m*n的举证A。 3、将矩阵转置再乘以自己得到C=A(t)*A。 4、求出矩阵C的特征值及特征向量,特征向量即为特征脸。 以下是C++实现代码,求解决一份Python实现出的代码 ``` #include "stdafx.h" #include <string> #include <opencv2\opencv.hpp> using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { //获取了mean_face int num_sample = 38; int norm_row = 64, norm_col = 56; int num; Mat imgs = loadImages(num); Mat mean_face = Mat(norm_row, norm_col, CV_8UC1); vector<int> mean_face_total; mean_face_total.resize(norm_row * norm_col); for (int i = 0; i < num; i++) { for (int j = 0; j < norm_row * norm_col; j++) { mean_face_total.at(j) += imgs.at<uchar>(i * norm_row * norm_col + j); //eigen_face_total[j] += imgs.at<uchar>(i * 192 * 168 + j); } } for (int j = 0; j < norm_row * norm_col; j++) { mean_face.at<uchar>(j) = (uchar)(mean_face_total.at(j) / num); } imwrite("C:/Users/dhj555/Desktop/YelaFaces/eigen_face/0001.jpg", mean_face); imshow("eigen_face", mean_face); //1、初始化数据 CvMat* pData = cvCreateMat(num_sample, norm_row * norm_col, CV_32FC1); CvMat* pMean = cvCreateMat(1, norm_row * norm_col, CV_32FC1); //每个数标志一个特征值 CvMat* pEigVals = cvCreateMat(1, min(num_sample, norm_row * norm_col), CV_32FC1); //每行表示一个特征向量 CvMat* pEigVecs = cvCreateMat(min(num_sample, norm_row * norm_col), norm_row * norm_col, CV_32FC1); for (int i = 0; i < num_sample; i++) { for (int j = 0; j < norm_row * norm_col; j++) cvmSet(pData, i, j, imgs.at<uchar>(i * norm_row * norm_col + j)); } //2、PCA处理 cvCalcPCA(pData, pMean, pEigVals, pEigVecs, CV_PCA_DATA_AS_ROW); //3、选出前P个特征向量(主成份),然后投影,结果保存在pResult中,pResult中包含了P个系数 //CvMat* pResult = cvCreateMat(num_sample, 20, CV_32FC1); //cvProjectPCA(pData, pMean, pEigVecs, pResult); //4、重构, 结果保存在pRecon中 //CvMat* pRecon = cvCreateMat(num_sample, norm_row*norm_col, CV_32FC1); //cvBackProjectPCA(pResult, pMean, pEigVecs, pRecon); //5、显示重构的图像 //Mat mRecon = Mat(pRecon); //4、显示与保存特征向量 for (int i = 0; i < min(num_sample, norm_row * norm_col); i++) { float min = LLONG_MAX, max = LLONG_MIN, span = 0.0; for (int index = 0; index < norm_row*norm_col; index++) { float d = cvmGet(pEigVecs, i, index); if (d>max) max = d; if (d < min) min = d; } span = max - min; Mat eigen_face = Mat(norm_row, norm_col, CV_8UC1); for (int index = 0; index < norm_row*norm_col; index++) { float d = cvmGet(pEigVecs, i, index); eigen_face.at<uchar>(index) = (d - min) / span * 255.0; } char buffer[128]; sprintf_s(buffer, "C:/Users/dhj555/Desktop/YelaFaces/eigen_face/001/1-000%d.jpg", i); string imgPath(buffer); imshow(imgPath, eigen_face); printf("%d st:\t%f\n", i, cvmGet(pEigVals, 0, i)); imwrite(imgPath, eigen_face); } } ```
求C#实现PCA算法的例子
求C#实现PCA算法的例子,PCA为主成分分析, 看了一天的百度,然而线性代数的知识完全不记得了。 求各位大神指点迷津,万分感谢!
opencv pca投影 得到的特征脸问题
用opencv进行人脸识别,在训练阶段利用opencv自带的函数cvCalcEigenObjects获取pca的子空间,代码如下: cvCalcEigenObjects( nTrainFaces, //参加训练的图片 (void*)faceImgArr, //得到的特征脸 (void*)eigenVectArr, CV_EIGOBJ_NO_CALLBACK, 0, 0, &calcLimit, //得到的平均脸 pAvgTrainImg, eigenValMat->data.fl ); 执行该函数后,用cvShowImage()进行特征脸eigenVectArr的显示,特征脸显示结果都是一片漆黑,看网页上正常显示的特征脸应该是这样的吧[图片说明](https://img-ask.csdn.net/upload/201501/30/1422597863_788733.png) 而且我得出的平均脸pAvgTraining显示为一张白色图片,也是什么都没有的。 我用的人脸库是jaffe,想问下各位大神是什么原因导致无法得出特征脸和平均脸? 在此谢过。
偏最小二乘法回归的Python代码看不懂,有大佬可以帮忙解释一下吗?
{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#basic module\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "from sklearn import preprocessing\n", "from sklearn import metrics\n", "from sklearn.decomposition import PCA \n", "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Q41</th>\n", " <th>Q42</th>\n", " <th>Q43</th>\n", " <th>Q44</th>\n", " <th>Q45</th>\n", " <th>Q46</th>\n", " <th>Q47</th>\n", " <th>Q48</th>\n", " <th>Q49</th>\n", " <th>Q410</th>\n", " <th>Q411</th>\n", " <th>Q412</th>\n", " <th>Q413</th>\n", " <th>Q414</th>\n", " <th>A1</th>\n", " <th>A2</th>\n", " <th>A3</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <td>0</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>4</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>-1.61</td>\n", " <td>1.91</td>\n", " <td>-1.06</td>\n", " </tr>\n", " <tr>\n", " <td>1</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>2</td>\n", " <td>2</td>\n", " <td>2</td>\n", " <td>2</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>2</td>\n", " <td>2</td>\n", " <td>2</td>\n", " <td>1.29</td>\n", " <td>-2.49</td>\n", " <td>-0.99</td>\n", " </tr>\n", " <tr>\n", " <td>2</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>-0.04</td>\n", " <td>1.89</td>\n", " <td>-1.29</td>\n", " </tr>\n", " <tr>\n", " <td>3</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>-0.04</td>\n", " <td>1.89</td>\n", " <td>-1.29</td>\n", " </tr>\n", " <tr>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>3</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>5</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>4</td>\n", " <td>4</td>\n", " <td>3</td>\n", " <td>-0.23</td>\n", " <td>0.77</td>\n", " <td>-0.60</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Q41 Q42 Q43 Q44 Q45 Q46 Q47 Q48 Q49 Q410 Q411 Q412 Q413 Q414 \\\n", "0 3 3 3 3 3 4 5 5 5 5 3 3 3 3 \n", "1 4 4 4 4 4 2 2 2 2 5 5 2 2 2 \n", "2 4 4 4 4 4 5 5 5 5 5 3 3 3 3 \n", "3 4 4 4 4 4 5 5 5 5 5 3 3 3 3 \n", "4 4 4 4 4 3 5 5 5 3 3 3 4 4 3 \n", "\n", " A1 A2 A3 \n", "0 -1.61 1.91 -1.06 \n", "1 1.29 -2.49 -0.99 \n", "2 -0.04 1.89 -1.29 \n", "3 -0.04 1.89 -1.29 \n", "4 -0.23 0.77 -0.60 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_data = pd.read_csv(\"257 928.csv\").loc[:,['Q41','Q42','Q43','Q44','Q45',\n", " 'Q46','Q47','Q48','Q49','Q410',\n", " 'Q411','Q412','Q413','Q414',\n", " 'A1','A2','A3']]\n", "raw_data.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Q41', 'Q42', 'Q43', 'Q44', 'Q45', 'Q46', 'Q47', 'Q48', 'Q49', 'Q410',\n", " 'Q411', 'Q412', 'Q413', 'Q414', 'A1', 'A2', 'A3'],\n", " dtype='object')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw_data.columns" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def linear_model(X,w):\n", " _,loop = np.shape(X)\n", " sum = 0\n", " for i in range(loop):\n", " sum += w[i] * X[:,i]\n", " return sum" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def loss_function(x_train, y_train, w):\n", " X = x_train\n", " Y_pred = linear_model(X,w)\n", " J = metrics.mean_squared_error(y_train, Y_pred)\n", " return J" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def model(x_train, y_train, mini=1e-10, alpha=0.001, delta = 0.005, max_iter = 100, max_step = 5000): \n", " step = 0\n", " _,loop = np.shape(x_train)\n", " w = np.random.rand(loop)\n", " while(True):\n", " weights = np.array(w)\n", " for i in range(0, len(w)):\n", " step_ = 0\n", " while (True):\n", " # simplified gradient descent\n", " w_backup = w[i] \n", " loss_present = loss_function(x_train, y_train, w)\n", " w[i] = w_backup + delta\n", " loss_plus = loss_function(x_train, y_train, w)\n", " w[i] = w_backup - delta\n", " loss_sub = loss_function(x_train, y_train, w)\n", " if (loss_present < loss_plus and loss_present < loss_sub) or step_ >= max_step:\n", " break\n", " # update weights\n", " w[i] = w_backup - alpha*(loss_plus - loss_sub)/(2*delta)\n", " #w[i] = w_backup + alpha if loss_plus < loss_sub else w_backup - alpha\n", " step_ += 1\n", " offset = np.sum(np.square(np.array(w) - weights))\n", " # end condition\n", " step += 1\n", " if (offset < mini) or (step >= max_iter):\n", " break\n", " return w, loss_present" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def obtain_elements(x_data, y_data, num):\n", " comp_list = []\n", " metric_list = []\n", " w_list = []\n", " pca_list = []\n", " for comp in range(num):\n", " n_comp = comp + 1\n", " # pca\n", " comp_list.append(n_comp)\n", " pca = PCA(n_components=n_comp,svd_solver='auto')\n", " X_ = x_data - np.mean(x_data)\n", " pca.fit(X_, y_data)\n", " X = pca.transform(X_)\n", " # linear reg\n", " pca_list.append(pca)\n", " w, metric = model(X, y_data )\n", " w_list.append(w)\n", " metric_list.append(metric)\n", " ind = metric_list.index(min(metric_list))\n", " print(\"metrics :\" ,metric_list)\n", " return comp_list[ind], pca_list[ind], w_list[ind]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# 第一组\n", "x1_data = raw_data.loc[:,['Q41','Q42','Q43','Q44','Q45']]\n", "y1_data = raw_data.loc[:,['A2']]\n", "len1 = 5\n", "# 第二组\n", "x2_data = raw_data.loc[:,['Q46','Q47','Q48','Q49','Q410']]\n", "y2_data = raw_data.loc[:,['A1']]\n", "len2 = 5\n", "# 第三组\n", "x3_data = raw_data.loc[:,['Q411','Q412','Q413','Q414']]\n", "y3_data = raw_data.loc[:,['A3']]\n", "len3 = 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 计算PLSR" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 第一组" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "metrics : [0.937338177736278, 0.90366935147199, 0.9036905658620544, 0.9028029958313659, 0.9022534567720741]\n", "第一组的主成分保留5个\n", "回归系数为: [-0.17477811 0.25885742 -0.01157531 -0.07843881 0.06077944]\n" ] } ], "source": [ "comp_1, pca_1, w1 = obtain_elements(x1_data, y1_data, len1)\n", "print(\"第一组的主成分保留%d个\"%comp_1)\n", "print(\"回归系数为:\", w1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 第二组" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "metrics : [0.9216669179495057, 0.9126959565507735, 0.900633447790304, 0.8930927646735571, 0.8824868647839249]\n", "第二组的主成分保留5个\n", "回归系数为: [-0.19525742 -0.14575206 -0.20305816 -0.17987887 -0.22941539]\n" ] } ], "source": [ "comp_2, pca_2, w2 = obtain_elements(x2_data, y2_data, len2)\n", "print(\"第二组的主成分保留%d个\"%comp_2)\n", "print(\"回归系数为:\", w2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 第三组" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "metrics : [0.07356179930507709, 0.06803873635782488, 0.06747567528450515, 0.06722983639980304]\n", "第三组的主成分保留4个\n", "回归系数为: [-0.67029064 -0.10083604 0.0447786 -0.04806739]\n" ] } ], "source": [ "comp_3, pca_3, w3 = obtain_elements(x3_data, y3_data, len3)\n", "print(\"第三组的主成分保留%d个\"%comp_3)\n", "print(\"回归系数为:\", w3)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 2 } ``` ```
求大神帮忙,在MATLAB上用pca算法读入一组数据,分析处理结果
求一个代码,数据是一个word表格,大约读入5000个数据,谢谢啊
OpenCV PCA人脸识别时欧氏距离的问题
我用PCA+SVM方式对ORL人脸库进行人脸识别,使用Opencv的PCA库进行降维及特征提取,提取后的特征用于SVM训练,如果每人用两个图进行学习,最终测试样本的识别率能到85%+。 但是我如果用测试样本的特征向量和训练样本的特征向量进行欧式距离(NORM_L2)的计算,计算结果十分没有规律,不管是不是同一个人的特征,距离从一千多到四千多的都有。这种情况十分不合理呀,opencv还有个基于PCA样本距离的特征脸识别库不就是用L2距离进行比较来进行识别的吗?鉴于此我又实验了一下使用opencv的特征脸识别库EigenFaceRecognizer进行人脸识别,同样的样本划分,但是不自己写特征提取代码,直接输入原始图片,因为特提取的工作是特征脸库自己做的,识别率也能到80%+。 总结起来问题就是,我用PCA提取的特征进行SVM人脸识别,效果还可以,但是直接用测试样本的特征值和训练样本的特征值进行距离比较,却并不能得出同一人的样本距离会比较近,不同人的会比较远的结果,和特征脸识别的工作原理不符。不知是哪里有问题,求解!
刚买的pca9685写的代码一直驱动不了舵机,小白求解
新手小白求问 刚买了pca9685模块,看数据手册没有中文的只好找了些别人stm32的代码改过来用在51上面,但是一直都驱动不了舵机,不是知道代码出了什么问题,求解 以下就是我用的所有源码。 ``` #ifndef __IIC_H #define __IIC_H sbit IIC_SDA = P3^6; sbit IIC_SCL = P3^7; #define u8 unsigned char #define u16 char //IIC所有操作函数 void delay_us(u8 i); void IIC_Start(void); //发送IIC开始信号 void IIC_Stop(void); //发送IIC停止信号 void IIC_Send_Byte(u8 txd); //IIC发送一个字节 u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节 u8 IIC_Wait_Ack(void); //IIC等待ACK信号 void IIC_Ack(void); //IIC发送ACK信号 void IIC_NAck(void); //IIC不发送ACK信号 //void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 dat); //u8 IIC_Read_One_Byte(u8 daddr,u8 addr); #endif ``` ``` #include <stc12c5a60s2.h> #include <IIC.h> #include <intrins.h> void delay_us(u8 i) { u8 j; for(j=i;j>0;j--) {_nop_();} } //产生IIC起始信号 void IIC_Start(void) { // SDA_OUT(); //sda线输出 IIC_SDA=1; IIC_SCL=1; delay_us(4); IIC_SDA=0;//START:when CLK is high,DATA change form high to low delay_us(4); IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 } //产生IIC停止信号 void IIC_Stop(void) { // SDA_OUT();//sda线输出 IIC_SCL=0; IIC_SDA=0;//STOP:when CLK is high DATA change form low to high delay_us(4); IIC_SCL=1; IIC_SDA=1;//发送I2C总线结束信号 delay_us(4); } //等待应答信号到来 //返回值:1,接收应答失败 // 0,接收应答成功 u8 IIC_Wait_Ack(void) { u8 ucErrTime=0; // SDA_IN(); //SDA设置为输入 IIC_SDA=1;delay_us(1); IIC_SCL=1;delay_us(1); while(IIC_SDA) { ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } } IIC_SCL=0;//时钟输出0 return 0; } //产生ACK应答 void IIC_Ack(void) { IIC_SCL=0; // SDA_OUT(); IIC_SDA=0; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; } //不产生ACK应答 void IIC_NAck(void) { IIC_SCL=0; // SDA_OUT(); IIC_SDA=1; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; } //IIC发送一个字节 //返回从机有无应答 //1,有应答 //0,无应答 void IIC_Send_Byte(u8 txd) { u8 t; // SDA_OUT(); IIC_SCL=0;//拉低时钟开始数据传输 for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(2); //对TEA5767这三个延时都是必须的 IIC_SCL=1; delay_us(2); IIC_SCL=0; delay_us(2); } } //读1个字节,ack=1时,发送ACK,ack=0,发送nACK u8 IIC_Read_Byte(unsigned char ack) { unsigned char i,receive=0; // SDA_IN();//SDA设置为输入 for(i=0;i<8;i++ ) { IIC_SCL=0; delay_us(2); IIC_SCL=1; receive<<=1; if(IIC_SDA)receive++; delay_us(1); } if (!ack) IIC_NAck();//发送nACK else IIC_Ack(); //发送ACK return receive; } ``` ``` #include <stc12c5a60s2.h> #include <IIC.h> #include <intrins.h> #include <pca8574.h> #define uchar unsigned char #define uint unsigned int sbit scl=P3^6; //时钟输入线 sbit sda=P3^7; //数据输入/输出端 void PCA9685_write(unsigned char reg,unsigned char dat); u8 PCA9685_read(unsigned char reg); void setPWMFreq(u8 freq); void setPWM(u8 num, u16 on, u16 off); void down(); void up(); void delay_ms(u8 xms) { u8 i,j; for(i=xms;i>0;i--) for (j=200;j>0;j--); } void PCA9685_write(unsigned char reg,unsigned char dat) { IIC_Start(); IIC_Send_Byte(PCA9685_adrr); IIC_Wait_Ack(); IIC_Send_Byte(reg); IIC_Wait_Ack(); IIC_Send_Byte(dat); IIC_Wait_Ack(); IIC_Stop(); } u8 PCA9685_read(unsigned char reg) { u8 res; IIC_Start(); IIC_Send_Byte(PCA9685_adrr); IIC_Wait_Ack(); IIC_Send_Byte(reg); IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(PCA9685_adrr|0X01); IIC_Wait_Ack(); res=IIC_Read_Byte(0); IIC_Stop(); return res; } void setPWMFreq(u8 freq) { u8 prescale,oldmode,newmode; double prescaleval; prescaleval = 25000000.0/(4096*freq*0.915); prescale = (u8)(prescaleval+0.5)-1; oldmode = PCA9685_read(PCA9685_MODE1); newmode = (oldmode&0x7F) | 0x10; // sleep PCA9685_write(PCA9685_MODE1, newmode); // go to sleep PCA9685_write(PCA9685_PRESCALE, prescale); // set the prescaler PCA9685_write(PCA9685_MODE1, oldmode); delay_ms(5); PCA9685_write(PCA9685_MODE1, oldmode | 0xa1); } void setPWM(u8 num, u16 on, u16 off) { PCA9685_write(LED0_ON_L+4*num,on); PCA9685_write(LED0_ON_H+4*num,on>>8); PCA9685_write(LED0_OFF_L+4*num,off); PCA9685_write(LED0_OFF_H+4*num,off>>8); } u16 calculate_PWM(u8 angle) { return (int)(204.8*(0.5+angle*1.0/90)); } void down() { u16 pwm = calculate_PWM(0); setPWM(0x0,0,pwm); delay_ms(1); setPWM(0x1,0,pwm); delay_ms(1); setPWM(0x2,0,pwm); delay_ms(1); setPWM(0x3,0,pwm); delay_ms(1); setPWM(0x4,0,pwm); delay_ms(1); setPWM(0x5,0,pwm); delay_ms(1); setPWM(0x6,0,pwm); delay_ms(1); setPWM(0x7,0,pwm); } void up() { u16 pwm = calculate_PWM(90); setPWM(0x0,0,pwm); delay_ms(1); setPWM(0x1,0,pwm); delay_ms(1); setPWM(0x2,0,pwm); delay_ms(1); setPWM(0x3,0,pwm); delay_ms(1); setPWM(0x4,0,pwm); delay_ms(1); setPWM(0x5,0,pwm); delay_ms(1); setPWM(0x6,0,pwm); delay_ms(1); setPWM(0x7,0,pwm); } void main() { PCA9685_write(PCA9685_MODE1,0x0);//PCA9685复位 setPWMFreq(50); while(1) { down(); up(); } } ``` ``` #ifndef __PCF8574_H #define __PCF8574_H #include <stc12c5a60s2.h> #define PCA9685_adrr 0x40 #define PCA9685_SUBADR1 0x2 #define PCA9685_SUBADR2 0x3 #define PCA9685_SUBADR3 0x4 #define PCA9685_MODE1 0x0 #define PCA9685_PRESCALE 0xFE #define LED0_ON_L 0x6 #define LED0_ON_H 0x7 #define LED0_OFF_L 0x8 #define LED0_OFF_H 0x9 #define ALLLED_ON_L 0xFA #define ALLLED_ON_H 0xFB #define ALLLED_OFF_L 0xFC #define ALLLED_OFF_H 0xFD #define u8 unsigned char #define u16 char ```
数据预处理:类别型变量的编码问题
在数据挖掘的数据预处理对类别型变量编码过程中,其中一个类别型变量含具有有很多不同的取值(200个),若对这个的类型做OneHot编码,会给数据增加200个特征,大大增加了数据的维数。 请问对于这样的类型变量该怎么处理呢? 1.需要做卡方封箱吗?用python该怎么分箱处理? 2.或者编码后做PCA降维处理?PCA具体怎么降维呢? 3.还有其他更好的方法吗? 谢谢
MATLAB 中PCA特征提取用LDA和PLS代替的代码
function [Xs_new,Xt_new,G] = GFK_Map(Xs,Xt,dim) Ps = pca(Xs); Pt = pca(Xt); G = GFK_core([Ps,null(Ps')], Pt(:,1:dim)); sq_G = real(G); Xs_new = (sq_G * Xs')'; Xt_new = (sq_G * Xt')'; end 这里用PCA特征提取Xs和Xt,得到一个特征的转化矩阵(COEFF) ,这个矩阵在MATLAB里面 叫COEFF,是个n*n,n为原矩阵的维度,我想用LDA或者PLS代替或者有更好的特征提取方式,提取到这个类似COEFF的转化矩阵,代码都可以。
基于先验方向的pca算法
假如存在一个已知的方向,在其正交方向寻找一个能最大程度反映原有信息的方向,怎么实现?
关于PCA和KPCA的特征向量的维数问题~
想问一下PCA算出来的特征向量是和样本属性的维数一样,因为主成分是原来样本属性的线性组合,那么KPCA求出来的特征向量(利用核函数),为什么维数等于样本数呢?
通过单张正面人脸照片建立三维人脸形状建模
问题是这样:我需要通过一张正面人脸照片构建三维人脸模型。 思路:首先用主动形状模型(ASM)或其他的特征点定位方法定位照片中人脸的一定数量特征点(ASM方法中一般是68个);其次利用主成分分析法(PCA)训练三维人脸数据库,得到一个三维人脸形状模型;然后建立二维人脸模型和三维人脸模型的映射关系,得到三维人脸形状模型的形状参数;最后通过纹理映射得到照片中人物的真实人脸模型,当然应该会有一定的误差。 现在只是完成了特征点的定位,遇到的困难是: 1、怎么导出这些特征点的坐标文件; 2、有什么好用的3D人脸库; 3、怎样建立2D到3D的映射关系; 望有做过相关项目的前辈不吝赐教,正在做的可以一起讨论下。
大家帮忙看看我这段matlab,用pca处理图像,但是输出的图片为什么会是重复的三张?
function y=mypca() %%%%%%%%%%%%%%%%%%%%%%%%%PCA算法对人脸图像处理提取主成分程序 path = ['.\']; % 提取当前目录 %读取图像 numimage=4; %4张人脸 imagepath=[path 'ORL\ORL001' '.bmp']; %第一张人脸文件的路径及文件名:D:\PCA\ORL\ORL001.bmp immatrix=imread(imagepath); % 读入第一张人脸文件,构成矩阵immatrix [m,n]=size(immatrix); % 计算矩阵immatrix的行数m、列数n DATA = uint8 (rand(m*n, numimage)); %随机生成m*n行、numimage列的矩阵,并取uint8 for i=1:numimage s1=floor(i/100); % 取整,求第3位 tem=rem(i,100); % i除以100的余数,取后两位 s2=floor(tem/10); % 取第2位 s3=rem(tem,10); % 取第1位 imagepath=[path 'ORL\ORL' int2str(s1) int2str(s2) int2str(s3) '.bmp']; % 构成图像文件的路径即文件名 immatrix=imread(imagepath); % 读入每一张人脸文件,构成矩阵immatrix imVector=reshape(immatrix,m*n,1); % 将矩阵immatrix转化为一个列向量,长度为m*n DATA(:,i)=imVector; % 将列向量imVector依次加入到DATA矩阵的列中.DATA先随机生成过的 end clear i;clear j; save DATA DATA; % 保存DATA mn=mean(double(DATA'))'; % 计算DATA的行向量的均值 save mn mn; % 保存DATA的行向量的均值 %image substracted by mean of all train images DATAzeromean=double(DATA)-repmat(mn,1,numimage); save DATAzeromean DATAzeromean; clear DATA; L=DATAzeromean'*DATAzeromean; [V,D]=eig(L); enginvalue=diag(D); [enginvalue,ix]=sort(enginvalue);%按升序排列矩阵元素 ix=flipud(ix);%从上到下翻转矩阵,即按降序 V=V(:,ix); %对V的特征向量位置调整 facespace=DATAzeromean*V; %脸空间 for t=1:numimage facespace(:,t)=facespace(:,t)/norm(facespace(:,t));%Normalisation to unit length end subdim=4; facespace=facespace(:,1:subdim);%选择子特征向量的协方差矩阵 projdata=facespace'*DATAzeromean; save projdata projdata; save facespace facespace; datareconstruct=facespace*projdata; fprintf('正在保存 Wakesplace中的图片数据\n'); save datareconstruct datareconstruct; for i=1:numimage-1 imdata=datareconstruct(:,i); imdata=reshape(imdata,m,n); imwrite(imdata,['.\生成的特征脸\' int2str(i) '.bmp'],'bmp');%得到重构图像1.bmp---4.bmp end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
用python scapy库分析pcap数据包错误TypeError、AttributeError
写了个python程序解析流量数据包,用的是scapy库。读取流量较少的pcap包文件时可以顺利运行,读取大点的pcap包就会报错。 错误信息如下: ``` Traceback (most recent call last): File "C:\Users\ASUS\AppData\Local\Programs\Python\Python36\lib\site-packages\scapy\packet.py", line 235, in __getattr__ fld, v = self.getfield_and_val(attr) TypeError: 'NoneType' object is not iterable During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\ASUS\AppData\Local\Programs\Python\Python36\lib\site-packages\scapy\packet.py", line 235, in __getattr__ fld, v = self.getfield_and_val(attr) TypeError: 'NoneType' object is not iterable During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\Paper\sta\pcap\特征提取.py", line 22, in <module> bufLen.append(data.len) File "C:\Users\ASUS\AppData\Local\Programs\Python\Python36\lib\site-packages\scapy\packet.py", line 237, in __getattr__ return self.payload.__getattr__(attr) File "C:\Users\ASUS\AppData\Local\Programs\Python\Python36\lib\site-packages\scapy\packet.py", line 237, in __getattr__ return self.payload.__getattr__(attr) File "C:\Users\ASUS\AppData\Local\Programs\Python\Python36\lib\site-packages\scapy\packet.py", line 235, in __getattr__ fld, v = self.getfield_and_val(attr) File "C:\Users\ASUS\AppData\Local\Programs\Python\Python36\lib\site-packages\scapy\packet.py", line 1291, in getfield_and_val raise AttributeError(attr) AttributeError: len ``` 源代码部分: ``` from scapy.all import * from scapy.utils import PcapReader rd = PcapReader('./a.pcap') while True: data = rd.read_packet() if data is None: break else: ''' 分析处理过程 ''' rd.close() ``` 源代码处理过程应该没问题,毕竟可以运行处理小数据包,但数据量一大就会报错。 而且有时候不稳定,简单的同样的代码有时可以运行成功,有时也会报上面的错,我想是不是系统的问题,我用的是在windows10,内存16G应该足够大,为什么会报错呢,求大神解答!
求教matlab关于pca降维的问题
我想用30*3000的一组数据经pca降维之后使用lssvm来建模,然后用11*3000的一组数据来检验这个模型。 我想问的是,经过pca降维,30*3000的矩阵变成了30*29的矩阵,但是检验的数据经过pca降维之后成为了11*10的矩阵,这样还能检验吗?
opencv3.2.0下pca.cpp编译后命令行该如何输入?
我用的环境是linux ubuntu+opencv3.2.0,其pca.cpp已经用cmake编译成功,但是执行总是报命令行错误,求解命令行应该如何输入,举例最好。pca.cpp源码如下:/* * pca.cpp * * Author: * Kevin Hughes <kevinhughes27[at]gmail[dot]com> * * Special Thanks to: * Philipp Wagner <bytefish[at]gmx[dot]de> * * This program demonstrates how to use OpenCV PCA with a * specified amount of variance to retain. The effect * is illustrated further by using a trackbar to * change the value for retained varaince. * * The program takes as input a text file with each line * begin the full path to an image. PCA will be performed * on this list of images. The author recommends using * the first 15 faces of the AT&T face data set: * http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html * * so for example your input text file would look like this: * * <path_to_at&t_faces>/orl_faces/s1/1.pgm * <path_to_at&t_faces>/orl_faces/s2/1.pgm * <path_to_at&t_faces>/orl_faces/s3/1.pgm * <path_to_at&t_faces>/orl_faces/s4/1.pgm * <path_to_at&t_faces>/orl_faces/s5/1.pgm * <path_to_at&t_faces>/orl_faces/s6/1.pgm * <path_to_at&t_faces>/orl_faces/s7/1.pgm * <path_to_at&t_faces>/orl_faces/s8/1.pgm * <path_to_at&t_faces>/orl_faces/s9/1.pgm * <path_to_at&t_faces>/orl_faces/s10/1.pgm * <path_to_at&t_faces>/orl_faces/s11/1.pgm * <path_to_at&t_faces>/orl_faces/s12/1.pgm * <path_to_at&t_faces>/orl_faces/s13/1.pgm * <path_to_at&t_faces>/orl_faces/s14/1.pgm * <path_to_at&t_faces>/orl_faces/s15/1.pgm * */ #include <iostream> #include <fstream> #include <sstream> #include <opencv2/core.hpp> #include "opencv2/imgcodecs.hpp" #include <opencv2/highgui.hpp> using namespace cv; using namespace std; /////////////////////// // Functions static void read_imgList(const string& filename, vector<Mat>& images) { std::ifstream file(filename.c_str(), ifstream::in); if (!file) { string error_message = "No valid input file was given, please check the given filename."; CV_Error(Error::StsBadArg, error_message); } string line; while (getline(file, line)) { images.push_back(imread(line, 0)); } } static Mat formatImagesForPCA(const vector<Mat> &data) { Mat dst(static_cast<int>(data.size()), data[0].rows*data[0].cols, CV_32F); for(unsigned int i = 0; i < data.size(); i++) { Mat image_row = data[i].clone().reshape(1,1); Mat row_i = dst.row(i); image_row.convertTo(row_i,CV_32F); } return dst; } static Mat toGrayscale(InputArray _src) { Mat src = _src.getMat(); // only allow one channel if(src.channels() != 1) { CV_Error(Error::StsBadArg, "Only Matrices with one channel are supported"); } // create and return normalized image Mat dst; cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1); return dst; } struct params { Mat data; int ch; int rows; PCA pca; string winName; }; static void onTrackbar(int pos, void* ptr) { cout << "Retained Variance = " << pos << "% "; cout << "re-calculating PCA..." << std::flush; double var = pos / 100.0; struct params *p = (struct params *)ptr; p->pca = PCA(p->data, cv::Mat(), PCA::DATA_AS_ROW, var); Mat point = p->pca.project(p->data.row(0)); Mat reconstruction = p->pca.backProject(point); reconstruction = reconstruction.reshape(p->ch, p->rows); reconstruction = toGrayscale(reconstruction); imshow(p->winName, reconstruction); cout << "done! # of principal components: " << p->pca.eigenvectors.rows << endl; } /////////////////////// // Main int main(int argc, char** argv) { cv::CommandLineParser parser(argc, argv, "{@input||image list}{help h||show help message}"); if (parser.has("help")) { parser.printMessage(); exit(0); } // Get the path to your CSV. string imgList = parser.get<string>("@input"); if (imgList.empty()) { parser.printMessage(); exit(1); } // vector to hold the images vector<Mat> images; // Read in the data. This can fail if not valid try { read_imgList(imgList, images); } catch (cv::Exception& e) { cerr << "Error opening file \"" << imgList << "\". Reason: " << e.msg << endl; exit(1); } // Quit if there are not enough images for this demo. if(images.size() <= 1) { string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; CV_Error(Error::StsError, error_message); } // Reshape and stack images into a rowMatrix Mat data = formatImagesForPCA(images); // perform PCA PCA pca(data, cv::Mat(), PCA::DATA_AS_ROW, 0.95); // trackbar is initially set here, also this is a common value for retainedVariance // Demonstration of the effect of retainedVariance on the first image Mat point = pca.project(data.row(0)); // project into the eigenspace, thus the image becomes a "point" Mat reconstruction = pca.backProject(point); // re-create the image from the "point" reconstruction = reconstruction.reshape(images[0].channels(), images[0].rows); // reshape from a row vector into image shape reconstruction = toGrayscale(reconstruction); // re-scale for displaying purposes // init highgui window string winName = "Reconstruction | press 'q' to quit"; namedWindow(winName, WINDOW_NORMAL); // params struct to pass to the trackbar handler params p; p.data = data; p.ch = images[0].channels(); p.rows = images[0].rows; p.pca = pca; p.winName = winName; // create the tracbar int pos = 95; createTrackbar("Retained Variance (%)", winName, &pos, 100, onTrackbar, (void*)&p); // display until user presses q imshow(winName, reconstruction); char key = 0; while(key != 'q') key = (char)waitKey(); return 0; } 看了半天,刚开始学习C++,不太懂,望前辈给个傻瓜都能看懂的解答。
用vs2015和opencv做人脸识别时碰到LNK2019的错误
错误如下: ![图片说明](https://img-ask.csdn.net/upload/201603/18/1458277026_790331.png) 不是链接器的问题,应该是代码的问题,但我对c++和vs还不太熟悉。请哪位大神告知。代码如下: #include "stdafx.h" #include <opencv2/opencv.hpp> #include <opencv2/contrib_world.hpp> #include "opencv2/core.hpp" #include "opencv2/face.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" //#include <opencv2/face/facerec.hpp> #include <iostream> #include <fstream> #include <sstream> using namespace cv; using namespace cv::face; using namespace std; static Mat norm_0_255(InputArray _src) { Mat src = _src.getMat(); // 创建和返回一个归一化后的图像矩阵: Mat dst; switch (src.channels()) { case 1: cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1); break; case 3: cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC3); break; default: src.copyTo(dst); break; } return dst; } //使用CSV文件去读图像和标签,主要使用stringstream和getline方法 static void read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator = ';') { std::ifstream file(filename.c_str(), ifstream::in); if (!file) { string error_message = "No valid input file was given, please check the given filename."; CV_Error(Error::StsBadArg, error_message); } string line, path, classlabel; while (getline(file, line)) { stringstream liness(line); getline(liness, path, separator); getline(liness, classlabel); if (!path.empty() && !classlabel.empty()) { images.push_back(imread(path, 0)); labels.push_back(atoi(classlabel.c_str())); } } } int main() { // 检测合法的命令,显示用法 // 如果没有参数输入则退出!. string output_folder; output_folder = string("D:\\Documents\\faceData\\output"); //读取你的CSV文件路径. string fn_csv = string("D:\\Documents\\faceData\\ORL\\at.txt"); // 2个容器来存放图像数据和对应的标签 vector<Mat> images; vector<int> labels; // 读取数据. 如果文件不合法就会出错 // 输入的文件名已经有了. try { read_csv(fn_csv, images, labels); } catch (cv::Exception& e) { cerr << "Error opening file " << fn_csv << ". Reason: " << e.msg << endl; // 文件有问题,我们啥也做不了了,退出了 exit(1); } // 如果没有读取到足够图片,我们也得退出. if (images.size() <= 1) { string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; CV_Error(Error::StsError, error_message); } // 得到第一张照片的高度. 在下面对图像 // 变形到他们原始大小时需要 int height = images[0].rows; // 下面的几行代码仅仅是从你的数据集中移除最后一张图片 //[gm:自然这里需要根据自己的需要修改,他这里简化了很多问题] Mat testSample = images[images.size() - 1]; int testLabel = labels[labels.size() - 1]; images.pop_back(); labels.pop_back(); // 下面几行创建了一个特征脸模型用于人脸识别, // 通过CSV文件读取的图像和标签训练它。 // T这里是一个完整的PCA变换 //如果你只想保留10个主成分,使用如下代码 //cv::createEigenFaceRecognizer(10); // // 如果你还希望使用置信度阈值来初始化,使用以下语句: // cv::createEigenFaceRecognizer(10, 123.0); // // 如果你使用所有特征并且使用一个阈值,使用以下语句: // cv::createEigenFaceRecognizer(0, 123.0); // Ptr<BasicFaceRecognizer> model = createEigenFaceRecognizer(); model->train(images, labels); // 下面对测试图像进行预测,predictedLabel是预测标签结果 int predictedLabel = model->predict(testSample); // // 还有一种调用方式,可以获取结果同时得到阈值: // int predictedLabel = -1; // double confidence = 0.0; // model->predict(testSample, predictedLabel, confidence); // string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel); cout << result_message << endl; // 这里是如何获取特征脸模型的特征值的例子,使用了getMat方法: Mat eigenvalues = model->getEigenValues(); // 同样可以获取特征向量: Mat W = model->getEigenVectors(); // 得到训练图像的均值向量 Mat mean = model->getMean(); // 显示还是保存: imshow("mean", norm_0_255(mean.reshape(1, images[0].rows))); imwrite(format("%s/mean.png", output_folder.c_str()), norm_0_255(mean.reshape(1, images[0].rows))); // 显示还是保存特征脸: for (int i = 0; i < min(10, W.cols); i++) { string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at<double>(i)); cout << msg << endl; // 得到第 #i个特征 Mat ev = W.col(i).clone(); //把它变成原始大小,为了把数据显示归一化到0~255. Mat grayscale = norm_0_255(ev.reshape(1, height)); // 使用伪彩色来显示结果,为了更好的感受. Mat cgrayscale; applyColorMap(grayscale, cgrayscale, COLORMAP_JET); // 显示或者保存: imshow(format("eigenface_%d", i), cgrayscale); imwrite(format("%s/eigenface_%d.png", output_folder.c_str(), i), norm_0_255(cgrayscale)); } // 在一些预测过程中,显示还是保存重建后的图像: for (int num_components = 10; num_components <300; num_components += 15) { // 从模型中的特征向量截取一部分 Mat evs = Mat(W, Range::all(), Range(0, num_components)); Mat projection = LDA::subspaceProject(evs, mean, images[0].reshape(1, 1)); Mat reconstruction = LDA::subspaceReconstruct(evs, mean, projection); // 归一化结果,为了显示: reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows)); // 显示或者保存: imshow(format("eigenface_reconstruction_%d", num_components), reconstruction); imwrite(format("%s/eigenface_reconstruction_%d.png", output_folder.c_str(), num_components), reconstruction); } // 如果我们不是存放到文件中,就显示他,这里使用了暂定等待键盘输入: waitKey(0); return 0; }
子网1中的PCa和子网2中的PCb 怎么建立网络连接,相互通信?
子网1中的PCa和子网2中的PCb 怎么建立网络连接,相互通信?而且真心不明白编程socket通信上是怎么解决这个问题的。
主成分分析降维会影响到机器学习的精度么?
![图片说明](https://img-ask.csdn.net/upload/201907/18/1563440089_697335.png) 我使用五种方法同时对原始数据和主成分分析PCA处理之后的数据进行分析,并且进行回判和预测,发现SVM和神经网络前后变化不大,但是XGBoost、AdaBoost以及Bayes的成功率反而有所降低,请问是不是因为这几个方法不适合主成分分析降维?
交叉验证获取最佳决策树深度报错
代码如下: ``` def best_depth_decision(d): lr2 = DecisionTreeRegressor(max_depth=d) kfold_depth = KFold(n_splits=10,random_state=1).split(x_train_pca,y_train) mse_kfold_test = [] mse_kfold_train = [] for k, (train, test) in enumerate(kfold_depth): lr2.fit(x_train_pca[train],y_train[train]) y_test_pred2 = lr2.predict(x_train_pca[test]) y_train_pred2 = lr2.predict(x_train_pca[train]) s_train = mean_squared_error(y_train[train],y_train_pred2) s_test = mean_squared_error(y_train[test],y_test_pred2) mse_kfold_test = np.mean(mse_kfold_test.append(s_test)) mse_kfold_train = np.mean(mse_kfold_train.append(s_train)) return (mse_kfold_train,mse_kfold_test) depths = np.arange(1,31) scores2 = [best_depth_decision(d) for d in depths] train_mse = [s[0] for s in scores2] test_mse = [s[1] for s in scores2] train_best_index2 = np.argmin(train_mse) test_best_index2 = np.argmin(test_mse) plt.plot(depths,test_mse) plt.show() ``` 报错如下: ![图片说明](https://img-ask.csdn.net/upload/201906/19/1560949296_73209.jpg)
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问