Python NumPy灰度图像的压缩原理讲解

 更新时间:2021年08月03日 08:19:14   作者:小妮浅浅  
在本篇文章里小编给大家整理的是一篇关于Python NumPy灰度图像的压缩原理讲解内容,有兴趣的朋友们可以学习参考下。

灰度图像是对图像的颜色进行变换,如果要对图像进行压缩该怎么处理呢?

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中 whl包、tar.gz包的区别详解

    Python中 whl包、tar.gz包的区别详解

    whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件,这篇文章主要介绍了Python中 whl包、tar.gz包的区别,需要的朋友可以参考下
    2022-08-08
  • Python返回数组/List长度的实例

    Python返回数组/List长度的实例

    今天小编就为大家分享一篇Python返回数组/List长度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python接口自动化浅析pymysql数据库操作流程

    Python接口自动化浅析pymysql数据库操作流程

    本文主要介绍pymysql安装、操作流程、语法基础及封装操作数据库类,需要的朋友可以参考下,希望能对大家有所帮助,每日提升一点点,欢迎大家多多交流讨论
    2021-08-08
  • python灰色预测法的具体使用

    python灰色预测法的具体使用

    灰色系统理论认为对既含有已知信息又含有未知或非确定信息的系统进行预测,本文就介绍了python灰色预测法的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2022-03-03
  • python实现txt文件格式转换为arff格式

    python实现txt文件格式转换为arff格式

    这篇文章主要为大家详细介绍了python实现txt文件格式转换为arff格式的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 在Python中Dataframe通过print输出多行时显示省略号的实例

    在Python中Dataframe通过print输出多行时显示省略号的实例

    今天小编就为大家分享一篇在Python中Dataframe通过print输出多行时显示省略号的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python+PyQt5实现自制pdf工具箱

    Python+PyQt5实现自制pdf工具箱

    这篇文章主要为大家详细介绍了Python如何利用PyQt5自制pdf工具箱,可以实现合并拆分和删除指定pdf页面,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • Selenium元素的常用操作方法分析

    Selenium元素的常用操作方法分析

    这篇文章主要介绍了Selenium元素的常用操作方法,结合实例形式分析Selenium在获取元素之后针对点击、输入、提交、属性获取等常见操作相关实现技巧,需要的朋友可以参考下
    2018-08-08
  • Python编程OpenCV和Numpy图像处理库实现图片去水印

    Python编程OpenCV和Numpy图像处理库实现图片去水印

    这篇文章主要介绍了Python编程中如何实现图片去水印本文采用了OpenCV和Numpy的图像处理的方法来实现,文中附含详细示例代码,有需要的朋友可以借鉴参考下
    2021-09-09
  • 高效使用Python字典的清单

    高效使用Python字典的清单

    字典(dict)对象是 Python 最常用的数据结构,本文给大家介绍使用Python字典的清单,感兴趣的朋友一起看看吧
    2018-04-04

最新评论