mark一下图像加各类噪声的实现~~
参考链接:用Python实现图像噪声、去噪基本方法 - 知乎 (zhihu.com)
1.高斯噪声
概率密度公式:
生成的噪声情况:
噪声叠加:
代码:
1 2 3 4 5 6 img = cv2.imread("dog.jpg" ) noise = np.random.normal(0 ,50 ,size=img.size).reshape(img.shape[0 ],img.shape[1 ],img.shape[2 ]) cv2.imshow('image' ,noise) cv2.waitKey(0 )
np.random.normal(loc=0.0, scale=1.0, size=None)
参数:
loc(float):此概率分布的均值(对应着整个分布的中心centre)
scale(float):此概率分布的标准差(对应于分布的宽度,scale越大,图形越矮胖;scale越小,图形越瘦高) size(int or tuple of ints):输出的shape,默认为None,只输出一个值 通过以上参数解释可知:np.random.normal(loc=0, scale=1, size)就表示标准正太分布(μ=0, σ=1)。
2.高斯滤波
高斯滤波是一种线性平滑滤波,一般用于消除高斯噪声。对于每一个像素点的值,是由其本身和邻域内的其他像素值经过加权平均后得到。
二维高斯函数:
1 2 3 4 5 6 noised = cv2.imread("noised.png" ) clean_noised = cv2.GaussianBlur(noised,(55 ,55 ),0 ) cv2.imshow('image' ,clean_noised) cv2.waitKey(0 ) cv2.imwrite("clean_noised.png" ,clean_noised)
懒得打字,放截图了
参数调大了效果还不错,看不到那些花花绿绿的点了
就是有一种近视了的美感
3.泊松噪声
简言之就是符合泊松分布的噪声模型,又称散粒噪声。
lamda设置为100:
lamda越大,噪声程度越深
1 2 3 4 noise = np.random.poisson(lam=150 ,size=shape).astype('uint8' ) cv2.imshow('image' ,noise) cv2.waitKey(0 )
4.椒盐噪声
椒盐噪声又称为脉冲噪声,是在图像上随机出现黑色白色的像素,顾名思义就是椒盐噪声 = 椒噪声(值为0,黑色) + 盐噪声(值为255,白色)。SNR越小,噪声越大。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 noise = np.zeros(shape) noised = img.copy() noised = noised.reshape(1 ,-1 ) noise = noise.reshape(1 ,-1 ) print (noised.shape)SNR = 0.85 noise_num = noised.size * (1 -SNR) list = random.sample(range (0 ,noised.size),int (noise_num))for i in list : if random.random() >= 0.5 : noised[0 ][i] = 0 noise[0 ][i] = 0 else : noised[0 ][i] = 255 noise[0 ][i] = 255 noised = noised.reshape(img.shape) noise = noise.reshape(img.shape) cv2.imwrite("noised.png" ,noised) cv2.imshow("noise" ,noise) cv2.waitKey(0 )oise",noise) cv2.waitKey(0)
只看参考链接中对椒盐噪声的定义,好像不应该是像代码的这个写法,然后自己写了个直接改像素的,随机选中像素点改成黑白的,且称之为补丁吧
5.补丁
黑白补丁
为了方便看黑白,底色设置成了红色,但是白色还是不明显。。。。
预测结果:850
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 noised = img.copy() noise = np.zeros(shape) noise[:,:,0 ] = 0 noise[:,:,1 ] = 0 noise[:,:,2 ] = 255 r = 0.25 noise_num = shape[0 ]* shape[1 ] * r list = random.sample(range (0 ,shape[0 ]* shape[1 ]),int (noise_num))for i in list : x = i//shape[1 ] y = i%shape[1 ] if random.random() >= 0.5 : noise[x,y,:] = 0 noised[x,y,:] = 0 else : noise[x,y,:] = 255 noised[x,y,:] = 255 cv2.imwrite("noised.png" ,noised) cv2.imshow("noise" ,noise) cv2.waitKey(0 )
纯补丁:
预测结果267
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 noised = img.copy() noise = np.zeros(shape) noise[:,:,0 ] = 0 noise[:,:,1 ] = 0 noise[:,:,2 ] = 0 r = 0.25 noise_num = shape[0 ]* shape[1 ] * r list = random.sample(range (0 ,shape[0 ]* shape[1 ]),int (noise_num))for i in list : x = i//shape[1 ] y = i%shape[1 ] noise[x,y,:] = 255 noised[x,y,:] = 255 cv2.imwrite("noised.png" ,noised) cv2.imshow("noise" ,noise) cv2.waitKey(0 )
6.瑞利噪声
一般是由由信道不理想引起的,它与信号的关系是相乘,信号在它在,信号不在他也就不在。
瑞利密度对倾斜形状直方图的建模非常有用。
看不太懂这个噪声,不知道为什么出来是白色的,看了下生成噪声,最小值是0,最大值是300多
1 2 3 4 5 sigma = 70.0 noise = np.random.rayleigh(sigma, size=img.shape) cv2.imshow("noise" ,noise) cv2.waitKey(0 )
1 2 3 4 5 noised = img.copy() noised = np.random.rayleigh(noised, size=img.shape) cv2.imshow("noised" ,noised) cv2.waitKey(0 )
7.爱尔兰(伽马)噪声
这个噪声也是偏大的,叠完就很白了
1 2 3 4 noise = np.random.gamma(shape=10.0 ,scale=10.0 ,size=img.shape) cv2.imshow("noise" ,noise) cv2.waitKey(0 )
8.均匀噪声
设置了50-100,纯噪声看上去是纯白色的
有一种均匀地过曝的感觉
1 2 3 4 noise = np.random.uniform(0 ,50 ,img.shape) cv2.imshow("noise" ,noise) cv2.waitKey(0 )
调了一下参数,把50,100,改成0到50,不然就是曝光的感觉
变化不大
图像加噪后resnet50预测结果
影响不大,补丁的影响是最明显的
噪声参数设置
均值=0;方差=50
lamda=20
更改像素值=25%
更改像素值=25%
信噪比=85% 即更改像素值=25%
sigma=70
shape=10.0,scale=10.0
(a,b)=(50,100)
标签
207
207
850
266
207
207
207
207