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中的descriptor描述器简明使用指南
Jun 02 Python
Python爬取网易云音乐热门评论
Mar 31 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
Python面向对象类继承和组合实例分析
May 28 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
Python编写打字训练小程序
Sep 26 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
python实现暗通道去雾算法的示例
Sep 27 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
名片管理系统python版
2018/01/11 Python
python如何让类支持比较运算
2018/03/20 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
浙大网新C/C++面试解惑
2015/05/27 面试题
求职简历推荐信范文
2013/12/02 职场文书
电子信息工程专业推荐信
2014/02/14 职场文书
表决心的诗句大全
2014/03/11 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
出纳试用期自我评价
2015/03/10 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python