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 ...
随机推荐
- Spring Boot 集成 Swagger2 教程
上篇讲过 Spring Boot RESTful api ,这篇简单介绍下 SwaggerUI 在 Spring Boot 中的应用. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可 ...
- 实时监听 mysql 操作,Linux 版
效果 场景:某数据库新增了某条记录,服务器可以监听到变化的数据与操作,如 增加一条记录: id = 1009,name=''test,number = 11 服务器监听结果: 实现过程 测试过程:数据 ...
- lc 0226
目录 ✅ 232. 用栈实现队列 描述 解答 c py ✅ 496. 下一个更大元素 I 描述 解答 java another java ✅ 232. 用栈实现队列 https://leetcode- ...
- easy flash &easy log
EASY FLASH: ENV 快速保存产品参数(k-v型no-sql数据库存储),支持 写平衡(磨损平衡) 及 掉电保护 功能 EasyFlash不仅能够实现对产品的 设定参数 或 运行日志 等信息 ...
- 蓝桥杯-铺瓷砖(dfs)
问题描述 有一长度为N(1< =N< =10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一 ...
- 【PAT甲级】1042 Shuffling Machine (20 分)
题意: 输入洗牌次数K(<=20),输入54张牌每次洗入的位置(不是交换的位置),输出洗好的牌. AAAAAccepted code: #define HAVE_STRUCT_TIMESPEC ...
- 一份非常值得一看的Java面试题
包含的模块 本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Sprin ...
- 「JLOI2012」树
「JLOI2012」树 传送门 不得不说这题的数据是真的水... 我们可以想到很明确的一条思路:枚举每一个点向根节点跳,知道路径和不小于 \(s\),恰好等于 \(s\) 就直接加答案. 跳的过程可以 ...
- Centos 下安装php
1 从php 官网下载源安装包 http://php.net/downloads.php // 安装php 扩展 2 yum install libxml2 libxml2-devel openssl ...
- 读书笔记 - The Hitchhiker's Guide to Python
网址 http://docs.python-guide.org/en/latest/ Reuqests库的作者写的经验 1. 项目需要一个好的结构 https://www.kennethreitz.o ...