Opencv中常见的滤波方法
滤波(模糊)的概念和作用:
图像滤波增强处理实质上就是运用滤波技术来增强图像的某些空间频率特征,以改善地物目标与领域或背景之间的灰度反差。
遥感系统成像过程中可能产生的”模糊”作用,常使遥感图像上某些用户感兴趣的线性形迹、纹理与地物边界等信息显示得不够清晰,
不易识别。需要通过采用领域处理方法来分析、比较和调整像元与其周围相邻像元间的对比度关系,图像才能得到增加,也就是说
需要采用滤波增加技术处理。
一、空域滤波:使用空域卷积模板进行的图像处理,模板本身被称为空域滤波器
1.线性滤波器:
是线性系统和频域滤波概念在空域的自然延伸。
它包括:低通滤波器(低频的通过):平滑图像,去除噪音
高通滤波器:边缘增强,边缘提取
带通滤波器:删除特定频率
2.非线性滤波器:使用模板进行结果像素值的计算时,结果值直接取决于像素领域的值,而不使用加权和的计算方式
它包括:中值滤波:平滑图像,去除噪音
最大值滤波:寻找最亮点
最小值滤波:寻找最暗点
平滑滤波器的主要用途:降低噪音,对大图像处理前,删去无用的细小细节,平滑处理,恢复过分的锐化的图像,图像创艺
几种简单的低通滤波器:
均值滤波器:待处理像素点的值,等于其一定大小的领域内全体像素的平均值
加权平均滤波器:待处理像素点的输出值,等于其周围相邻像素的全体像素的加权平均值
中值滤波器:用模板区域内象素的中值,作为结果值。消除孤立的亮点(暗点),抑制噪声,可以比较好地保留边缘轮廓信息和图像的细节
锐化滤波器:增强图像中景物的边缘和轮廓,印刷中的细微层次强调,军事目标识别、定位等
它包括:
基本高通滤波器:在增强了边缘的同时,丢失了图像的层次和背景亮度。能够增强图像中的小尺度地物特征。
高增益滤波器:在增强图像的边缘和细节的同时,保持了原图像的低频成分。即增强了边缘又保留了层次,但在增强了边缘的同时也增强了噪音。
微分滤波器:直接使用,与高通类似。有两种特殊应用:梯度大于25,赋255,否则赋原值,图象中的边缘信息被突出,
背景保留。大于25,赋最大值255,否则为零,图像中的边缘信息被突出,同时图像也被二值化。
二、频域滤波:
低通滤波:
理想低通滤波器(ILPF)
Butterworth低通滤波器(BLPF)
指数抵通滤波器(ELPF)
梯形低通滤波器(TLPF)
高通滤波:
理想高通滤波器(IHPF)
Butterworth高通滤波器(BHPF)
指数高通滤波器(EHPF)
梯形高通滤波器(THPF)
带通/带阻滤波器:带通允许一定频率范围内的信号通过而阻止其他频率范围内的信号通过。
代码如下:
#!usr/bin/python
# coding=utf-8
import cv2
import random
import copy
import numpy as np
path = r"C:\Users\Administrator\Desktop\00001.jpg"
or_img = cv2.imread(path)
re_img = cv2.resize(or_img, (500, 300))
width = re_img.shape[0]
height = re_img.shape[1]
channel = re_img.shape[2]
cv2.imshow("re_img...",re_img)
cv2.waitKey(2000)

# 加噪声
per = 0.1 # 噪声占比
N_img = re_img.copy()
N_num = int(per * width * height)
print("N_num",N_num)
for i in range(N_num):
rows = np.random.randint(0, width-1)
cols = np.random.randint(0, height -1)
channel = np.random.randint(0,3)
if np.random.randint(0,2) == 0:
N_img[rows,cols,channel] = 0
else:
N_img[rows, cols, channel] = 255
cv2.imshow("N_img",N_img)
cv2.waitKey(3000)

# 中值滤波
medianBlur = cv2.medianBlur(N_img, 5)
# medianBlur(src, ksize[, dst]) -> dst
cv2.imshow("medianBlur",medianBlur)
cv2.waitKey(3000)
cv2.imwrite("./medianBlur.jpg",medianBlur)

# 均值滤波
Blur = cv2.blur(N_img, (5, 5))
# blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst
cv2.imshow("Blur",Blur)
cv2.waitKey(3000)
cv2.imwrite("./Blur.jpg",Blur)

# 高斯滤波
GaussianBlur = cv2.GaussianBlur(N_img, (5, 5), 0)
# GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst
cv2.imshow("GaussianBlur",GaussianBlur)
cv2.waitKey(3000)
cv2.imwrite("./GaussianBlur.jpg",GaussianBlur)

