youcans 的 OpenCV 学习课—10. 图像复原与重建

Posted 小白YouCans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了youcans 的 OpenCV 学习课—10. 图像复原与重建相关的知识,希望对你有一定的参考价值。

youcans 的 OpenCV 学习课—10. 图像复原与重建

本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战。

图像复原是对图像退化过程建模,并以图像退化的先验知识来恢复退化的图像。

图像增强是一种主观处理,而图像复原是一种客观处理。

本文提供上述各种算法的完整例程和运行结果。


欢迎关注 『youcans 的 OpenCV 学习课』 系列,持续更新
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中

文章目录



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)=(hf)(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(zzˉ)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(za)e(za)2/b0,za,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)=(b1)!abzb1ea以上是关于youcans 的 OpenCV 学习课—10. 图像复原与重建的主要内容,如果未能解决你的问题,请参考以下文章

youcans 的 OpenCV 学习课12. 彩色图像的处理

youcans 的图像处理学习课11. 形态学图像处理(中)

youcans 的 OpenCV 学习课1.2 编译生成带有 OpenCV_contrib 的 OpenCV 库

youcans 的 OpenCV 学习课1.2 编译生成带有 OpenCV_contrib 的 OpenCV 库

youcans 的图像处理学习课11. 形态学图像处理(上)

youcans 的 OpenCV 学习课—9.频率域图像滤波(下)