Python NumPy灰度图像的压缩原理讲解


Posted in Python onAugust 04, 2021

灰度图像是对图像的颜色进行变换,如果要对图像进行压缩该怎么处理呢?

1、矩阵运算中有一个概念叫做奇异值和特征值。

设A为n阶矩阵,若存在常数λ及n维非零向量x,使得Ax=λx,则称λ是矩阵A的特征值,x是A属于特征值λ的特征向量。

一个矩阵的一组特征向量是一组正交向量。

2、即特征向量被施以线性变换 A 只会使向量伸长或缩短而其方向不被改变。

特征分解(Eigendecomposition),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。

假如A是m * n阶矩阵,q=min(m,n),A*A的q个非负特征值的算术平方根叫作A的奇异值。

特征值分解可以方便的提取矩阵的特征,但是前提是这个矩阵是一个方阵。如果是非方阵的情况下,就需要用到奇异值分解了。先看下奇异值分解的定义:

A=UΣVT

其中A是目标要分解的m * n的矩阵,U是一个 m * m的方阵,Σ 是一个m * n 的矩阵,其非对角线上的元素都是0。VTV^TVT是V的转置,也是一个n * n的矩阵。

奇异值跟特征值类似,在矩阵Σ中也是从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵。r是一个远小于m、n的数,这样就可以进行压缩矩阵。

通过奇异值分解,我们可以通过更加少量的数据来近似替代原矩阵。

要想使用奇异值分解svd可以直接调用linalg.svd 如下所示:

U, s, Vt = linalg.svd(img_gray)

其中U是一个m * m矩阵,Vt是一个n * n矩阵。

在上述的图像中,U是一个(80, 80)的矩阵,而Vt是一个(170, 170) 的矩阵。而s是一个80的数组,s包含了img中的奇异值。

实例代码扩展:

import numpy as np

import matplotlib.pyplot as plt

from PIL import Image
from scipy import misc
def fix_contrast(image):
minimumColor = np.amin(image)
maximumColor = np.amax(image)

#avg = (minimumColor - maximumColor)/2 first attempt

avg = np.mean(image) #second attempt
colorDownMatrix = image < avg # also tried
colorUpMatrix = image > avg

#also tried: colorUpMatrix = image > avg * 1.2
# and : colorDownMatrix = image < avg* 0.3
image = image - minimumColor*colorDownMatrix
image = image + maximumColor*colorUpMatrix
lessThen0 = image<0
moreThen255 = image>255
image[lessThen0] = 0
image[moreThen255] = 255
return image

到此这篇关于Python NumPy灰度图像的压缩原理讲解的文章就介绍到这了,更多相关Python NumPy灰度图像的压缩内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
pandas 透视表中文字段排序方法
Nov 16 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
python神经网络编程实现手写数字识别
May 27 Python
python定时截屏实现
Nov 02 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 Python
Python内置数据结构列表与元组示例详解
Python制作动态字符画的源码
Aug 04 #Python
Python进行区间取值案例讲解
Aug 02 #Python
Python获取江苏疫情实时数据及爬虫分析
Django对接elasticsearch实现全文检索的示例代码
Aug 02 #Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 #Python
python数字转对应中文的方法总结
Aug 02 #Python
You might like
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
Javascript之String对象详解
2016/06/08 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
使用python生成目录树
2018/03/29 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
资产经营总监岗位职责
2013/12/04 职场文书
教师评优事迹材料
2014/01/10 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
2014年新生军训方案
2014/05/01 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
付款证明格式范文
2015/06/19 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
社区结对共建协议书
2016/03/23 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers