pca图像压缩python_基于PCA的图像降维及图像重构

1 PCA简述

PCA(Principal Component Analysis)主成分分析算法,在进行图像识别以及高维度数据降维处理中有很强的应用性,算法主要通过计算选择特征值较大的特征向量来对原始数据进行线性变换,不仅可以去除无用的噪声,还能减少计算量。

2算法过程

2.1对所有的样本进行中心化;

数据集的每个样本的不同特征减去所有样本对应特征的均值,处理过的不同特征上的数据均值为0。这样处理的好处是可以减少特征之间的差异性,可以使得不同的特征具有相同的尺度,让不同特征对参数的影响程度一致。

2.2计算样本的协方差矩阵(每列代表一个特征,每行代表一个样本)

2.2.1 计算样本矩阵每一列的均值

2.2.2 样本矩阵的每个样本减去对应列的均值

2.2.3 通过以下公式得到协方差矩阵 (m为样本总数)

2.3对协方差矩阵进行特征值分解,得到特征值和特征向量;

2.4取出最大的k个特征值对应的特征向量,组成投影矩阵W;

2.5对样本集中的每一个样本,都乘以投影矩阵W进行转化,得到降维的数据;

3Python代码实例

#encoding:GBK

"""

Created on 2019/09/23 16:19:11

@author: Sirius_xuan

"""

'''

基于PCA的图像降维及重构

'''

import numpy as np

import cv2 as cv

#数据中心化

def Z_centered(dataMat):

rows,cols=dataMat.shape

meanVal = np.mean(dataMat, axis=0) # 按列求均值,即求各个特征的均值

meanVal = np.tile(meanVal,(rows,1))

newdata = dataMat-meanVal

return newdata, meanVal

#协方差矩阵

def Cov(dataMat):

meanVal = np.mean(data,0) #压缩行,返回1*cols矩阵,对各列求均值

meanVal = np.tile(meanVal, (rows,1)) #返回rows行的均值矩阵

Z = dataMat - meanVal

Zcov = (1/(rows-1))*Z.T * Z

return Zcov

#最小化降维造成的损失,确定k

def Percentage2n(eigVals, percentage):

sortArray = np.sort(eigVals) # 升序

sortArray = sortArray[-1::-1] # 逆转,即降序

arraySum = sum(sortArray)

tmpSum = 0

num = 0

for i in sortArray:

tmpSum += i

num += 1

if tmpSum >= arraySum * percentage:

return num

#得到最大的k个特征值和特征向量

def EigDV(covMat, p):

D, V = np.linalg.eig(covMat) # 得到特征值和特征向量

k = Percentage2n(D, p) # 确定k值

print("保留99%信息,降维后的特征个数:"+str(k)+"\n")

eigenvalue = np.argsort(D)

K_eigenValue = eigenvalue[-1:-(k+1):-1]

K_eigenVector = V[:,K_eigenValue]

return K_eigenValue, K_eigenVector

#得到降维后的数据

def getlowDataMat(DataMat, K_eigenVector):

return DataMat * K_eigenVector

#重构数据

def Reconstruction(lowDataMat, K_eigenVector, meanVal):

reconDataMat = lowDataMat * K_eigenVector.T + meanVal

return reconDataMat

#PCA算法

def PCA(data, p):

dataMat = np.float32(np.mat(data))

#数据中心化

dataMat, meanVal = Z_centered(dataMat)

#计算协方差矩阵

#covMat = Cov(dataMat)

covMat = np.cov(dataMat, rowvar=0)

#得到最大的k个特征值和特征向量

D, V = EigDV(covMat, p)

#得到降维后的数据

lowDataMat = getlowDataMat(dataMat, V)

#重构数据

reconDataMat = Reconstruction(lowDataMat, V, meanVal)

return reconDataMat

def main():

imagePath = 'D:/desktop/banana.jpg'

image = cv.imread(imagePath)

image=cv.cvtColor(image,cv.COLOR_BGR2GRAY)

rows,cols=image.shape

