均值模糊有两种方式,一种是基于平均值,另一种是基于高斯权重的均值模糊
这是二维高斯函数的公式 通过这个公式我们可以计算每个点的权重
G(x,y)就是要求的权重,带入一个点的x和y值,再假定σ的值,就可以得到每个点的权重
因为权重之和要等于一,所以求出来的权重和要除以它本身,就得到了权重矩阵。
通过权重矩阵,我们就能够计算高斯模糊了,将每一个点的灰度值乘权重值,
然后将矩阵的值加起来,就是中心点高斯模糊的值,然后我们就一个一个它进行高斯模糊。
高斯噪声代码如下
def clamp(pv): 限制pv的值在0到255之间
if pv >255:
return 255
if pv <0:
return 0
else:
return pv
def gaussin_noise(image): 生成高斯噪声
h, w, c = image.shape 不想说了
for row in range(h): 一个for循环
for col in range(w): 加上另一个for循环
s = np.random.normal(0,20,3) 生成高斯分布的概率密度随机数 o 为center 20位标准差 3 为形状
## 举例 nd1 = np.random.normal(loc=1,scale=2,size=2)#array([ 3.65202676 -0.6285469 ])
b = image[row, col, 0] blue 层的一个一个点
g = image[row, col, 1] green 层的一个一个点
r = image[row, col, 2] red 层的一个一个点
image[row, col, 0] = clamp(b + s[0]) 每个点都加上一个随机的数 这样才会产生噪声
image[row, col, 1] = clamp(b + s[1]) 同理
image[row, col, 2] = clamp(b + s[2]) 同理
cv.imshow("noise_image",image) 打印出来
OpenCV的高斯模糊api:
dst =cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType)
1.dst 是返回值,表示进行高斯滤波后得到的处理结果。
2.src是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理,图像深度应该是 CV_8U.CV_16U、CV_16、CV_32F 或者 CV_64F 中的一种
3.ksize 是滤波核的大小,滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度。需要注意滤波核的值必级是奇数
4.sigmaX是卷积核在水平方向上(X 轴方向)的标准差,其控制的是权重比例,
5.sigmaY 同理
borderType是不用管的值,一般都认为是默认值就好了
高斯模糊可以看成高斯滤波,目的是为了去除高斯噪声