线性变换

OpenCV--Python 图像增强

喜你入骨 提交于 2020-01-19 04:01:43
图像增强主要解决由于图像的灰度级范围较小造成的对比度较低的问题,目的就是将输出图像的灰度级放大到指定的程度,使得图像中的细节看起来增加清晰。对比度增强有几种常用的方法,如线性变换、分段线性变换、伽马变换、直方图正规化、直方图均衡化、局部自适应直方图均衡化等。 1.灰度直方图 在讲解图像增强的方法之前先来认识一下灰度直方图,灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。接下来使用程序实现直方图: import cv2 as cv import numpy as np import matplotlib . pyplot as plt def calcGrayHist ( I ) : # 计算灰度直方图 h , w = I . shape [ : 2 ] grayHist = np . zeros ( [ 256 ] , np . uint64 ) for i in range ( h ) : for j in range ( w ) : grayHist [ I [ i ] [ j ] ] += 1 return grayHist img = cv . imread ( "../testImages/4/img1.jpg" , 0 ) grayHist = calcGrayHist ( img ) x = np . arange ( 256 ) #

特征值分解与奇异值分解

佐手、 提交于 2020-01-13 16:50:11
https://www.cnblogs.com/fuleying/p/4466326.html 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。 1. 特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 写成矩阵形式: 这时候λ就被称为特征向量v对应的特征值, 一个矩阵的一组特征向量是一组正交向量 。 2. 特征分解: 特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵, 正交矩阵是可逆的。 Σ = diag(λ 1 , λ 2 , ..., λ n )是一个对角阵,每一个对角线上的元素就是一个特征值。 首先,要明确的是, 一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。   当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向, 我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。 我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是之前说的: 提取这个矩阵最重要的特征。 总结一下,特征值分解可以得到特征值与特征向量,

矩阵论

