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中list列表的高级函数
May 17 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
python3利用Socket实现通信的方法示例
May 06 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
Python装饰器如何实现修复过程解析
Sep 05 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
Python实现分段线性插值
2018/12/17 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
一些Solaris面试题
2013/03/22 面试题
最新奶茶店创业计划书范文
2014/02/08 职场文书
保护黄河倡议书
2014/05/16 职场文书
环保小标语
2014/06/13 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS