您现在的位置是:首页 > 正文

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

2024-02-29 13:20:20阅读 0

1.中值滤波

优点:对椒盐噪声处理比较好
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。
在这里插入图片描述

(1)函数

medianBlur(src, ksize, dst=None):
src:输入的原始图像
Ksize:卷积核的大小(一个整数即可)
Dst:输出图像
注:当ksize大小为3或者5的时候,图像的位深应该是CV_8U, CV_16U, 或者 CV_32F。

(2)代码

import os
import cv2
import numpy as np

def MediumFilter(img_path='images/lenna_PapperNoise.png'):
    img_src=cv2.imread(img_path)
    img=cv2.resize(src=img_src,dsize=(450,450))
    img=cv2.medianBlur(img,ksize=3)
    cv2.imshow('img',img)
    cv2.imshow('img_src',img_src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    print('Pycharm')
    MediumFilter()

在这里插入图片描述
可以看到对于椒盐噪声的处理确实比较不错。

关于怎么生成椒盐噪声,方盒滤波,均值滤波:https://mydreamambitious.blog.csdn.net/article/details/125173270
关于高斯滤波:https://blog.csdn.net/Keep_Trying_Go/article/details/125203273


2.双边滤波

优点:可以保留边缘,在保留边缘的同时对边缘内的区域进行平滑处理
(进行美化)。

在这里插入图片描述

(1)函数讲解

bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None):
参数讲解:
Src:输入的原始图像
D:过滤期间使用的每个像素邻域的直径。如果为非正,则从sigmaSpace计算
sigmaColor:颜色空间过滤器的sigma值,该参数的值越大,意味着像素邻域内的更多颜色将混合在一起,从而产生更大的半等色区域
sigmaSpace:,如果该值较⼤,则意味着颜⾊相近的较远的像素将相互影响,从⽽使更⼤的区域中⾜够相似的颜⾊获取相同的颜⾊。当d>0时,d指定了邻域⼤⼩,那么不考虑sigmaSpace值,否则d正⽐于sigmaSpace.
Dst:输出图像
borderType:⽤于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT.

(2)关于d,sigmaColor和sigmaSpace的值选择

(1)一般为了简化,sigmaColor和sigmaSpace可以设置相同的值(下面都用sigma表示两者),如果sigma的值小于10的话,不会产生太大的影响;如果大于150的话,将产生非常强的影响(使图片卡通画)。
(2)如果选择的d大于5的话,那么执行将会非常慢,所以建议对于实时应用使用d=5;如果对于强噪声的,可以将d=9。

(3)代码实现

import os
import cv2
import numpy as np

def BilateralFilter_11(img_path='images/lenna.png'):
    img_src=cv2.imread(img_path)
    img=cv2.resize(src=img_src,dsize=(450,450))
    img=cv2.bilateralFilter(img,5,11,11)
    cv2.imshow('img',img)
    cv2.imshow('img_src',img_src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


def detectBilateralFilter():
    cap=cv2.VideoCapture(0)
    while cap.isOpened():
        OK,frame=cap.read()
        img_src = cv2.imread(frame)
        img = cv2.resize(src=img_src, dsize=(450, 450))
        img = cv2.bilateralFilter(img, 5, 11, 11)
        cv2.imshow('img', img)
        if cv2.waitKey(1)&0XFF==27:
            break
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    print('Pycharm')
    # BilateralFilter_11()
    # detectBilateralFilter()
    BilateralFilter_155()

在这里插入图片描述
当sigmaColor和sigmaSpace的值大于150时:

def BilateralFilter_155(img_path='images/lenna.png'):
    img_src=cv2.imread(img_path)
    img=cv2.resize(src=img_src,dsize=(450,450))
    img=cv2.bilateralFilter(img,5,155,155)
    cv2.imshow('img',img)
    cv2.imshow('img_src',img_src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述

网站文章

  • 【机试题(实现语言:python3)】在字符串中找出连续最长的数字串

    题目描述输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)本题含有多组样例输入。输入描述:输入一个字符串。输出描述:输出字符串中最长的数...

    2024-02-29 13:20:13
  • Linux 获取不到so文件

    服务无法找到so文件

    2024-02-29 13:19:42
  • 辗转相除法实现求两个数的最大公约数

    使用辗转相除法来实现求两个数的最大公约数。只需要先输入两个数字,然后就能输出这两个数字的最大公约数。#include <iostream>#include <algorithm>using names...

    2024-02-29 13:19:33
  • 爬坑--Qt中文编码问题

    另外在 QtCreator 中工具-选项-文本编辑器-行为-文件编码处 将默认编码改为 UTF-8,UTF-8 BOM 改为。Windows 识别 utf8 编码是依赖 BOM的,而 MSVC 在解析...

    2024-02-29 13:19:27
  • 【Linux】主机可以ping通虚拟机,虚拟机ping不了主机

    【Linux】主机可以ping通虚拟机,虚拟机ping不了主机

    笔者在win10VM虚拟机安装了Linux系统,测试网络时发现主机可以ping通虚拟机,但是虚拟机中无法ping到主机中。解决方法是:1.主机在更新与安全中打开安全中心2.选择防火墙进入高级设置3.点击入站规则,下拉找到文件和打印机共享ICMPv4,在右边操作中启用规则。 做到这边笔者就可以在虚拟机中ping通主机了,以上方法供大家参考。

    2024-02-29 13:19:19
  • 关于梅花雨控件在IFRAME中不能弹出的问题

    最近在做系统时发现,梅花雨控件在IFRAME以及AJAX控件中无法弹出日历控件,以往引用日历控件的方法都习惯用TextBox.Attributes.Add("onfocus","日历函数");这种方法在IFRAME中却无法使用,其实只要改为:TextBox.Attributes.Add("onclick","日历函数");即可。不过这个方法很别扭,更好的方法是在主页(即主框架)添加日历控件

    2024-02-29 13:18:50
  • Matlab 编程 Project Euler Problem 20 Factorial digit sum

    %Factorial digit sum_20.m%求100!结果的所有位值的总和%方法:通过数组的方式,将结果的每一位分别放置在数组中。%其中数组是倒序排列的,即第一位是个位,第二位是十位,......clear all;close all;sum_digit=zeros(1,200);  %设置 1 X 200 的数组sum_digit(1)=1;  %首位

    2024-02-29 13:18:43
  • 单链表 反转链表

    单链表 反转链表

    从键盘输入n个数字(n < 100),组成一个链表。将此链表反序之后输出。

    2024-02-29 13:18:35
  • 【Mac】mac系统上传文件到Linux服务器

    3. 选择安全文件传输sftp,点击右边服务器下的加号添加你要连接的远程服务器ip地址。4. 选中服务器,输入服务器对应的用户名,点击连接。7 再进入本地要上传的目录,本地命令前面加个 l。执行put -r 文件名称,将本地文件上传到远端。6. 先进入到远程服务器目录。1. 打开mac自带终端。5.输入密码,连接成功。2. 链接远程服务器。

    2024-02-29 13:18:06
  • 基本数据类型(如:int) 不属于object的子类为啥还能赋值给object呢?

    基本数据类型(如:int) 不属于object的子类为啥还能赋值给object呢?

    基本数据类型(如:int) 不属于object的子类为啥还能赋值给object呢?

    2024-02-29 13:17:58