print("降维前的特征个数:"+str(cols)+"\n")

print(image)

print('----------------------------------------')

reconImage = PCA(image, 0.99)

reconImage = reconImage.astype(np.uint8)

print(reconImage)

cv.imshow('test',reconImage)

cv.waitKey(0)

cv.destroyAllWindows()

if __name__=='__main__':

main()

4 结果

重构前

重构后

5 总结

不难发现,在保留99%信息的情况下,维度由1000降到了44,这大大减小了图像分类时的计算量,重构前和重构后的特征依然明显,读者也可自行调整percentage参数,体验PCA的效果。

PS:喜欢的读者,欢迎随时评论,觉得受益的话,给博主点个赞吧!!

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

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

相关文章

【知识补充】对称加密、非对称加密、数字签名与DDoS攻击

文章目录一. 对称加密1)知识点2)具体算法1. DES2. 3DES3. AES二. 非对称加密(公钥密码)1)知识点2)具体算法RSA三. 数字签名1)知识点四. DDoS 攻击1)直接 DDos 攻击2)反射…

python导出excel文件数字签名_Python使用RSA+MD5实现数字签名

数字签名主要有防抵赖和防篡改两种功能:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名,二是能确定消息的完整性。作为具体实现,发送报文时,发送方用一个哈希函数(例如MD5、SHA-1、SHA-256…

【LeetCode笔记】76. 最小覆盖子串(字符串、滑动窗口)

文章目录题目描述思路 && 代码二刷最近一直在充电基础知识、维护 leetcode 总结博客 今天继续摸一摸新题目吧~ 题目描述 感觉和 03. 无重复的最长子串 有点像,都是在字符串上用滑动窗口来找子串。并且都是属于那种,解决一次以后&…

python和revit_Revit中Python脚本使用技术训练视频教程

本视频教程是由Lynda机构出品的Revit中Python脚本使用技术训练视频教程,时长:3小时08分,大小:500 MB,MP4高清视频格式,附工程源文件,教程使用软件:Python, Revit, Dynamo Studio&…

【LeetCode笔记】84. 柱状图中最大的矩形(字符串、单调栈)

文章目录题目描述思路 && 代码二刷题目描述 和接雨水有点像,但是具体做法还是有点不同。 思路 && 代码 暴力法只能过 94 / 96 的样例:复杂度O(n^2) & O(1),一个双重循环遍历所有可行矩阵。 这里就直接用 O(n) & O…

毫秒值转换为日期工具_为机器学习准备数据

将数据转化为见解并不是神奇的事情。您必须首先了解您的数据,并使用它来创建驱动操作的报告。如果您的竞争对手使用机器学习和人工智能来自动推动行动,而您却没有,那您​​将处于不利地位。为ML和AI准备好数据涉及将结构化和半结构化数据集组…

【LeetCode笔记】剑指 Offer 55 - II. 平衡二叉树(递归、二叉树)

文章目录题目描述思路 && 代码二刷一脸懵逼,居然没写这道题的题解。。 题目描述 思路 && 代码 思路:平衡二叉树判断公式 左子树满足 右子树满足 左右子树高度差不超过1 /*** Definition for a binary tree node.* public class Tre…

springcloud 网关_Spring Cloud 系列之 Netflix Zuul 服务网关(二)

本篇文章为系列文章,未读第一集的同学请猛戳这里:哈喽沃德先生:Spring Cloud 系列之 Netflix Zuul 服务网关(一)​zhuanlan.zhihu.com本篇文章讲解 Zuul 网关过滤器实现统一鉴权以及网关过滤器异常统一处理。网关过滤器…

【LeetCode笔记】207. 课程表(Java、图、BFS、队列)

文章目录题目描述思路 && 代码二刷题目描述 刷的第一道图相关的题,简直考古要复习一下拓扑、邻接矩阵之类的知识啦 思路 && 代码 前置课程看成入度,后置课程看成出度对于入度,只需要记录有多少即可。对于出度&#xff0c…

python语言浮点数可以不带小数部分吗_python 浮点数四舍五入需要注意的地方

本文主要分享基于python的数据分析三方库pandas,numpy的一次爬坑经历,发现并分析了python语言对于浮点数精度处理不准确的问题,并在最后给出合理的解决方案。如果你也在用python处理数据,建议看一下,毕竟0.1的误差都可…

【LeetCode笔记】399. 除法求值(Java、图)

文章目录题目描述思路 && 代码题目描述 第二道图题,大概是hot100里唯二的图题了。。 思路 && 代码 邻接矩阵存储,g[i][j] 代表 i / j 的值通过已知的表达式,对矩阵进行维护(包括间接得到的值,见注…

python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南

作者介绍:Saurabh.jaju2Saurabh是一名数据科学家和软件工程师,熟练分析各种数据集和开发智能应用程序。他目前正在加州大学伯克利分校攻读信息和数据科学硕士学位,热衷于开发基于数据科学的智能资源管理系统。介绍许多数据科学家经常面对的问…

【LeetCode笔记】406. 根据身高重建队列(Java、偏数学)

文章目录题目描述思路 && 代码二刷题目描述 老阅读题了 ,第一遍看题的时候一脸懵逼但其实代码就6行(嘿嘿) 思路 && 代码 先按照身高降序排,再按照人数升序排(套路题) class Solution…

ssd内部是多个flash一起操作_一键自毁军工级SSD固态硬盘的技术亮点

通过短路方式实现,烧毁时可见明火及冒烟,5秒(时间可调整)防误触发功能,每2秒烧毁一片闪存芯片,独特的反馈电路实时反馈烧毁状态,确保所有闪存全部被烧毁。烧毁后电子盘彻底报废,无法通过任何手段恢复数据。…

【LeetCode笔记】309. 最佳买卖股票时机含冷冻期(Java、动态规划)

文章目录题目描述思路 && 代码二刷题目描述 股票系列!这次加入了冷冻期要素,需要考虑更多的状态 思路 && 代码 每天,都有三个状态:开一个 dp int[n][3] 二维数组主要思路…就是理解几种状态,以及…

sun 些命令可以将服务器设置至ok模式_Python 高手之路:从零开始打造一个Web服务器...

文 | Ruslan Spivak 译 | EarlGrey 推荐 | 编程派公众号(ID:codingpy)有一天,一位女士散步时经过一个工地,看见有三个工人在干活。她问第一个人,“你在做什么?”第一个人有点不高兴,吼道“难道你看不出来我…

css 查看更多_在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)...

/前言/今天小编给大家介绍Scrapy中另外一种选择器,即大家经常听说的CSS选择器。/CSS基础/CSS选择器和Xpath选择器的功能是一致的,都是帮助我们去定位网页结构中的某一个具体的元素,但是在语法表达上有区别。Xpath选择器明明已经可以帮助我们提…

【LeetCode笔记】85. 最大矩形(Java、单调栈)

文章目录题目描述思路 && 代码二刷题目描述 其实是84. 柱状图中最大的矩形的兄弟题目,理解成多个84题,对结果取max即可。 思路 && 代码 一行抽象出一个【柱状图】,分别套到84题的函数里即可时空复杂度:O(n2n…

python常用字符串处理函数_Python第10课:常用的字符串处理函数

Python第10课:常用的字符串处理函数时间 2019-01-17上午10:00主讲 刘培富地点 四楼电教室1.字符的ascii码及其逆运算ord("x") 求ascii码chr(x) 还原字符例如,chr(10)表示回车2.求长度 len("xxx")3.替换 "abcd"…

c4d启动无反应_浙江无填料喷雾式冷却塔

浙江无填料喷雾式冷却塔大容量静压储能设备广泛运用在厂区全热力、城市交通和道路通行中,全循环泵吸式:由高效的系统循环和分区启动两个关键部件组成。其进、出口均采用橡胶隔墙为隔离设施;提供一个保证阀体抗剪力的安全及密封的良好环境&…