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 help()函数用法详解
Mar 11 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
Python序列化与反序列化pickle用法实例
Nov 11 Python
对python中assert、isinstance的用法详解
Nov 27 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
pycharm 关掉syntax检查操作
Jun 09 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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+DBM的同学录程序(3)
2006/10/09 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python处理JSON数据并生成条形图
2016/08/05 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python 内置函数汇总详解
2019/09/16 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
Python远程linux执行命令实现
2020/11/11 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
火车来了教学反思
2014/02/11 职场文书
大学班级文化建设方案
2014/05/06 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL