向量
矩阵
1. 矩阵的加减法 A+B = B+A
2. 矩阵的乘法
A*B=矩阵A每一行的列 * 矩阵B每一列的行(需要满足A的列=B的行数 )
3. 单位矩阵
- 单位矩阵n*n,且对角线全是1,其余都为0
- 单位矩阵在矩阵乘法中相当于数字1,记作I
- 逆矩阵
矩阵A的逆矩阵记作A-1,A * A-1 = I
- 奇异矩阵,当ad-bc=0时,|A|没有定义,A-1不存在,A是奇异矩阵
4.矩阵的转置
- 矩阵的转置就是行列互换,用AT表示A的转置矩阵
- 对称矩阵:一个矩阵的转置等于原矩阵
一个矩阵转置和这个矩阵的乘积就是一个对称矩阵
欧式变换
a’ = Ra + t
a:坐标
R:旋转
t:平移
齐次坐标
齐次坐标就是用N+1维来代表N维坐标
(1,2)的齐次坐标可以表示为(1,2,1)。
导数 偏导数
- y = kx + b 直线只有1个斜率,曲线有无数个斜率
- 切线(几何概念)== 斜率(代数概念)
- 求导的过程?x^n’= n x^n-14. 偏导数,多元求导
梯度
梯度和导数是一个意思,梯度是算法里的概念。
梯度下降法
给定区间求极限最小值。
该方法最普通的做法是:在已知参数当前值的情况下,按当前点对应的梯度向量的反方向,并按事先给定好的步长大小,对参数进行调整
梯度下降法存在的问题:
- 参数调整缓慢
- 收敛于局部最小值
数学期望、方差、标准差
- 数学期望(均值):表示一件事平均发生的概率。
- 方差:用来刻画随机变量x和数学期望E(x)之间的偏离程度,记做D(x)。每一个值与总体均值之差平方的平均值。
- 标准差(均方差):标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。
- 正态分布(高斯分布):若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。
μ决定了其位置(中心线),其标准差σ决定了分布的幅度(胖瘦)。
标准正态分布:当μ = 0,σ = 1时的正态分布是标准正态分布 - 熵 entropy : 混乱程度的量度。越有序,熵值越低;越混乱越分散,熵值越高。
不确定性越大,则信息量越大,熵越大
不确定越小,信息量越小,熵越小
图像识别-用梯度下降法找熵值最小的,模型越好。
数字图像
- 像素
(x,y,z)->(r,g,b) (128,0,0)(255,0,0)(128,0,52)(128,89,52) - 通道。
2.1 单通道:只要是单通道的,就是灰度图。二值图里像素在这里插入代码片只有2种,二值图是特殊的灰度图。
2.2 三通道:RGB模式
2.3 四通道:RGBA模式,RGB+透明度a - 作业1:代码:RGB值转化为浮点数&二值化
import numpy as np
import cv2
#方法1:用cv2
image = cv2.imread("../lenna.png")
# print(f'image:{image}')
h,w = image.shape[:2]
GreyImage = np.zeros([h,w],image.dtype)
for i in range(h):
for j in range(w):
B,G,R = image[i,j][0],image[i,j][1],image[i,j][2]
GreyImage[i,j] = int(R*0.3+G*0.59+B*0.11)
# print(GreyImage)
print(GreyImage)
cv2.imshow("rgb",image)
cv2.imshow("grey",GreyImage)
cv2.waitKey(0)
TwoImage = GreyImage
h2, w2 = TwoImage.shape
for i in range(h2):
for j in range(w2):
if TwoImage[i, j] /255 <= 0.5:
TwoImage[i, j] = 0
else:
TwoImage[i, j] = 255 #cv2.imshow只能显示0-255数值
print(TwoImage)
cv2.imshow("two",TwoImage)
cv2.waitKey(0)
-
上采样。放大图像。上采样原理:内插值。主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。可以用最临近插值方法
-
下采样:缩小图像
常用的插值方法
作业2:
- 最临近插值
```python
import cv2
import numpy as np
def function(img): #把原来的图像放大到800*800图像
height,width,channels = img.shape
emptyImage = np.zeros((800,800,channels),np.uint8)
sh = 800/height
sw = 800/width
for i in range(800):
for j in range(800):
x = int(i/sh + 0.5)
y = int(j/sw + 0.5)
emptyImage[i,j] = img[x,y]
return emptyImage
img = cv2.imread("lemon.png")
print(img.shape)
zoom = function(img)
print(zoom)
print(zoom.shape)
cv2.imshow("nearest intert",zoom)
cv2.imshow("image",img)
cv2.waitKey(0)