python-opencv图像处理基础(二)高斯噪声+椒盐噪声+滤波

python-opencv图像处理基础(⼆)⾼斯噪声+椒盐噪声+滤波⽬录
1、⾼斯噪声
顾名思义指服从⾼斯分布(正态分布)的⼀类噪声,通常是因为不良照明和温度引起的传感器噪声。通常在RGB图像中,显现⽐较明显。如图:
⾼斯噪声+模糊/⾼斯滤波操作:
def clamp(pv):
if pv>255:
return 255
elif pv<0:
return 0
else:
return pv
def gaussian_noise(image):
h,w,c=image.shape
for row in range(h):
for col in range(w):
s=al(0,20,3)
b=image[row,col,0]
g=image[row,col,1]
r=image[row,col,2]
image[row,col,0]=clamp(b+s[0])
image[row,col,1]=clamp(g+s[1])
image[row,col,2]=clamp(r+s[2])
cv2.imshow("noise image",image)
if __name__ == '__main__':
椒盐噪声image=cv2.imread("../opencv-python-img/lena.png")
TickCount()
gaussian_noise(image)
#dst=cv2.GaussianBlur(image,(0,0),15)
#cv2.imshow('dst',dst)
TickCount()
time=(t2-t1)/TickFrequency()
print(time)
cv2.waitKey(0)
#说明:
#⾃定义函数⾼斯模糊耗时3.4s
#调⽤opencv⾼斯模糊函数耗时0.1s
2、椒盐噪声
通常是由图像传感器,传输通道,解压处理等产⽣的⿊⽩相间的亮暗点噪声(椒-⿊,盐-⽩)。椒盐噪声往往由图像切割引起,去除脉冲⼲扰及椒盐噪声最常⽤的算法是中值滤波。
降噪是图像卷积运算的重要功能之⼀;中值模板的卷积对去除椒盐噪声有⽐较好的作⽤但均值滤波的降噪效果不佳。对于⾼斯噪声通过⾼斯滤波去除噪声。
我们使⽤信噪⽐(Signal NoiseRate)衡量图像噪声,图象的信噪⽐应该等于信号与噪声的功率谱之⽐,但通常功率谱难以计算,有⼀种⽅法可以近似估计图象信噪⽐,即信号与噪声的⽅差之⽐(其实在均值为零的情况下,功率就是⽅差)。⾸先计算图象所有像素的局部⽅差,将局部⽅差的最⼤值认为是信号⽅差,最⼩值是噪声⽅差,求出它们的⽐值,再转成dB数,最后⽤经验公式修正。
如果是灰度图像的话,SNR=(洁净图⽚中的像素点的灰度值之和)/abs(噪声图⽚的灰度值之和-洁净图⽚中的灰度值之和)为该图像的信噪⽐。
如何给⼀幅数字图像加上椒盐噪声:
1. 指定信噪⽐ SNR (其取值范围在[0, 1]之间)
2. 计算总像素数⽬ SP, 得到要加噪的像素数⽬ NP = SP * (1-SNR)
3. 随机获取要加噪的每个像素位置P(i, j)
4. 指定像素值为255或者0。
5. 重复3,4两个步骤完成所有像素的NP个像素
6. 输出加噪以后的图像
⽣成椒盐噪声+中值滤波(在第三部分模糊操作中):
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()
3、模糊操作
模糊操作:均值模糊、中值模糊、⾃定义模糊
#均值模糊、中值模糊、⾃定义模糊
#模糊操作的基本原理
#1、基于离散卷积
#2、定义好每个卷积核
#3、不同卷积核得到不同的卷积效果
#4、模糊是卷积的⼀种表现
def blur_demo(image):
#均值模糊
dst=cv2.blur(image,(1,10))
cv2.imshow("blur_demo",dst)
def median_blur_demo(image):
#中值模糊
dianBlur(image,5)#奇数
cv2.imshow("medianBlur",dst)
def custom_blur_demo(image):
#⾃定义模糊
kernel=np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
#dst=cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
#ddepth:⽬标图像所需深度
#kernel:卷积核(或相当于相关核),单通道浮点矩阵;如果要将不同的内核应⽤于不同的通道,请使⽤拆分将图像拆分为单独的颜⾊平⾯,然后单独处理它们。 #anchor:内核的锚点,指⽰内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表⽰锚位于内核中⼼。
#detal:在将它们存储在dst中之前,将可选值添加到已过滤的像素中。类似于偏置。
#borderType:像素外推法,参见BorderTypes
dst=cv2.filter2D(image,-1,kernel=kernel)
cv2.imshow("custom_blur_demo",dst)
if __name__ == '__main__':
image=cv2.imread('../opencv-python-img/lena.png')
#blur_demo(image)
#median_blur_demo(image)
custom_blur_demo(image)
cv2.waitKey(0)

本文发布于:2024-09-21 05:26:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/359140.html

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

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