使用numpy分别为图像添加椒盐噪声和高斯噪声,并使用numpy实现均值滤波

import cv2
import numpy as np

src=cv2.imread('lena.jpg')

def saltpepper_noise(image,proportion):
    image_copy=image.copy()
    img_y, img_x=image.shape[0:2]
    x=np.random.randint(img_x,size=(int(proportion*img_x*img_y),))
    y=np.random.randint(img_y,size=(int(proportion*img_x*img_y),))
    image_copy[y,x]=np.random.choice([0,255],size=(int(proportion*img_x*img_y),1))
    
    sp_noise_plate=np.ones_like(image_copy)*127
    sp_noise_plate[y,x]=image_copy[y,x]
    return image_copy,sp_noise_plate
def gaussian_noise(image,mean,sigma):
    image=image/255
    noise=np.random.normal(mean,sigma,image.shape)
    gaussian_out=image+noise
    gaussian_out=np.clip(gaussian_out,0,1)
    gaussian_out=np.uint8(gaussian_out*255)
    noise=np.uint8(noise*255)
    return gaussian_out,noise
def average_filter(image,kernel_size):
    image_copy=image.copy()
    kernel=np.ones((kernel_size,kernel_size),int)
    print(kernel)
    image_y,image_x=image.shape[0:2]
    image_copy=cv2.copyMakeBorder(image_copy,1,1,1,1,cv2.BORDER_CONSTANT)
    image=image_copy.copy()
    for x in range(1,image_x):
        for y in range(1,image_y):
            image_child=image[x-1:x+2,y-1:y+2,1]
            list_average=kernel*image_child
            image_copy[x,y]=abs(list_average.sum()/(np.square(kernel_size)))
    return image_copy
image_copy,sp_noise_plate=saltpepper_noise(src,0.04)
image_gaussian,noise_gaussian=gaussian_noise(src,0,0.03)
dst_blur=cv2.blur(image_copy,(3,3))
dst_filtered=average_filter(image_copy,3)
cv2.imshow('src',src)
cv2.imshow('dst_sp',image_copy)
cv2.imshow('dst_gaussian',image_gaussian)
#cv2.imshow('dst_blur',dst_blur)
cv2.imshow('dst_filtered',dst_filtered)  
cv2.waitKey(0)
cv2.destroyAllWindows()

原图
原图lena
椒盐噪声

椒盐噪声
高斯噪声
高斯噪声
均值滤波
均值滤波

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值