第5章 Python 数字图像处理(DIP) - 图像复原与重建3 - 爱尔兰(伽马)噪声

爱尔兰(伽马)噪声

爱尔兰噪声的PDF是
P ( z ) = { a b z b − 1 ( b − 1 ) ! e − a z , z ≥ 0 0 , z < 0 (5.7) P(z) = \begin{cases} \frac{a^bz^{b-1}}{(b-1)!}e^{-az}, & z\geq 0 \\ 0, & z < 0 \end{cases} \tag{5.7} P(z)={(b1)!abzb1eaz,0,z0z<0(5.7)
a > b a > b a>b, b b b是一个正整数,"!"是阶乘

均值和方差为
z ˉ = b a (5.8) \bar{z} = \frac{b}{a} \tag{5.8} zˉ=ab(5.8)
σ 2 = b a 2 (5.9) \sigma^2 = \frac{b}{a^2} \tag{5.9} σ2=a2b(5.9)

仅当分母 为伽马函数 Γ ( b ) \Gamma(b) Γ(b)时这称为伽马密度

b = 1 b=1 b=1时,为指数噪声

def ireland_pdf(z, a=2, b=1):
    """
    create ireland PDF, math $$P(z) = \begin{cases} \frac{a^bz^{b-1}}{(b-1)!}e^{-az}, & z\geq 0 \\ 0, & z < 0 \end{cases}$$
    param: z: input grayscale value of iamge
    param: a: float, a > b
    param: b: uint, 
    """
    ireland = (a**b * z**(b-1) / np.math.factorial(b - 1)) * np.exp(- a *z)
    ireland = np.where(z >= 0, ireland, 0)
    
    return ireland

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

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

    noise = np.random.gamma(shape=1, scale=scale, size=image.shape)
    
    image_out = image + noise
    image_out = np.uint8(normalize(image_out)*255)
    
    return image_out
# 爱尔兰(伽马)噪声
a = 2.1
b = 2
z = np.linspace(0, 10, 200)

z_ = b / a
sigma = b / a**2

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

ireland = ireland_pdf(z, a=a, b=b)

plt.figure(figsize=(9, 6))
plt.plot(z, ireland)
plt.show()
z_ -> 0.9523809523809523, sigma -> 0.4535147392290249

在这里插入图片描述

# 伽马噪声
img_ori = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH05/Fig0503 (original_pattern).tif", 0)
# img_ori = np.ones((512, 512)) * 128
img_gamma = add_gamma_noise(img_ori, scale=20)

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_gamma, 'gray', vmin=0, vmax=255), plt.xticks([]), plt.yticks([])

plt.tight_layout()
plt.show()

在这里插入图片描述

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

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jasneik

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值