空间滤波-随机椒盐噪声-高斯噪声-均值滤波器-中值滤波器

article/2025/8/27 14:15:16

在这里插入图片描述

文章目录

  • 1 随机椒盐噪声
  • 2 高斯噪声
  • 3 均值滤波器
  • 4 中值滤波器

1 随机椒盐噪声

椒噪声:灰度值为0的噪声点,黑噪声

盐噪声:灰度值为255的噪声点,白噪声
思路:获取图像长、宽、通道数,在每个通道矩阵中随机产生灰度值为0和255的像素。
在这里插入图片描述

def salt_and_pepper_noise(image,percentage):rows,columns,channels = image.shape#获取图片的长、宽、通道数nums = int(rows*columns*percentage)#每个通道噪声数量for channel in range(channels):for num in range(nums):row = random.randint(0,rows-1)#随机行号column = random.randint(0,columns-1)#随机列号if random.randint(0,1) == 0:image[row,column,channel] = 0#椒噪声else:image[row,column,channel] = 255#盐噪声return imageif __name__ == '__main__':image = cv2.imread('./1.jpg')  # 读取图片a = salt_and_pepper_noise(image,percentage=0.1)cv2.imshow('img',a)cv2.waitKey(0)

2 高斯噪声

思路:产生高斯分布噪声与原图像进行叠加,并控制数值空间为0至255。
在这里插入图片描述

def guassian_Noise(image,mean,sigma):#sigma方差tempt = np.array(image/255,dtype = float)noise = np.random.normal(mean,sigma, image.shape)tempt += noisetempt = np.clip(tempt, 0, 1)tempt = np.uint8(tempt * 255)return temptif __name__ == '__main__':image = cv2.imread('./1.jpg')  # 读取图片b = guassian_Noise(image,0,1)cv2.imshow('img', b)cv2.waitKey(0)

3 均值滤波器

思路:输入一个 n ∗ n n*n nn各个元素为1的矩阵作为滤波器核,然后将原图像进行边缘填充,按步长为1的跨度从左到右,从上到下,对填充图片上的 n ∗ n n*n nn局域矩阵依次进行点乘,并将点乘后局域矩阵的各个元素值加在一起除以 n 2 n^2 n2,这个值为滤波后图像的一个像素值,全部滤波后就会获得滤波图像,彩色图像是三通道,因此需要对三个通道依次滤波。

在这里插入图片描述

左边随机椒盐噪声,右边均值滤波9*9
在这里插入图片描述

左边高斯噪声,右边均值滤波9*9

def means_filter(image,filter_size):input_image = np.copy(image)kernal = np.ones((filter_size,filter_size))# 卷积核padding_num = int((filter_size - 1)/2)#需要补0b,g,r = cv2.split(input_image)#分开三通道b = np.pad(b, (padding_num, padding_num), mode='constant', constant_values=0)#图像三通道边缘填充g = np.pad(g, (padding_num, padding_num), mode='constant', constant_values=0)r = np.pad(r, (padding_num, padding_num), mode='constant', constant_values=0)input_image = cv2.merge([b,g,r])#合并三通道wide,height,channels = input_image.shapeoutput_image = np.copy(input_image)for channel in range(channels):#均值滤波for i in range(padding_num,wide-padding_num):for j in range(padding_num,height-padding_num):output_image[i,j,channel] = np.sum(\kernal * input_image[i-padding_num:i+padding_num+1,j-padding_num:j+padding_num+1,channel])/(filter_size**2)output_image = output_image[padding_num:wide - padding_num, padding_num:height - padding_num]  # 裁剪return output_imageif __name__ == '__main__':c = means_filter(image,9)imgs = np.hstack([image,c])cv2.imshow('img', imgs)cv2.waitKey(0)

4 中值滤波器

思路:输入一个 n ∗ n n*n nn各个元素为1的矩阵作为滤波器核,然后将原图像进行边缘填充,按步长为1的跨度从左到右,从上到下,对填充图片上的 n ∗ n n*n nn局域矩阵依次进行中值排序,并这个中值为滤波后图像的一个像素值,全部滤波后就会获得滤波图像,彩色图像是三通道,因此需要对三个通道依次滤波。

