youcans 的 OpenCV 学习课—10. 图像复原与重建
Posted 小白YouCans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了youcans 的 OpenCV 学习课—10. 图像复原与重建相关的知识,希望对你有一定的参考价值。
youcans 的 OpenCV 学习课—10. 图像复原与重建
本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战。
图像复原是对图像退化过程建模,并以图像退化的先验知识来恢复退化的图像。
图像增强是一种主观处理,而图像复原是一种客观处理。
本文提供上述各种算法的完整例程和运行结果。
欢迎关注 『youcans 的 OpenCV 学习课』 系列,持续更新
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
文章目录
- youcans 的 OpenCV 学习课—10. 图像复原与重建
- 1. 图像退化/复原处理模型
- 2. 噪声模型
- 2.1 高斯噪声(Gauss Noise)
- 例程 9.1:高斯噪声(Gauss Noise)
- 2.2 瑞利噪声 (Rayleigh Noise)
- 例程 9.2:瑞利噪声 (Rayleigh Noise)
- 2.3 爱尔兰噪声 (Ireland Noise)
- 例程 9.3:伽马噪声 (Gamma Noise)
- 2.4 指数噪声 (Exponential Noise)
- 例程 9.4:指数噪声 (Exponent Noise)
- 2.5 均匀噪声 (Uniform Noise)
- 例程 9.5:均匀噪声 (Uniform Noise)
- 2.6 椒盐噪声 (Salt-pepper Noise)
- 例程 9.6:椒盐噪声 (Salt-pepper Noise)
- 2.7 图像噪声小结
- 例程 9.7:各种噪声模型的直方图分布
- 在这里插入图片描述
- 3. 仅噪声存在的空间滤波图像复原
- 3.1 算术平均滤波器(Arithmentic mean filter)
- 例程 9.8:算术平均滤波器
- 3.2 几何均值滤波器(Geometric mean filter)
- 例程 9.9:几何均值滤波器
- 3.3 谐波平均滤波器(Harmonic mean filter)
- 例程 9.10:谐波平均滤波器
- 3.4 反谐波平均滤波器(Invert-harmonic mean filter)
- 例程 9.11:反谐波平均滤波器
- 3.5 统计排序滤波器
- 例程 9.12:统计排序滤波器
- 3.6 修正阿尔法均值滤波器(Modified alpha-mean filter)
- 例程 9.13:修正阿尔法均值滤波器
- 3.7 自适应局部降噪滤波器
- 例程 9.14:自适应局部降噪滤波器
- 3.8 自适应中值滤波器(Adaptive median filter)
- 例程 9.15:自适应中值滤波器
- 4. 频率域滤波图像复原
- 5. 估计退化函数
- 6. 退化图像复原
- 7. 投影重建图像
1. 图像退化/复原处理模型
1.1 图像退化模型
图像退化:
图像退化是指图像在形成、记录、处理和传输过程中,由于 成像系统、记录设备、传输介质和处理方法的不完善,导致图像质量下降。
把图像退化表示为退化算子 H \\mathcalH H,退化算子与一个加性噪声项 η ( x , y ) \\eta (x,y) η(x,y) 共同对输入图像 f ( x , y ) f(x,y) f(x,y) 进行运算,生成退化图像 g ( x , y ) g(x,y) g(x,y)。
图像复原:
图像复原是指利用退化过程的先验知识,消除或降低在图像获取、传输过程中造成的图像品质下降,恢复图像的本来面目。具体地,要根据退化的原因,分析引起退化的环境因素,建立相应的数学模型,并沿着使图像降质的逆过程恢复图像。因此,图象复原是一个求逆问题,就是把退化模型化,采用相反的过程处理,以复原出原始图像。
已知退化图像 g ( x , y ) g(x,y) g(x,y),关于退化算子 H \\mathcalH H 与加性噪声项 η ( x , y ) \\eta (x,y) η(x,y) 的概括信息,通过图像复原处理得到输入图像 f ( x , y ) f(x,y) f(x,y) 的估计 f ^ ( x , y ) \\hatf(x,y) f^(x,y) ,尽可能接近原图像。
一般来说,关于退化算子 H \\mathcalH H 与加性噪声项 η ( x , y ) \\eta (x,y) η(x,y) 的信息越多,得到的估计 f ^ ( x , y ) \\hatf(x,y) f^(x,y) 就越接近原图像 f ( x , y ) f(x,y) f(x,y) 。
由于引起退化的因素众多、性质不同,为了描述图像退化过程所建立的数学模型多种多样,而恢复的质量标准也存在差异性,因此图像复原是一个复杂的数学过程,相关的方法和技术也各不相同。
退化模型:
若退化算子
H
\\mathcalH
H 是一个线性位置不变算子,则空间域的退化图像为:
g
(
x
,
y
)
=
(
h
⋆
f
)
(
x
,
y
)
+
η
(
x
,
y
)
g(x,y) = (h \\star f)(x,y) + \\eta(x,y)
g(x,y)=(h⋆f)(x,y)+η(x,y)
频率域的等效公式为:
G
(
u
,
v
)
=
H
(
u
,
v
)
F
(
u
,
v
)
+
N
(
u
,
v
)
G(u,v) = H(u,v) F(u,v) + N(u,v)
G(u,v)=H(u,v)F(u,v)+N(u,v)
2. 噪声模型
数字图像中的噪声源主要来自图像获取和传输过程。在获取图像时,光照水平和传感器温度影响图像中的噪声。在传输图像时,传输信道中的干扰对图像产生污染。
白噪声:
白光等比例地包含可见光谱中的所有频率。当噪声的傅里叶谱是常量时,称为白噪声。
2.1 高斯噪声(Gauss Noise)
高斯噪声中空间域和频率域中都很方便进行数学处理,因而得到了广泛的应用。
高斯噪声的概率密度函数为:
p
(
z
)
=
1
2
π
σ
e
−
(
z
−
z
ˉ
)
2
/
2
σ
2
p(z) = \\frac1\\sqrt2\\pi \\sigma e^-(z-\\barz)^2/2\\sigma ^2
p(z)=2πσ1e−(z−zˉ)2/2σ2
高斯噪声的均值为 z ˉ \\barz zˉ,标准差为: σ 2 \\sigma ^2 σ2。
例程 9.1:高斯噪声(Gauss Noise)
# 9.1:高斯噪声 (GaussNoise)
img = cv2.imread("../images/Fig0503.tif", 0) # flags=0 读取为灰度图像
# img = np.ones([256, 256]) * 128
mu, sigma = 0.0, 20.0
noiseGause = np.random.normal(mu, sigma, img.shape)
imgGaussNoise = img + noiseGause
imgGaussNoise = np.uint8(cv2.normalize(imgGaussNoise, None, 0, 255, cv2.NORM_MINMAX)) # 归一化为 [0,255]
plt.figure(figsize=(9, 3))
plt.subplot(131), plt.title("Origin"), plt.axis('off')
plt.imshow(img, 'gray', vmin=0, vmax=255)
plt.subplot(132), plt.title("GaussNoise"), plt.axis('off')
plt.imshow(imgGaussNoise, 'gray')
plt.subplot(133), plt.title("Gray Hist")
histNP, bins = np.histogram(imgGaussNoise.flatten(), bins=255, range=[0, 255], density=True)
plt.bar(bins[:-1], histNP[:])
plt.tight_layout()
plt.show()
2.2 瑞利噪声 (Rayleigh Noise)
瑞利噪声的概率密度函数为
p
(
z
)
=
2
/
b
∗
(
z
−
a
)
e
−
(
z
−
a
)
2
/
b
,
z
≥
a
0
,
z
<
a
p(z) = \\begincases 2/b * (z-a) e^-(z-a)^2 /b &, z \\ge a\\\\ 0&, z < a \\endcases
p(z)=2/b∗(z−a)e−(z−a)2/b0,z≥a,z<a
瑞利噪声的均值和标准差为:
z
ˉ
=
a
+
π
b
/
4
σ
2
=
b
(
4
−
π
)
/
4
\\barz = a + \\sqrt\\pi b/4 \\\\ \\sigma ^2 = b(4-\\pi)/4
zˉ=a+πb/4σ2=b(4−π)/4
瑞利噪声概率密度分布到原点的距离及密度的基本形状右偏,常用于倾斜形状直方图的建模。
例程 9.2:瑞利噪声 (Rayleigh Noise)
# # 9.2:瑞利噪声 (RayleighNoise)
img = cv2.imread("../images/Fig0503.tif", 0) # flags=0 读取为灰度图像
# img = np.ones([256, 256]) * 128
a = 30.0
noiseRayleigh = np.random.rayleigh(a, size=img.shape)
imgRayleighNoise = img + noiseRayleigh
imgRayleighNoise = np.uint8(cv2.normalize(imgRayleighNoise, None, 0, 255, cv2.NORM_MINMAX)) # 归一化为 [0,255]
plt.figure(figsize=(9, 3))
plt.subplot(131), plt.title("Origin"), plt.axis('off')
plt.imshow(img, 'gray', vmin=0, vmax=255)
plt.subplot(132), plt.title("RayleighNoise"), plt.axis('off')
plt.imshow(imgRayleighNoise, 'gray')
plt.subplot(133), plt.title("Gray Hist")
histNP, bins = np.histogram(imgRayleighNoise.flatten(), bins=255, range=[0, 255], density=True)
plt.bar(bins[:-1], histNP[:])
plt.tight_layout()
plt.show()
2.3 爱尔兰噪声 (Ireland Noise)
爱尔兰噪声的概率密度函数为
p
(
z
)
=
a
b
z
b
−
1
(
b
−
1
)
!
e
−
a
z
,
z
≥
0
0
,
z
<
0
p(z) = \\begincases \\fraca^b z^b-1(b-1)! e^-az &, z \\ge 0\\\\ 0&, z < 0 \\endcases
p(z)=(b−1)!abzb−1e−a以上是关于youcans 的 OpenCV 学习课—10. 图像复原与重建的主要内容,如果未能解决你的问题,请参考以下文章
youcans 的 OpenCV 学习课12. 彩色图像的处理
youcans 的图像处理学习课11. 形态学图像处理(中)
youcans 的 OpenCV 学习课1.2 编译生成带有 OpenCV_contrib 的 OpenCV 库
youcans 的 OpenCV 学习课1.2 编译生成带有 OpenCV_contrib 的 OpenCV 库