博客
关于我
PCA降维demo
阅读量:794 次
发布时间:2023-02-26

本文共 2020 字,大约阅读时间需要 6 分钟。

PCA主成分分析(Principal Components Analysis)是一种常用的降维技术,广泛应用于处理高维数据。通过主成分分析,可以有效地减少数据维度,同时保留主要的信息。

在本文中,我们将使用OpenCV框架,通过简单的示例展示PCA的应用。具体步骤如下:

  • 读取输入图片
  • 将彩色图片转换为灰度图片
  • 格式化数据为PCA所需的矩阵格式
  • 应用PCA算法进行降维
  • 展示降维效果
  • 代码示例如下:

    static Mat formatImagesForPCA(const vector
    & data) {
    Mat dst(static_cast
    (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();
    if (src.channels() != 1) {
    CV_Error(CV_StsBadArg, "Only Matrices with one channel are supported");
    }
    Mat dst;
    cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1);
    return dst;
    }
    void main(int argc, char** argv) {
    Mat src1 = imread("F://cha_classification//train//c0.jpg");
    Mat src2 = imread("F://cha_classification//train//c1.jpg");
    Mat src3 = imread("F://cha_classification//train//c2.jpg");
    Mat g1, g2, g3;
    vector
    gray;
    cvtColor(src1, g1, CV_RGB2GRAY);
    gray.push_back(g1);
    cvtColor(src2, g2, CV_RGB2GRAY);
    gray.push_back(g2);
    cvtColor(src3, g3, CV_RGB2GRAY);
    gray.push_back(g3);
    imshow("g1", g1);
    Mat data = formatImagesForPCA(gray);
    PCA pca(data, cv::Mat(), CV_PCA_DATA_AS_ROW, 0.99);
    cout << pca.eigenvalues << endl;
    cout << endl;
    Mat point = pca.project(data.row(0));
    Mat reconstruction = pca.backProject(point);
    reconstruction = reconstruction.reshape(gray[0].channels(), gray[0].rows);
    reconstruction = toGrayscale(reconstruction);
    namedWindow("r", WINDOW_NORMAL);
    imshow("r", reconstruction);
    waitKey(0);
    }

    通过上述代码,可以看到PCA在降维过程中的具体实现。降维后的效果可以通过reconstruction矩阵来观察。主要步骤包括:

    • formatImagesForPCA:将多张图片的行数据转换为矩阵形式。
    • toGrayscale:将彩色图片转换为灰度图片。
    • PCA算法:计算主成分,并降维。
    • 投影与反投影:将原始图片投影到主成分空间,并重新反投影以恢复降维后的图像。

    通过PCA降维,可以显著减少数据维度,同时保留主要的信息。这在图像分类、数据压缩等领域具有重要应用价值。

    转载地址:http://eavfk.baihongyu.com/

    你可能感兴趣的文章
    P1364 医院设置
    查看>>
    P2260 [清华集训2012]模积和
    查看>>
    SpringBoot中集成influxdb-java实现连接并操作Windows上安装配置的influxDB(时序数据库)
    查看>>
    SpringBoot中集成eclipse.paho.client.mqttv3实现mqtt客户端并支持断线重连、线程池高并发改造、存储入库mqsql和redis示例业务流程,附资源下载
    查看>>
    Padding
    查看>>
    paddlehub安装及对口罩检测
    查看>>
    SpringBoot中集成Actuator实现监控系统运行状态
    查看>>
    paddle的两阶段基础算法基础
    查看>>
    Page Object模式:为什么它是Web自动化测试的必备工具
    查看>>
    SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
    查看>>
    PageHelper 解析及实现原理
    查看>>
    pageHelper分页工具的使用
    查看>>
    pageHelper分页技术
    查看>>
    PageHelper分页查询遇到的小问题
    查看>>
    PageHelper实现分页详细版、整合SSM应用
    查看>>
    PageHelper常见问题
    查看>>
    SpringBoot中配置为开发模式,代码修改后不用重新运行
    查看>>
    springboot中pom.xml、application.yml、application.properties
    查看>>
    PageHelper:上手教程(最详细)
    查看>>
    PageOffice如何实现从零开始动态生成图文并茂的Word文档
    查看>>