在这里插入图片描述

左边随机椒盐噪声,右边中值滤波9*9

在这里插入图片描述

左边高斯噪声,右边中值滤波9*9

def median_filter(image,filter_size):input_image = np.copy(image)kernal = np.ones((filter_size,filter_size))# 卷积核padding_num = int((filter_size - 1)/2)#需要补0b,g,r = cv2.split(input_image)#分开三通道b = np.pad(b, (padding_num, padding_num), mode='constant', constant_values=0)#图像三通道边缘填充g = np.pad(g, (padding_num, padding_num), mode='constant', constant_values=0)r = np.pad(r, (padding_num, padding_num), mode='constant', constant_values=0)input_image = cv2.merge([b,g,r])#合并三通道wide,height,channels = input_image.shapeoutput_image = np.copy(input_image)for channel in range(channels):#中值滤波for i in range(padding_num,wide-padding_num):for j in range(padding_num,height-padding_num):output_image[i,j,channel] = np.median(input_image[i-padding_num:i+padding_num+1,j-padding_num:j+padding_num+1,channel])output_image = output_image[padding_num:wide - padding_num, padding_num:height - padding_num]  # 裁剪return output_imageif __name__ == '__main__':image = cv2.imread('./2.png')  # 读取图片d = median_filter(image,9)imgs = np.hstack([image,d])cv2.imshow('img', imgs)cv2.waitKey(0)
/2.png')  # 读取图片d = median_filter(image,9)imgs = np.hstack([image,d])cv2.imshow('img', imgs)cv2.waitKey(0)

http://chatgpt.dhexx.cn/article/MjJGdt6K.shtml

相关文章

《数字图像处理》手动实现修正的α均值滤波+手动实现自适应中值滤波器

1 修正的α均值滤波实现 1.1 修正的α均值滤波原理 假设在邻域S_xy内去掉g(x,t)最低灰度值的d/2和最高的灰度值的d/2。令g_r (x,t)代表剩下的mn-d个像素。由这些剩余的像素的平均值形成的滤波器就称为修正的α均值滤波器: 其中,d的取值范围可以为0到m…

3D点云处理:半径滤波器中值滤波器

文章目录 0. 效果1. 半径滤波器1.1. 半径滤波器基本内容1.2 pcl实现2. 中值滤波器2.1.中值滤波器基本内容2.2 pcl实现3. 参考0. 效果 红色点云为处理的点云;白色为滤除的点云。 1. 半径滤波器 1.1. 半径滤波器基本内容 设置目标点半径范围内最少点数,如果少于该点数,则认为…

中值滤波器和双边滤波器(python实现)

文章目录 1.中值滤波(1)函数(2)代码 2.双边滤波(1)函数讲解(2)关于d,sigmaColor和sigmaSpace的值选择(3)代码实现 1.中值滤波 优点:对椒盐噪声处…

自适应中值滤波器(基于OpenCV实现)

转自:http://blog.csdn.net/brookicv/article/details/54931857 本文主要介绍了自适应的中值滤波器,并基于OpenCV实现了该滤波器,并且将自适应的中值滤波器和常规的中值滤波器对不同概率的椒盐噪声的过滤效果进行了对比。最后,对中…

NAFSM中值滤波器讲解与实现

去年大三时课上,医学图像处理老师讲解了这个算法,当时布置的作业就是实现这个中值滤波器,今天突然从一篇论文中看到过类似这种思想,就又想起来了,发现网上对这个算法的讲解很少,那我就在这分享一下咯&#…

中值滤波器处理椒盐噪声

clc; close all; clear all; %读取原始图像 im imread(‘Fig0318(b)(ckt-board-slt-pep-both-0pt2).tif’); im_noise_salt imnoise(im,‘salt & pepper’,0.05); % 加入椒盐噪声 % im_noise_gaussian imnoise(im,‘gaussian’); %定义邻域尺寸 n1 2; m1 2n11; n2 2;…

使用中值滤波器对图像降噪

中值滤波器: 基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序&#xff…

【OpenCV 例程 300 篇】101. 自适应中值滤波器

