标题
- 均匀噪声
均匀噪声
均匀噪声的PDF为
P(z)={1b−a,a≤z≤b0,other(5.13)P(z) = \begin{cases}\frac{1}{b-a}, & a\leq z \leq b \\ 0, & \text{other}\end{cases} \tag{5.13}P(z)={b−a1,0,a≤z≤bother(5.13)
均值和方差为
zˉ=a+b2(5.14)\bar{z} = \frac{a + b}{2} \tag{5.14}zˉ=2a+b(5.14)
σ2=(b−a)212(5.15)\sigma^2 = \frac{(b - a)^2}{12} \tag{5.15}σ2=12(b−a)2(5.15)
def average_pdf(z, a=1, b=2):"""create average PDF, math $$P(z) = \begin{cases}\frac{1}{b-a}, & a\leq z \leq b \\ 0, & \text{other}\end{cases} $$param: z: input grayscale value of iamgeparam: a: uint, if image value. it could be float as well.param: b: uint, if image value. b > a, it could be float as well."""assert b > a, "b must greater than a"average = 1 / (b - a)average = np.where(z < a, 0, average)average = np.where(z > b, 0, average)return average
更正下面代码,如果之前已经复制的,也请更正
def add_average_noise(img, mean=0, sigma=800):"""add average noise for imageparam: img: input image, dtype=uint8param: mean: noise meanparam: sigma: noise sigmareturn: image_out: image with average noise"""# image = np.array(img/255, dtype=float) # 这是有错误的,将得不到正确的结果,修改如下image = np.array(img, dtype=float)a = 2 * mean - np.sqrt(12 * sigma)b = 2 * mean + np.sqrt(12 * sigma)noise = np.random.uniform(a, b, image.shape)image_out = image + noiseimage_out = np.uint8(normalize(image_out)*255)return image_out
# 均匀噪声
a = 8
b = 9
z = np.linspace(0, 10, 200)z_ = (a + b) / 2
sigma = (b - a)**2 / 12print(f"z_ -> {z_}, sigma -> {sigma}")mean = average_pdf(z, a=a, b=b)plt.figure(figsize=(9, 6))
plt.plot(z, mean)
plt.show()
z_ -> 8.5, sigma -> 0.08333333333333333
# 均匀噪声
# img_ori = np.ones((512, 512)) * 128
img_ori = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH05/Fig0503 (original_pattern).tif", 0)
img_average = add_average_noise(img_ori, mean=10, sigma=150)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_average, 'gray', vmin=0, vmax=255), plt.xticks([]), plt.yticks([])plt.tight_layout()
plt.show()
hist, bins = np.histogram(img_average.flatten(), bins=255, range=[0, 255], density=True)
bar = plt.bar(bins[:-1], hist[:])