计算机视觉:基于Numpy的图像处理技术(二):图像主成分分析(PCA)

news2024/11/15 5:52:37

计算机视觉:基于Numpy的图像处理技术(二):图像主成分分析🏳️‍🌈

文章目录

  • 计算机视觉:基于Numpy的图像处理技术(二):图像主成分分析:rainbow_flag:
    • 图像主成分分析:m:
      • 1、概念:orange_book:
      • 2、原理:page_facing_up:
      • 3、步骤:paw_prints:
        • 1、数据中心化:减去每一维数据的均值
        • 2、求特征协方差矩阵
        • 3、计算协方差矩阵对应最大特征值的特征向量
        • 4、根据阈值*t*,计算方差贡献率,确定要返回特征向量个数K
      • 4、代码实现:snake:

演示图片如图,又是机甲“小花”

hua

图像主成分分析Ⓜ️

1、概念📙

主成分分析(PCA)是一个有用的降维方法。可以在使用尽可能少数维度下,尽可能多地保持数据的信息。我们知道小花是一副图像,具有很高的维数。在许多计算机视觉应用里,都会使用降维操作。

Numpy类库中的 flatten()方法可将图像转换成一维向量。
x ⃗ = { x 1 , x 2 , … , x n } \vec x = {\lbrace x_{1},x_{2},\dots,x_n\rbrace} x ={x1,x2,,xn}

2、原理📄

主成分分析希望能够通过旋转坐标系将数据在新的坐标系下表示,如果新的坐标系下某些轴包含的信息太少,则可以将其省略,从而达到降维的目的。

3、步骤🐾

有一组数据:可以理解为一副图像的灰度图,由多个行向量组成的矩阵。确定主成分个数的阈值t,一般选择80%左右,后续做判断使用。
z ⃗ = { z ⃗ 1 , z ⃗ 2 , … , z ⃗ n } \vec z = {\lbrace \vec z_{1},\vec z_{2},\dots,\vec z_n\rbrace} z ={z 1,z 2,,z n}

1、数据中心化:减去每一维数据的均值

均值为:

μ ⃗ = 1 n ∑ i = 1 n z ⃗ i \vec \mu= \frac{1}{n} \sum_{i=1}^{n} \vec z_{i} μ =n1i=1nz i

将其中心化后表示为:
x ⃗ = { x ⃗ 1 , x ⃗ 2 , … , x ⃗ n } = { z ⃗ 1 − μ ⃗ , z ⃗ 2 − μ ⃗ , … , z ⃗ n − μ ⃗ } \vec x = {\lbrace \vec x_{1},\vec x_{2},\dots,\vec x_n\rbrace} ={\lbrace \vec z_{1}-\vec \mu,\vec z_{2}-\vec \mu,\dots,\vec z_n- \vec \mu\rbrace} x ={x 1,x 2,,x n}={z 1μ ,z 2μ ,,z nμ }

2、求特征协方差矩阵

M ( c o v ) = x ⃗ x ⃗ T M(cov) =\vec x \vec x^T M(cov)=x x T

3、计算协方差矩阵对应最大特征值的特征向量

将特征值从大到小排列,得到n个特征值
λ 1 , λ 2 , … , λ n \lambda_1,\lambda_2, \dots,\lambda_n λ1,λ2,,λn
其对应的特征向量:
A = a ⃗ 1 , a ⃗ 2 , … , a ⃗ n A = \vec a_1,\vec a_2, \dots,\vec a_n A=a 1,a 2,,a n

4、根据阈值t,计算方差贡献率,确定要返回特征向量个数K

K = a r g m a x ∑ i = 1 k λ i ∑ j = 1 n λ j ≥ t K=arg max \frac{\sum_{i=1}^k \lambda_i}{\sum_{j=1}^{n} \lambda_j} \ge t K=argmaxj=1nλji=1kλit

R ⃗ = A T z ⃗ \vec R = A^T\vec z R =ATz

4、代码实现🐍

对小花图像进行PCA,求出其特征向量、投影矩阵、方差和均值

from PIL import Image
import numpy as np


def pca(X):
    """主成分分析
    输入:矩阵X,存储训练数据,每一行为一条数据
    返回:投影矩阵(按维度重要性排序的)方差和均值
    """
    # 获取维数
    num_data ,dim = X.shape
    # print(num_data,dim)
    # 数据中心化(减去每一维的均值)
    mean_X = X.mean(axis = 0)
    X = X -mean_X
    if dim > num_data:
        # 使用紧致技巧
        # 协方差矩阵
        # M = np.dot(X,X.T)
        M = np.cov(X,rowvar=True)
        # 特征值和特征向量
        e,EV = np.linalg.eigh(M)
        # print(E,EV)
        # 紧致技巧
        tmp = np.dot(X.T,EV).T
        V = tmp[::-1]
        #求平方根需要求其绝对值
        S = np.sqrt(np.abs(e))[::-1]
        for i in range(V.shape[1]):
            V[:,i] /= S
        print("投影矩阵",V)
        print('特征向量',EV)
        return V, S, mean_X
    else:
        # 使用SVD方法
        U,S,V = np.linalg.svd(X)
        # 返回前num_data维的数据
        V = V[:num_data]
        # 返回投影矩阵,方差和均值
        print("投影矩阵",V)
        return V,S,mean_X

