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 socket C/S结构的聊天室应用实现
Nov 30 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
使用Python的Twisted框架实现一个简单的服务器
Apr 16 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
聊聊Python中的pypy
Jan 12 Python
Python中IP地址处理IPy模块的方法
Aug 16 Python
python多进程(加入进程池)操作常见案例
Oct 21 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
python:解析requests返回的response(json格式)说明
Apr 30 Python
python如何利用Mitmproxy抓包
Oct 10 Python
用Python创建简易网站图文教程
Jun 11 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
PHP微信支付实例解析
2016/07/22 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
node跨域请求方法小结
2017/08/25 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
Python断言assert的用法代码解析
2018/02/03 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
一组SQL面试题
2016/02/15 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
家长会学生家长演讲稿
2013/12/29 职场文书
经济管理专业自荐信
2013/12/30 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
浅谈Python数学建模之固定费用问题
2021/06/23 Python
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers