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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
python自动zip压缩目录的方法
Jun 28 Python
spyder常用快捷键(分享)
Jul 19 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
python清除字符串中间空格的实例讲解
May 11 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
django 模型字段设置默认值代码
Jul 15 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
opencv实现图像几何变换
Mar 24 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
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
PHP7新功能总结
2019/04/14 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
javascript整除实现代码
2010/11/23 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
JQuery查找DOM节点的方法
2015/06/11 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
python常见排序算法基础教程
2017/04/13 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
Java及python正则表达式详解
2017/12/27 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
python实现画图工具
2020/08/27 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
七年级历史教学反思
2014/02/05 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
服装设计师求职信
2014/06/04 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技