颜色空间
RGB
红绿蓝三个通道。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开
YUV
在 YUV空间中,每一个颜色有一个亮度信号 Y,和两个色度信号 U 和V。将亮度和色度分开,就可以再不影响颜色的情况下改变亮度强度。
Y = 0.299 R + 0.587 G + 0.114 B
U = -0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
R = Y + 1.402 (V-128)
G= Y - 0.34414 (U-128) - 0.71414 (V-128)
B= Y + 1.772 (U-128)
YCbCr
Y依然是亮度,Cb 和 Cr 指的是色彩, 其应用领域很广,JPEG MPEG都采用这个格式
Y=0.299R+0.587G+0.114B
Cb=0.564(B-Y)
Cr=0.713(R-Y)
R=Y+1.402Cr
G=Y-0.344Cb-0.714Cr
B=Y+1.772Cb
- YUV 4:4:4采样,每一个Y对应一组UV分量。
- YUV 4:2:2采样,每两个Y共用一组UV分量。
- YUV 4:2:0采样,每四个Y共用一组UV分量
cv2.imread(img_path, flag)
img_L = cv2.imread(img, cv2.IMREAD_UNCHANGED) # BGR or G
# flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE,cv2.IMREAD_UNCHANGED}
# cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代
# cv2.IMREAD_GRAYSCALE:读入灰度图片,可用0作为实参替代
# cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道,可用 - 1
# 作为实参替代
# PS:alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明
[…, 0]
即对最后一维数据的提取,0是下标
b=torch.Tensor([[[[10,2],[4,5],[7,8]],[[1,2],[4,5],[7,8]]]])
print(b.size())
(1, 2, 3, 2)
print(b[…,0])
tensor([[[10., 4., 7.],
[ 1., 4., 7.]]])
print(b[…,0].size())
(1, 2, 3)
print(b[…,2])
Traceback (most recent call last):
File “”, line 1, in
IndexError: index 2 is out of bounds for dimension 3 with size 2
print(b[0,…])
tensor([[[10., 2.],
[ 4., 5.],
[ 7., 8.]],
[[ 1., 2.],
[ 4., 5.],
[ 7., 8.]]])
print(b[0,…].size())
(2, 3, 2)
cv2.imencode()
是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。
img_L = cv2.imread('0122.jpg')
result, encimg = cv2.imencode('.jpg', img_L, [int(cv2.IMWRITE_JPEG_QUALITY), quality_factor])
flags | |
---|
IMWRITE_JPEG_QUALITY Python: cv.IMWRITE_JPEG_QUALITY | For JPEG, it can be a quality from 0 to 100 (the higher is the better). Default value is 95. |
cv2.imdecode()
img_L = cv2.imdecode(encimg, 0)
np.newaxis
新增加一个维度
PSNR(Peak Signal-to-Noise Ratio) 峰值信噪比
方差定义为:
M
S
E
=
1
m
n
∑
i
=
0
m
?
1
∑
j
=
0
n
?
1
∥
I
(
i
,
j
)
?
K
(
i
,
j
)
∥
2
M S E=\frac{1}{m n} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1}\|I(i, j)-K(i, j)\|^{2}
MSE=mn1?i=0∑m?1?j=0∑n?1?∥I(i,j)?K(i,j)∥2 峰值信噪比定义为:
P
S
N
R
=
10
?
log
?
10
(
M
A
X
I
2
M
S
E
)
=
20
?
log
?
10
(
M
A
X
I
M
S
E
)
P S N R=10 \cdot \log _{10}\left(\frac{M A X_{I}^{2}}{M S E}\right)=20 \cdot \log _{10}\left(\frac{M A X_{I}}{\sqrt{M S E}}\right)
PSNR=10?log10?(MSEMAXI2??)=20?log10?(MSE
?MAXI??) 一般地,针对 uint8 数据,最大像素值为 255,;针对浮点型数据,最大像素值为 1。
上面是针对灰度图像的计算方法,如果是彩色图像,通常有三种方法来计算。
- 分别计算 RGB 三个通道的 PSNR,然后取平均值。
- 计算 RGB 三通道的 MSE ,然后再除以 3 。
- 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。
SSIM (Structural SIMilarity) 结构相似性
SSIM公式基于样本x和y之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。
l
(
x
,
y
)
=
2
μ
x
μ
y
+
c
1
μ
x
2
+
μ
y
2
+
c
1
c
(
x
,
y
)
=
2
σ
x
σ
y
+
c
2
σ
x
2
+
σ
y
2
+
c
2
s
(
x
,
y
)
=
σ
x
y
+
c
3
σ
x
σ
y
+
c
3
l(x, y)=\frac{2 \mu_{x} \mu_{y}+c_{1}}{\mu_{x}^{2}+\mu_{y}^{2}+c_{1}} c(x, y)=\frac{2 \sigma_{x} \sigma_{y}+c_{2}}{\sigma_{x}^{2}+\sigma_{y}^{2}+c_{2}} s(x, y)=\frac{\sigma_{x y}+c_{3}}{\sigma_{x} \sigma_{y}+c_{3}}
l(x,y)=μx2?+μy2?+c1?2μx?μy?+c1??c(x,y)=σx2?+σy2?+c2?2σx?σy?+c2??s(x,y)=σx?σy?+c3?σxy?+c3?? 一般取
c
3
=
c
2
/
2
c_{3}=c_{2} / 2
c3?=c2?/2 。
-
μ
x
\mu_{x}
μx? 为
x
x
x 的均值
-
μ
y
\mu_{y}
μy? 为
y
y
y 的均值
-
σ
x
2
\sigma_{x}^{2}
σx2? 为
x
x
x 的方差
-
σ
y
2
\sigma_{y}^{2}
σy2? 为
y
y
y 的方差
-
σ
x
y
\sigma_{x y}
σxy? 为
x
x
x 和
y
y
y 的协方差
-
c
1
=
(
k
1
L
)
2
,
c
2
=
(
k
2
L
)
2
c_{1}=\left(k_{1} L\right)^{2}, c_{2}=\left(k_{2} L\right)^{2}
c1?=(k1?L)2,c2?=(k2?L)2 为两个常数, 避免除零
-
L
L
L 为像素值的范围,
2
B
?
1
2^{B}-1
2B?1
-
k
1
=
0.01
,
k
2
=
0.03
k_{1}=0.01, k_{2}=0.03
k1?=0.01,k2?=0.03 为默认值
S
S
I
M
(
x
,
y
)
=
[
l
(
x
,
y
)
α
?
c
(
x
,
y
)
β
?
s
(
x
,
y
)
γ
]
S S I M(x, y)=\left[l(x, y)^{\alpha} \cdot c(x, y)^{\beta} \cdot s(x, y)^{\gamma}\right]
SSIM(x,y)=[l(x,y)α?c(x,y)β?s(x,y)γ] 将
α
,
β
,
γ
\alpha, \beta, \gamma
α,β,γ 设为 1, 可以得到
S
S
I
M
(
x
,
y
)
=
(
2
μ
x
μ
y
+
c
1
)
(
2
σ
x
y
+
c
2
)
(
μ
x
2
+
μ
y
2
+
c
1
)
(
σ
x
2
+
σ
y
2
+
c
2
)
S S I M(x, y)=\frac{\left(2 \mu_{x} \mu_{y}+c_{1}\right)\left(2 \sigma_{x y}+c_{2}\right)}{\left(\mu_{x}^{2}+\mu_{y}^{2}+c_{1}\right)\left(\sigma_{x}^{2}+\sigma_{y}^{2}+c_{2}\right)}
SSIM(x,y)=(μx2?+μy2?+c1?)(σx2?+σy2?+c2?)(2μx?μy?+c1?)(2σxy?+c2?)?
|