自古美人都是妖i 提交于 2019-12-28 15:47:50
矩阵论 矩阵论札记. 梁昌洪 . 2014学习概要 文章目录 矩阵论 第1部分 线性基础 第2部分 矩阵代数 第3部分 线性方程组 第4部分 矩阵空间 第5部分 本征问题与二次型 第6部分 矩阵变换 第7部分 矩阵应用 第1部分 线性基础 矩阵3大特点 : 矩阵是线性的 矩阵是离散的 矩阵是代数和几何交融的 行列式 n n n 阶 行列式 D D D 的值为 D = ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋮ a n 1 a n 2 ⋯ a n n ∣ = ∑ t = 0 n ! ( − 1 ) t a 1 p 1 a 2 p 2 ⋯ a n p n D = \left| \begin{matrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & &\vdots \\ a_{n1} & a_{n2} & \cdots &a_{nn} \end{matrix} \right | = \sum_{t=0}^{n!} (-1)^ta_{1p_1}a_{2p_2}\cdots a_{np_n} D = ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ∣ ​ a 1 1 ​ a 2 1 ​ ⋮ a n 1 ​ ​ a 1 2 ​

优雅的线性代数系列一

狂风中的少年 提交于 2019-12-26 09:47:51
 说道线性代数, 我们自然就想到矩阵, 那我们该如何理解矩阵呢? 矩阵与线性变换 若一个变换 \(L\) 满足以下两条性质 \[ \begin{align*} L(\vec v+ \vec w) &= L(\vec v) + L(\vec w) &(1) \text{"可加性"} \\ L(c\vec v) &= c L(\vec v) \quad\quad\ &(2) \text{"成比例"} \end{align*} \] 则称 \(L\) 是线性的. 值得注意的一点时, 线性变换中, 坐标系的原点不动, 即零向量的变换结果还是零向量. 我们来看看矩阵与线性变换的关系 \[ A(v+w) = Av + Aw \Leftrightarrow L(\vec v+ \vec w) = L(\vec v) + L(\vec w)\\ A(cv) = c(Av) \Leftrightarrow L(c\vec v) = c L(\vec v) \] 可以看出矩阵完全满足线性变换的要求, 所以现在你应该将矩阵看做线性变换, 这会给我们理解很多线性问题带来很大的好处. \(\bigstar\) 如果想知道线性变换对于一个输入向量空间有什么影响, 我们只需要知道该线性变换对该输入空间的基有什么影响, 我们就能知道所有信息. 假设 n 维输入空间 \(R^n\) 的基为 \(v1, v_2,

矩阵与行列式的几何意义

旧街凉风 提交于 2019-12-20 02:29:05
作者:童哲 链接:https://www.zhihu.com/question/36966326/answer/70687817 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 行列式这个“怪物”定义初看很奇怪,一堆逆序数什么的让人不免觉得恐惧,但其实它是有实际得不能更实际的物理意义的, 理解只需要三步 。这酸爽~ 1,行列式 是针对一个 的矩阵 而言的。 表示一个 维空间到 维空间的线性变换。那么什么是线性变换呢?无非是一个压缩或拉伸啊。假想原来空间中有一个 维的立方体(随便什么形状),其中立方体内的每一个点都经过这个线性变换,变成 维空间中的一个新立方体。 2,原来立方体有一个体积 ,新的立方体也有一个体积 。 3,行列式 是一个数对不对?这个数其实就是 ,结束了。 就这么简单?没错,就这么简单。 所以说:行列式的本质就是一句话: 行列式就是线性变换的放大率! 理解了行列式的物理意义,很多性质你根本就瞬间理解到忘不了!!!比如这个重要的行列式乘法性质: 道理很简单,因为放大率是相乘的啊~! 你先进行一个 变换,再进行一个 变换,放大两次的放大率,就是式子左边。 你把“先进行 变换,再进行 变换”定义作一个新的变换,叫做“ ”,新变换的放大律就是式子右边。 然后你要问等式两边是否一定相等,我可以明确告诉你:too simple 必须相等。因为其实只是简单的把事实陈述出来了

Transformer之encoder原理

匆匆过客 提交于 2019-12-15 02:49:12
前言 前几天写了一篇关于BERT的博文,里面用到了Transformer的编码器,但是没有具体讲它的原理,所以在这篇文章里做一个补充。本文只阐述编码器encoder的部分,只做一个重点部分流程的概括,具体的最好还是看看原论文,然后关于解码器的部分之后有机会再讲。 encoder原理 我们主要根据下面一张图的流程来讲解 1.首先假设我们有一组input: \(I = (I_1, I_2, ... I_n)\) 经过一个简单的 embedding ,其实就是做一个线性变换 \(\alpha = WI\) 2.然后加入每个token的 position 信息,其实就是直接把两个向量加起来 \(X = P + \alpha\) 3.下面就要进入一个循环体了(灰色框框内),也就是多层encode过程,我们提到过在BERT中有12层的base,也有24层的large。 3.1 第一步要经过一个 multi-head attention ,我们先从简单入手,介绍一个 self-attention 的单个头的情形。在这种最简单的情况下,把X经过三种不同的线性变换 \(W^q, W^k, W^v\) ,得到三个结果分别代表query,key和value,表示为 \(Q = W^qX, K = W^kX, V = W^vX\) 。然后我们将每个Q元素与每个K元素相乘,相当于是一种双向的传播,表示为 \

四、图像增强系列------线性增强

你。 提交于 2019-12-10 03:48:34
文章目录 线性增强基本算法 python实现线性增强基本算法 效果图如下 分段线性变换 python实现分段线性变换 分段线性变换效果图 线性增强统计量算法 线性增强基本算法 python实现线性增强基本算法 import cv2 as cv import numpy as np import matplotlib . pyplot as plt #### 线性增强基本算法 # 绘制直方图函数 def grayHist ( img ) : h , w = img . shape [ : 2 ] pixelSequence = img . reshape ( [ h * w , ] ) numberBins = 256 histogram , bins , patch = plt . hist ( pixelSequence , numberBins , facecolor = 'black' , histtype = 'bar' ) plt . xlabel ( "gray label" ) plt . ylabel ( "number of pixels" ) plt . axis ( [ 0 , 255 , 0 , np . max ( histogram ) ] ) plt . show ( ) img = cv . imread ( "peng.png" , 0 ) ##

宽度学习(Broad Learning System)

坚强是说给别人听的谎言 提交于 2019-12-06 09:50:43
宽度学习(Broad Learning System) 2018-09-27 19:58:01 颹蕭蕭 阅读数 10498 收藏 文章标签: 宽度学习 BL BLS 机器学习 陈俊龙 更多 分类专栏: 机器学习 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/itnerd/article/details/82871734 一、宽度学习的前世今生 宽度学习系统(BLS) 一词的提出源于澳门大学科技学院院长 陈俊龙 和其学生于2018年1月发表在 IEEE TRANSACTIONS ON NEURAL NETWORKS AND LEARNING SYSTEMS,VOL. 29, NO. 1 的一篇文章,题目叫 《Broad Learning System: An Effective and Efficient Incremental Learning System Without the Need for Deep Architecture 》 。文章的主旨十分明显,就是提出了一种可以和深度学习媲美的宽度学习框架。 为什么要提出宽度学习? 众所周知,深度学习中最让人头疼之处在于其数量庞大的待优化参数,通常需要耗费大量的时间和机器资源来进行优化。

均值、方差、协方差、协方差矩阵、特征值、特征向量

末鹿安然 提交于 2019-12-05 17:55:02
均值: 描述的是样本集合的中间点。 方差: 描述的是样本集合的各个样本点到均值的距离之平均,一般是用来描述一维数据的。 协方差: 是一种用来度量两个随机变量关系的统计量。 只能处理二维问题。 计算协方差需要计算均值。 如下式: 方差与协方差的关系 方差是用来度量单个变量 “ 自身变异”大小的总体参数,方差越大表明该变量的变异越大 协方差是用来度量两个变量之间 “协同变异”大小的总体参数,即二个变量相互影响大小的参数,协方差的绝对值越大,则二个变量相互影响越大。 协方差矩阵: 协方差矩阵能处理多维问题; 协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。 协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。 样本矩阵中若每行是一个样本,则每列为一个维度,所以计算协方差时要 按列计算均值 。 如果数据是3维,那么协方差矩阵是: 特征值与 特征向量 线性变化: 线性变换 (线性映射)是在作用于 两个向量空间之间的函数 ,它保持 向量加法和标量乘法 的运算,从一个向量空间变化到另一个向量空间。 实际上线性变换表现出来的就是一个矩阵 。 特征值和特征向量 是一体的概念: 对于一个给定的线性变换(矩阵A),它的特征向量 ξ 经过这个线性变换之后,得到的新向量仍然与原来的 ξ 保持在同一條直線上,但其长度也许會改变。一个特征向量的长度在该线性变换下缩放的比例(λ)称为其特征值