hua = np.array(Image.open('hua.jpg').convert('L'))
pca(hua)

小花这里没有使用SVD方法,因为她的长是大于宽的,所以采用了PCA降维,输出的投影矩阵特征向量如下:

投影矩阵 [[ 8.03605309e-02  8.39756720e-02  9.83425336e-02 ... -9.76770092e-02
  -1.07195860e-01 -6.24628102e-02]
 [ 3.86431783e-01  3.65459420e-01  3.48954567e-01 ...  1.78539067e-01
   1.60010909e-01  9.88472061e-02]
 [ 4.35651716e-01  4.36100201e-01  3.93508064e-01 ...  1.17824688e-01
   1.39685140e-01  1.07992053e-01]
 ...
 [ 2.01307349e+00  8.67143722e-01 -1.67130144e-01 ...  1.31632783e-01
  -1.57440711e+00 -1.57331512e+00]
 [-7.05993726e-01  7.58672673e-01 -2.56566104e+00 ... -1.32999335e+00
  -4.83894676e-01 -5.13382909e-01]
 [ 6.00337969e-06  1.40041622e-05  7.53382818e-06 ... -1.04562028e-05
  -1.44956931e-05 -1.41024684e-05]]
特征向量 [[ 0.05538488 -0.00144137 -0.03434008 ... -0.05946286  0.00335706
  -0.00604234]
 [ 0.05538488 -0.01475328  0.04735503 ... -0.05991643  0.00076363
  -0.00695584]
 [ 0.05538488  0.01067808 -0.01482254 ... -0.05387841  0.00558545
  -0.00799025]
 ...
 [ 0.05538488  0.006086   -0.01555427 ... -0.04001481 -0.04895945
   0.02703765]
 [ 0.05538488 -0.01572941  0.01562869 ... -0.04218723 -0.04845806
   0.02248818]
 [ 0.05538488  0.00939665 -0.00982804 ... -0.04250774 -0.04824829
   0.01907884]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业数据泄漏事件频发,如何防止企业数据泄漏?

2022年即将接近尾声,这一年受疫情和国际经济形势影响,各行各业都不太好过,同样互联网领域发展不平衡、规则不健全、秩序不合理等问题日益凸显,虽然互联网的快速发展为企业数字化转型提供了支撑,但是互联网发展进程中“…

Android App开发动画特效之利用滚动器实现平滑翻页(附源码和演示 简单易懂)

需要图片集请点赞关注收藏后评论区留言~~~ 一、利用滚动器实现平滑翻页 在日常生活中,平移动画比较常见,有时也被称为位移动画,左右翻页和上下滚动其实都用到了平移动画,譬如平滑翻书的动画效果,就是位移动画的一种应…

BHQ-3 amine,1661064-89-6可在430nm至730nm范围内猝灭所有普通荧光团

英文名称:BHQ-3 amine CAS:1661064-89-6 外观:深紫色粉末 分子式:C32H36N7 分子量:518.69 储存条件:-20C,避光避湿 结构式: 凯新生物产品简介:干燥的寡核苷酸在环境…

如今传统企业如何做数字化转型?

如今传统企业如何做数字化转型? 传统企业的数字化转型,也分为大型企业和中小企业,二者的侧重是十分不同的! 大型传统企业数字化转型的侧重点是—— 如何利用新一代信息技术,整合其现有技术和资源优势,在相…

MyBatis的缓存

目录 1.一级缓存 情况一 : 不同的SqlSession对应不同的一级缓存 情况二 : 同一个SqlSession但是查询条件不同 情况三 : 同一个SqlSession两次查询期间执行了任何一次增删改操作 情况四 : 同一个SqlSession两次查询期间手动清空了缓存 2.二级缓存 2.1二级缓存的相关配置 3.MyBa…

内网渗透神器CobaltStrike之会话管理(五)

CS之间派生会话 将CS1管理的会话派生至CS2中, 简单来说就是将CS1服务器的肉鸡送给CS2服务器 准备环境 主机描述Kali(192.168.47.134)CS TeamServer1Kali2(192.168.47.144)CS TeamServer2Windows7(192.168.47.133)CS客户端,攻击机Windows7(192.168.47.141)受害机操作步骤 首先…

详解:MySQL自增ID与UUID的优缺点及选择建议,MySQL有序uuid与自定义函数实现

文章目录1.自增ID的优缺点1.1 优点1.2 缺点1.3 不适合以自增ID主键作为主键的情况2.UUID作为主键2.1 介绍2.2 优点2.3 缺点3.有序UUID作为主键3.1 介绍3.2 演示使用3.2.1 前提知识3.2.1.1 数据类型 - binary3.2.1.2 函数 - hex()3.2.1.3 函数 - unhex()3.2.2 数据库层3.2.3 JAV…

web自动化测试(java+seleium)环境安装

目录0、应用1、linux安装1.1 安装chromium1.2 安装chromedriver1.3 安装xvfb2、java maven依赖selenium依赖3、入门案例0、应用 前一段时间,需要实现一个模拟页面操作的功能,去检测程序运行是否稳定,因此就用到了web自动化检测的功能。 1、实…

Centos8安装部署JumpServer堡垒机

1:安装支持在线安装和离线安装,我们选择在线安装一键部署。安装需要的环境要求。 OS/ArchArchitectureLinux KernelSoft Requirementlinux/amd64x86_64> 4.0wget curl tar gettext iptables pythonlinux/arm64aarch64> 4.0wget curl tar gettext …

highcharts 堆积图

参考 多坐标轴混合图 | JShare 使用 js资源 https://cdn.highcharts.com.cn/10.2.1/highcharts.js https://cdn.highcharts.com.cn/10.2.1/modules/exporting.js https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js 效果 js 引用 <script src"https…

【网页设计】期末大作业html+css(体育网站)--杜丹特篮球介绍8页 带报告

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园篮球网页设计 | 足球体育运动 | 体育游泳运动 | 兵乓球 | 网球 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&…

代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树

目录 343. 整数拆分 思路 整数拆分 96.不同的二叉搜索树 思路 不同的二叉搜索树 343. 整数拆分 题目链接&#xff1a;力扣 思路 动态规划的题目虽然说是要先确定dp数组的含义&#xff0c;再确定递归公式&#xff0c;但是总感觉这两者是相辅相成的&#xff0c;是一起出来的&…

[附源码]java毕业设计校园飞毛腿系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【三维点云】2-三维点云表征

文章目录内容概要1 三维数据的获取方式及原理1.1 被动测量单目立体视觉双目立体视觉多目立体视觉1.2 主动测量结构光3D成像TOF 3D成像脉冲法相位法2 三维数据的获取原理立体视觉测量法相机成像模型小孔成像模型&#xff08;相机成像模型的理想情况&#xff09;单目立体视觉聚焦…

[附源码]计算机毕业设计JAVA基于web的球类体育馆预定系统

[附源码]计算机毕业设计JAVA基于web的球类体育馆预定系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

SPARKSQL3.0-SessionState构建源码剖析

一、介绍 Apache Spark 2.0引入了SparkSession&#xff0c;其目的是为用户提供了一个统一的切入点来使用Spark的各项功能&#xff0c;不再需要显式地创建SparkConf, SparkContext 以及 SQLContext&#xff0c;因为这些对象已经封装在SparkSession中。此外SparkSession允许用户…

字节跳动提出KVM内核热升级方案,效率提升5.25倍!

背景 作为云计算最重要的底层基础之一&#xff0c;KVM 虚拟化软件在现代的数据中心中应用非常广泛。基于 KVM 的 hypervisor 包括了构成宿主机的软硬件&#xff0c;共同为虚拟机中的应用程序提供高性能的 CPU、内存和 IO 设备等资源。在大规模部署的生产环境中&#xff0c;作为…

周年更名,元宇宙产业委再上新台阶

今天&#xff0c;2022年11月10日&#xff0c;全球元宇宙大会在鹏城隆重举行&#xff0c;这个日子也是中国移动通信联合会元宇宙产业工作委员会成立一周年的日子。会上&#xff0c;我们宣布了这个更名消息&#xff0c;这也是元宇宙产业工作委员会迈上一个新台阶的标志。有20多家…

ES学习笔记

01:REST 指的是客户端和服务器之间的交互在请求之间是无状态的,从客户端到服务器的每个请求都必须包含理解请求所必须的信息,同时在请求之间的任意间隔时间点,若服务器重启,那么客户端是得不到相应的通知的.所以无状态的请求可以由任何可用的服务器回答. 在REST样式的Web服务中…

LeetCode 42.接雨水

这篇记录一下刷接雨水这道题的过程&#xff0c;日后回顾 目录 法1&#xff1a; 法2&#xff1a; 法3&#xff1a; 法4&#xff1a; 法5&#xff1a; 务必掌握123 写这道题要知道雨水怎么算。核心就是要算当前列雨水的高度就要取决于这列左右两侧比自己搞得柱子中较矮的那…