# 高斯双边滤波
GaussianbilateralFilter = cv2.bilateralFilter(N_img, 40, 75, 75)
# bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) -> dst
cv2.imshow("GaussianbilateralFilter",GaussianbilateralFilter)
cv2.waitKey(3000)
cv2.imwrite("./GaussianbilateralFilter.jpg",GaussianbilateralFilter)

# boxFilter
boxFilter = cv2.boxFilter(N_img, -1, (5,5), normalize=1)
# boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]]) -> dst
cv2.imshow("boxFilter",boxFilter)
cv2.waitKey(3000)
cv2.imwrite("./boxFilter.jpg",boxFilter)

Opencv中常见的滤波方法的更多相关文章
- Opencv中直线的表示方法
[blog算法原理]Opencv中直线的表示方法 一.问题的提出: 在实际项目编写过程中,需要对直线(Line)进行特定的处 ...
- C语言中常见的排序方法
在C语言中,常见的排序方法有冒泡法,排序法,插入法等等.所谓的冒泡法,就是对一组数字进行从大到小或者从小到大的一种排序方法.主要就是相邻的数值相互交换.从第一个数值开始,如果这相邻的两个数值排序与我们 ...
- opencv中的各种滤波设计
这篇文章写得太好了 ,感觉自己实在没有办法去补充这方面的知识点 我打算把高斯滤波和双边滤波还好好补充下 这篇文章转载自一个美丽的才女:小魏 连接地址:http://blog.csdn.net/xia ...
- 使用Opencv中matchTemplate模板匹配方法跟踪移动目标
模板匹配是一种在图像中定位目标的方法,通过把输入图像在实际图像上逐像素点滑动,计算特征相似性,以此来判断当前滑块图像所在位置是目标图像的概率. 在Opencv中,模板匹配定义了6种相似性对比方式: C ...
- Java中常见的排序方法
本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...
- windows中常见后门持久化方法总结
转自:https://www.heibai.org/category-13.html 前言 当我们通过各种方法拿到一个服务器的权限的时候,我们下一步要做的就是后渗透了,而后门持久化也是我们后渗透很重要 ...
- js中常见的字符串方法(3)
match() match()方法只接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象. 调用这个方法本质上与调用RegExp的exec()方法相同, var text = " ...
- java中常见的math方法
java.lang.Math : 绝对值: static int abs(int a) static long abs(long a) static float abs(float a) s ...
- Java Web项目开发中常见路径获取方法
项目绝对路径 String serverPath = request.getSession().getServletContext().getRealPath("/"); E:\J ...
随机推荐
- CodeForces-220B Little Elephant and Array
小象喜欢玩数组.他有一个数组a,由n个正整数组成,从1到n进行索引.让我们用索引i表示数字ai. 此外,小象对数组还有m个查询,每个查询的特征是一对整数lj和rj(1 ≤ lj ≤ rj ≤ n).对 ...
- java获取当前机器的公网ip
package com.Interface.util; import javax.servlet.http.HttpServletRequest; /** * 测试类 * * @author 华文 * ...
- 热部署简介及在eclipse安装插件JRebel进行热部署
一.热部署简介 1.热部署与热加载在应用运行的时候升级软件,无需重新启动的方式有两种,热部署和热加载.它们之间的区别是:(1).部署方式: 热部署在服务器运行时重新部署项目.热加载在运行时重新加载cl ...
- 自定义 Laravel 5.7 - 6.X 中验证邮箱的标题文本
原理解析: 验证邮箱在Laravel默认实现中是一个Notification,不是Mailable,而为了自定义验证邮箱的默认配置,我们先来查看一下 /vendor/laravel/framework ...
- 【Java 二维码】生成二维码
ZXingCodeEncodeUtils 生成及解析二维码项目 package utils; import java.awt.BasicStroke; import java.awt.Color; i ...
- 使用new时,会发生什么?
使用new来调用函数,或者说发生构造函数调用时,会自动执行下面的操作: 创建(或说构造)一个全新的对象. 这个新对象会被执行[[prototype]]连接. 这个新对象会绑定到函数调用的this. 如 ...
- 最全Python学习路线图【2020最新版】
2020年最新的python学习大纲,专为python高薪打造另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而 ...
- ROS-debug1 : 运行roscore时报错:Unable to contact my own server at...
一.问题描述 在终端运行roscore时,出现错误:Unable to contact my own server at...,如下图: 二.解决方法 以上问题是由于ROS环境变量ROS_MASTER ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:在 <tbody> 内的任一行启用鼠标悬停状态
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- http的3次握手与4次挥手
Http的3次握手: 第一次握手:客户端发送一个带SYN的TCP报文到服务器,表示客户端想要和服务器端建立连接. 第二次握手:服务器端接收到客户端的请求,返回客户端报文,这个报文带有SYN和ACK确认 ...