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开发编码规范
Sep 08 Python
在Django的视图中使用form对象的方法
Jul 18 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
Python实现查看系统启动项功能示例
May 10 Python
Python后台开发Django会话控制的实现
Apr 15 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
Python 依赖库太多了该如何管理
Nov 08 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
Python django框架 web端视频加密的实例详解
Nov 20 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 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访问查询mysql数据的三种方法
2006/10/09 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
python实现分页效果
2017/10/25 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
python datetime处理时间小结
2020/04/16 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
企业优秀员工事迹材料
2014/05/28 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
办理信用卡工作证明
2014/09/30 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
最新最全的手机号验证正则表达式
2022/02/24 Javascript
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis