数字图像处理之椒盐噪声和中值滤波

数字图像处理之椒盐噪声和中值滤波
0、所有的代码基于python3 + opecv3.3
1、椒盐噪声和中值滤波
  椒盐噪声(salt-and-pepper noise)是由图像传感器,传输信道,解码处理等产⽣的⿊⽩相间的亮暗点噪声。
  所谓椒盐,椒就是⿊,盐就是⽩,椒盐噪声就是在图像上随机出现⿊⾊⽩⾊的像素。椒盐噪声是⼀种因为信号脉冲强度引起的噪声,产⽣该噪声的算法也⽐较简单。
  椒盐噪声往往由图像切割引起,去除脉冲⼲扰及椒盐噪声最常⽤的算法是中值滤波。⼤量的实验研究发现,由摄像机拍摄得到的图像受离散的脉冲、椒盐噪声和零均值的⾼斯噪声的影响较严重。噪声给图像处理带来很多困难,对图像分割、特征提取、图像识别等具有直接影响。因此,实时采集的图像需进⾏滤波处理。消除图像中的噪声成份叫做图像的平滑化或滤波操作。滤波的⽬的有两个:⼀是抽出对象的特征作为图像识别的特征模式;⼆是为适应计算机处理的要求,消除图像数字化时所混⼊的噪声。对滤波处理的要求有两条:⼀是不能损坏图像轮廓及边缘等重要信息;⼆是使图像清晰,视觉效果好。
  我们使⽤信噪⽐(Signal NoiseRate)衡量图像噪声,图象的信噪⽐应该等于信号与噪声的功率谱之⽐,
但通常功率谱难以计算,有⼀种⽅法可以近似估计图象信噪⽐,即信号与噪声的⽅差之⽐(其实在均值为零的情况下,功率就是⽅差)。⾸先计算图象所有像素的局部⽅差,将局部⽅差的最⼤值认为是信号⽅差,最⼩值是噪声⽅差,求出它们的⽐值,再转成dB数,最后⽤经验公式修正。伤怀之美
  如果是灰度图像的话,SNR=(洁净图⽚中的像素点的灰度值之和)/abs(噪声图⽚的灰度值之和-洁净图⽚中的灰度值之和)为该图像的信噪⽐。
  给⼀副数字图像加上椒盐噪声的步骤如下:
1. 指定信噪⽐ SNR (其取值范围在[0, 1]之间)
2. 计算总像素数⽬ SP, 得到要加噪的像素数⽬ NP = SP * (1-SNR)
3. 随机获取要加噪的每个像素位置P(i, j)
4. 指定像素值为255或者0。
crb指数5. 重复3,4两个步骤完成所有像素的NP个像素
6. 输出加噪以后的图像
执⾏效果如下
原始图像:
信噪⽐为0.9的时候:
import  cv2
import  numpy as  np
filename = "d:/1.jpg"
winname = "figure"
龚绮img = cv2.imread(filename)
def  addSaltNoise ():
# 指定信噪⽐
SNR = 0.9
# 获取总共像素个数
size = img.size
# 因为信噪⽐是 SNR ,所以噪声占据百分之10,所以需要对这百分之10加噪声    noiseSize = int(size * (1 - SNR))
# 对这些点加噪声
for  k in  range(0, noiseSize):
摇滚狂潮# 随机获取 某个点
xi = int(np.random.uniform(0, img.shape[1]))
xj = int(np.random.uniform(0, img.shape[0]))
# 增加噪声
if  img.ndim == 2:
img[xj, xi] = 255
蛲虫卵
elif  img.ndim == 3:
img[xj, xi] = 0
cv2.imshow(winname, img)
cv2.waitKey(0)
def  main ():
addSaltNoise()
if  __name__ == '__main__':
main()
信噪⽐为0.7的时候:
信噪⽐为0.5的时候:
信噪⽐为0.1的时候:
通过对已经被椒盐噪声污染的图⽚进⾏中值滤波
import cv2
import numpy as np
def addSaltNoise(img,snr):
# 指定信噪⽐
SNR = snr
# 获取总共像素个数
size = img.size
# 因为信噪⽐是 SNR ,所以噪声占据百分之10,所以需要对这百分之10加噪声
noiseSize = int(size * (1 - SNR))
# 对这些点加噪声
for k in range(0, noiseSize):
# 随机获取某个点
xi = int(np.random.uniform(0, img.shape[1]))
xj = int(np.random.uniform(0, img.shape[0]))
# 增加噪声
if img.ndim == 2:
img[xj, xi] = 255
elif img.ndim == 3:
img[xj, xi] = 0
return img
def removeSaltNoise():
filename = "d:/1.jpg"
# 得到加噪声之后的图像
img = addSaltNoise(cv2.imread(filename),0.9)
# 进⾏中值滤波
lbimg = dianBlur(img, 3)
cv2.imshow('src', img)
cv2.imshow('dst', lbimg)
cv2.waitKey(0)
def main():
removeSaltNoise()
if __name__ == '__main__':
布里渊散射
main()
效果如下:
被污染之后的图像(信噪⽐0.9的椒盐噪声):

本文发布于:2024-09-23 11:26:40,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/116595.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:噪声   图像   椒盐
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议