第5章 Python 数字图像处理(DIP) - 图像复原与重建2 - 瑞利噪声

标题

        • 瑞利噪声

瑞利噪声

瑞利噪声的PDF为
P ( z ) = { 2 b ( z − a ) e − ( z − a ) 2 / b , z ≥ a 0 , z < a (5.4) P(z) = \begin{cases} \frac{2}{b}(z-a)e^{-(z-a)^2/b}, & z \ge a \\ 0, & z < a\end{cases} \tag{5.4} P(z)={b2(za)e(za)2/b,0,zaz<a(5.4)

均值和方差为
z ˉ = a + π b / 4 (5.5) \bar{z} = a + \sqrt{\pi b /4} \tag{5.5} zˉ=a+πb/4 (5.5)
σ 2 = b ( 4 − π ) 4 (5.6) \sigma^2 = \frac{b(4-\pi)}{4} \tag{5.6} σ2=4b(4π)(5.6)

def rayleigh_pdf(z, a=3, b=2):
    assert b != 0, "b is denominator, cannot be zero!!!"
    output = (2 / b )* (z - a) * np.exp(-((z - a)**2 )/b)
    output = np.where(z > a, output, 0)
    return output

更正下面代码,如果之前已经复制的,也请更正

def add_rayleigh_noise(img, a=3):
    """
    add rayleigh noise for image
    param: img: input image, dtype=uint8
    param: mean: noise mean
    param: sigma: noise sigma
    return: image_out: image with rayleigh noise
    """
    # image = np.array(img/255, dtype=float) # 这是有错误的,将得不到正确的结果,修改如下
    image = np.array(img, dtype=float)

    # ============== numpy.random.rayleigh======
    noise = np.random.rayleigh(a, size=image.shape)
    
    image_out = image + noise
    image_out = np.uint8(normalize(image_out)*255)
    
    return image_out
# 瑞利PDF
a = 10
b = 400
z = np.linspace(0, 255, 200)

z_ = a + np.sqrt(np.pi*b/4)
sigma = (b * (4 - np.pi)) / 4
peak_x = a + np.sqrt(b/2)
peak_y = 0.607 * np.sqrt(2/b)

print(f"z_ -> {z_}, sigma^2 -> {sigma}")

rayleigh = rayleigh_pdf(z, a=a, b=b)

plt.figure(figsize=(9, 6))
plt.plot(z, rayleigh), #plt.xticks([a, peak_x]), plt.yticks([0, peak_y])
plt.show()
z_ -> 27.72453850905516, sigma^2 -> 85.84073464102069

第5章 Python 数字图像处理(DIP) - 图像复原与重建2 - 瑞利噪声_第1张图片

# 瑞利噪声
img_ori = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH05/Fig0503 (original_pattern).tif", 0)
# img_ori = np.ones((512, 512)) * 128
img_rayleigh = add_rayleigh_noise(img_ori, a=30)

plt.figure(figsize=(9, 6))
plt.subplot(121), plt.imshow(img_ori, 'gray', vmin=0, vmax=255), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_rayleigh, 'gray', vmin=0, vmax=255), plt.xticks([]), plt.yticks([])

plt.tight_layout()
plt.show()

第5章 Python 数字图像处理(DIP) - 图像复原与重建2 - 瑞利噪声_第2张图片

hist, bins = np.histogram(img_rayleigh.flatten(), bins=255, range=[0, 255], density=True)
bar = plt.bar(bins[:-2], hist[:-1])

第5章 Python 数字图像处理(DIP) - 图像复原与重建2 - 瑞利噪声_第3张图片

你可能感兴趣的:(#,第5章,图像复原与重建,图像处理,图像识别,python,numpy,opencv)