专栏地址:『youcans 的 OpenCV 例程 300篇 - 总目录』 【第 7 章:图像复原与重建】 100. 自适应局部降噪滤波器 101. 自适应中值滤波器 102. 陷波带阻滤波器的传递函数 【youcans 的 OpenCV 例程 300 篇】101. 自适应中值滤波器 3.8 自适应中值滤波器&am…

python实现自适应中值滤波器

目录 原理(冈萨雷斯第四版p235): 代码: 结果: 原理(冈萨雷斯第四版p235): 代码: import cv2 import numpy as np from matplotlib import pyplot as plt# for gray im…

自编自适应中值滤波器

自适应中值滤波器 算法思想:自适应中值滤波器是根据输入的图片像素矩阵和滤波器窗口的最大和最小值,首先,根据滤波器窗口的最大值申请两个可以处理了边界情况的滤波器,大小为原图加上最大滤波器的尺寸减一,按照边缘处…

图像中值滤波器python实现

中值滤波器原理 图像处理中最著名的统计排序滤波器是中值滤波器,即用一个预定义的像素领域中的灰度中值来代替像素的值: 其中是以(x,y)为中心的领域,包含中心点自己,在领域中找到中值,并用中值…

中值滤波器 median filter

中值滤波 中值滤波器(median filter)是将每个像素替换为围绕这个像素的矩形领域内的中值,或”中值像素"。 通过平均的简单模糊对噪声图像,由其是有较大孤立的异常值非常敏感。少量具有较大偏差的点也会严重影响到均值滤波。中值滤波可以采用取中间…

中值滤波器

我们前面提到,使用平均操作或加权平均操作可以降低图像的噪声,并由此引出了空间滤波器的概念。 这种平均操作或加权平均操作的空间滤波器,根据平均操作的特点,可以叫做均值滤波器。均值,就是平均值得意思。我们在《统…

C Primer Plus 第1章 初识C语言 笔记

C语言的起源 1972年,贝尔实验室的丹尼斯里奇(Dennis Ritch)和肯汤普逊(Ken Thompson)在开发UNIX操作系统时设计了C语言。 选择C语言的理由 用C语言编写的程序更易懂、更可靠。C语言充分利用了当前计算机的优势&…

C语言 基于结构体的程序设计(PTA)

一、实验目的 1.掌握C语言中结构体类型的定义和结构体变量的定义和引用。 2.掌握用结构指针传递结构数据的方法。 二、实验内容 1、 计算职工工资 给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输…

C语言学习笔记(kk-zkx)

前言 流行的编程语言编程语言的大致发展历程编程语言应用数据在内存中的储存程序载入内存ASCII编码GB2312和GBKUnicode字符集(统一码,万国码)就业坑,当心 编程语言:用来控制计算机,让计算机为我们做事情的语…

C语言简介--学前必备知识

关键字 32个关键字: C和C的关系 C 主要在C语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。C支持面向过程编程、面向对象编程和泛型编程,而C语言仅支持面向过程编程。就面向过程编程而言&a…

C语言入门篇——文件操作篇

目录 1、为什么使用文件 2、什么是文件 2.1程序文件 2.2数据文件 2.3文件名 3、文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 4、文件的顺序读写 5、文件的随机读写 5.1fseek 5.2ftell 5.3rewind 6、文本文件和二进制文件 7、文件读取结束的判定 8、文件…

C语言基础之13:文件输入/输出

Tips1: 函数:fopen()、getc()、putc()、exit()、fclose() fprintf()、fscanf()、fgets()、fputs() rewind()、fseek()、ftell()、fflush() fgetpos()、fsetpos()、feof()、ferror() ungetc()、setvbuf()、fread()、fwrite() 如何使用C标准I/O系列的函数…

01是c语言,01-C语言-简介

一、C语言的起源 1972年,由贝尔实验室的丹尼斯.里奇和肯.汤普逊在开发UNIX系时设计C语言。C语言是在B语言基础上进行设计的。C 语言设计的初衷是将其作为程序员使用的 一种编程工具,因此,其主要目标是成为有用的语言。 二、C语言的特性 设计特…