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 ...
随机推荐
- 拼接 字典序min
给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字符串拼起来之后形成的字符串具有最低的字典序. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个 ...
- 安装go和goland
1.建议去go语言中文网下载,网址:https://studygolang.com/dl ,下图是下载页面及包介绍 2.Windows版安装 3.在cmd命令行窗口输入“go version”可以查看 ...
- thinkphp 取消跳转提示
$this->redirect('admin'); 就是直接用redirect
- JavaScript的发展史
一.JavaScript发展历程 1. 诞生 JavaScript因互联网而生,紧跟浏览器的发展而发展. 1990年,欧洲核能研究所(CERN)科学家在互联网(Internet)基础上,发明了 ...
- scrapy-redis分布式
scrapy是python界出名的一个爬虫框架,提取结构性数据而编写的应用框架,可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 虽然scrapy 能做的事情很多,但是要做到大规模的分 ...
- [Misc] ZSH 常用快捷键
安装 zsh 终端执行 brew install zsh 终端执行 vim ~/.bash_profile 命令,打开 .bash_profile 文件 如果没有 vim,请自行安装 在打开的文件中, ...
- nginx防盗链处理模块referer和secure_link模块
使用场景:某网站听过URI引用你的页面:当用户在网站点击url时:http头部会通过referer头部,将该网站当前页面的url带上,告诉服务本次请求是由这个页面发起的 思路:通过referer模块, ...
- 3 HTML标题&元素&图像&属性&字体增强&链接&头部标签与元素
HTML标题(heading) 通过<h1>~~~<h6>定义,每个元素代表文档中不同级别的内容. h1表示主标题,the main heading , h2,3分别表示二级. ...
- py related issues
在python中安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) pip inst ...
- Linux centosVMware Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间
一.Nginx访问日志 vim /usr/local/nginx/conf/nginx.conf //搜索log_format 日至格式 改为davery格式 $remote_addr 客户端IP ...