阵列与矩阵操作
对于下列两个2 X 2的图像:
[
a
11
a
12
a
21
a
22
]
,
[
b
11
b
12
b
21
b
22
]
\begin{bmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{bmatrix},\quad\begin{bmatrix}b_{11}&b_{12}\\b_{21}&b_{22}\end{bmatrix}
[a11a21a12a22],[b11b21b12b22]
阵列相乘的结果为:
[
a
11
b
11
a
12
b
12
a
21
b
21
a
22
b
22
]
\begin{bmatrix}a_{11}b_{11}&a_{12}b_{12}\\a_{21}b_{21}&a_{22}b_{22}\end{bmatrix}
[a11b11a21b21a12b12a22b22]
矩阵相乘的结果为:
[
a
11
b
11
+
a
12
b
21
a
11
b
12
+
a
12
b
22
a
21
b
21
+
a
22
b
21
a
22
b
22
+
a
22
b
22
]
\begin{bmatrix}a_{11}b_{11}+a_{12}b_{21}&a_{11}b_{12}+a_{12}b_{22}\\a_{21}b_{21}+a_{22}b_{21}&a_{22}b_{22}+a_{22}b_{22}\end{bmatrix}
[a11b11+a12b21a21b21+a22b21a11b12+a12b22a22b22+a22b22]
线性操作与非线性操作
设操作
H
H
H和两个图像
f
(
x
,
y
)
f(x,y)
f(x,y)和
g
(
x
,
y
)
g(x,y)
g(x,y), 如果对于任意常数
a
1
a_1
a1和
a
2
a_2
a2:
H
[
a
1
f
(
x
,
y
)
+
a
2
g
(
x
,
y
)
]
=
a
1
H
⋅
f
(
x
,
y
)
+
a
2
H
⋅
g
(
x
,
y
)
H[a_1f(x,y)+a_2g(x,y)]=a_1H·f(x,y)+a_2H·g(x,y)
H[a1f(x,y)+a2g(x,y)]=a1H⋅f(x,y)+a2H⋅g(x,y)
成立,那么称
H
H
H是线性操作,否则,称为非线性操作。
线性操作满足两个法则:
- 比例性/同质性:若 y = f ( x ) , y=f(x), y=f(x),对于任意 a a a,都有 a ⋅ y = f ( a ⋅ x ) a·y=f(a·x) a⋅y=f(a⋅x)
- 叠加性:若 y 1 = f ( x 1 ) , y 2 = f ( x 2 ) y_1=f(x_1),y_2=f(x_2) y1=f(x1),y2=f(x2),则有 y 1 + y 2 = f ( x 1 + x 2 ) y_1+y_2=f(x_1+x_2) y1+y2=f(x1+x2)
比如, y = x y=x y=x为线性操作, y = x + 1 y=x+1 y=x+1为非线性操作。
邻域操作
邻域一般是一个远小于图像尺寸、形状规则的像素块,例如𝟐 × 𝟐 、𝟑 × 𝟑的正方形。
假定
S
x
y
S_{xy}
Sxy代表代表图像 𝒇 中以(𝒙, 𝒚)为中心的一个邻域坐标集,邻域
处理在输出图像 𝒈 的相同坐标处生成一个相应的像素,该像素的值由输入图像中坐标
S
x
y
S_{xy}
Sxy内的像素经指定操作决定。例如,求均值:
g
(
x
,
y
)
=
1
m
n
∑
(
r
,
c
)
∈
S
x
y
f
(
r
,
c
)
g(x,y)=\frac{1}{mn}\sum_{(r,c)\in S_{xy}}f(r,c)
g(x,y)=mn1(r,c)∈Sxy∑f(r,c)
其中,
m
n
mn
mn为邻域大小,
(
r
,
c
)
(r,c)
(r,c)为像素坐标
练习
- 编写Python程序,对图像进行加、减、乘、除操作.
'''
Description:
Author: Weijian Ma
Date: 2020-09-23 20:29:46
LastEditTime: 2020-09-23 22:38:06
LastEditors: Weijian Ma
'''
import cv2 as cv
img01 = cv.imread("1.png")
img02 = cv.imread("2.png")
img02=cv.resize(img02,(img01.shape[1],img01.shape[0]),interpolation=cv.INTER_CUBIC)
print(img01.shape)
print(img02.shape)
## 加
imgOfAdd = cv.add(img01, img02)
## 减
imgOfSub = cv.subtract(img01, img02)
## 乘
imgOfMul = cv.multiply(img01, img02)
## 除
imgOfDiv = cv.divide(img01, img02)
## 显示图像
cv.imshow("resource1", img01)
cv.imshow("resource2", img02)
cv.imshow("Add", imgOfAdd)
cv.imshow("Sub", imgOfSub)
cv.imshow("Mul", imgOfMul)
cv.imshow("Div", imgOfDiv)
cv.waitKey(0)
cv.destroyAllWindows()
结果: