opencv图像处理-图像平滑
图像平滑是一种区域增强算法,在图像产生、传输和复制的过程中,会因为多方面原因而产生噪声(某一像素与周围像素点相比有明显不同)或丢失数据,因而图像的质量会降低。此时就需要对图像进行一定的增强处理,以降低图像质量带来的影响
图像噪声
图像噪声使得图像模糊,甚至淹没图像特征,造成分析困难。
常见的噪声分类:
- 产生原因: 外部噪声、内部噪声
- 统计特征: 平稳噪声 非平稳噪声
- 幅度分布: 高斯噪声 椒盐噪声
- 噪声频谱: 白噪声 1/f 噪声
- 噪声与信号之间的关系: 加性噪声 乘性噪声
模板卷积
模板操作是图像处理中常用的一种邻域运算方式,主要有卷积和相关操作。
模板:
常用矩阵表示,可以是一幅图像、一个滤波器或一个窗口,定义了参与运算的中心元素和邻域元素的相对位置及相关系数。
模板的中心元素(原点)表示将要处理的元素,一般取模板中心点,也可以根据需要选取非中心点。模板卷积(或相关):
指模板与图像进行卷积(或相关)运算,是一种线性滤波,其输出像素是输入邻域像素的线性加权和。
卷积核:
模板卷积中的模板又称为卷积核,其元素称为卷积系数、模板系数或加权系数,其大小及排列顺序决定了对图像进行邻域处理的类型。
卷积运算前需要将模板绕模板中心旋转 180°,其余运算过程与模板运算过程一致,因而统称模板卷积。
模板操作需要注意的两个问题:
图像边界问题
当模板原点移至图像边界时,部分模板系数可能在原图像中找不到与之对应的像素。
解决方法:
1.不做处理
2.扩充图像
可以复制原图像边界像素或利用常数来填充扩充的像素边界
计算结果可能超出灰度范围
均值滤波
原理: 用一个像素邻域平均值作为滤波结果,此时滤波器模板的所有系数取值均为 1,仅获取内核区域下所有像素的平均值,并替换中心元素,为保证输出像素值不越界,邻域平均的卷积核系数之和为 1
计算思路:
例如下图中,我们要计算红色点经过均值滤波后的像素值,蓝色区域 3×3 的矩阵为核,采用核处理后,红色点的像素值=(100+210+123+123+220+231+45+21+32)/9
均值滤波常用的一个 3×3 的 Box 模板(还有 5×5 等等),Box 模板中加权系数均相同,邻域中各像素对平滑结果的影响相同。
代码:
import cv2 as cv
img=cv.imread('noise.jpg')
blur=cv.blur(img,(3,3)) #(3×3)为核大小
cv.imshow('original',img)
cv.imshow('blur',blur)
cv.waitKey(0)
cv.destroyAllWindows()
处理结果:
方框滤波
代码:
import cv2 as cv
img=cv.imread('noise.jpg')
box=cv.boxFilter(img,-1,(3,3),normalize=True) # -1 表示颜色通道一致,(3,3)表示卷积核的大小 normalize表示归一化,如果选择归一化,则和均值滤波是一样的
box2=cv.boxFilter(img,-1,(3,3),normalize=False)
# normalize为false,不进行归一化处理,此时模板内像素进行处理时可能会发生越界的情况(即超过最大的像素值255),越界的情况会直接取最大值255
cv.imshow('boxfilter1',box)
cv.imshow('box2',box2)
cv.waitKey(0)
cv.destroyAllWindows()
处理结果(进行归一化):
处理结果(不进行归一化):
高斯滤波
原理:
- 高斯模板是通过对二维高斯函数进行采样(高斯模糊的卷积核里的数值满足高斯分布)、量化并归一化得到的,它考虑了邻域像素位置的影响,距离当前被平滑像素越近的点,加权系数越大,将加权平均值作为中心像素的输出结果。
- 加权的目的在于减轻平滑过程中造成的图像模糊
- 高斯模糊对于从图像中去除高斯噪声非常有效
高斯滤波常用的一个 3×3 模板
代码:
cv.GaussianBlur(src,ksize,sigmaX,sigmaY)
- ksize:卷积核大小
- sigmaX:X 方向标准偏差
- sigmaY:Y 方向标准偏差
如果仅指定 sigmaX,则将 sigmaY 与 sigmaX 相同。如果两个都为零,则根据内核大小进行计算。
import cv2 as cv
img=cv.imread('noise.jpg')
gauss=cv.GaussianBlur(img,(7,7),0)# (7,7)为卷积核大小
cv.imshow('original',img)
cv.imshow('gauss',gauss)
cv.waitKey(0)
cv.destroyAllWindows()
处理结果:
中值滤波
中值滤波是一种非线性滤波,它能在滤除噪声的同时很好地保持图像边缘。
原理: 以某像素为中心的窗口内所有像素的灰度按从小到大排序,取排序结果的中间值作为该像素的灰度值。
计算思路:
例如我们以 220 为中心选取了一个 3×3 的窗口,此时对窗口内所有像素按灰度大小进行排序,取中间值 123 作为中值滤波后的像素值。
代码:
cv.medianBlur(src,ksize)
- ksize:表示卷积核大小,必须是一个大于 1 的奇数
import cv2 as cv
img=cv.imread('noise.jpg')
media=cv.medianBlur(img,5)
cv.imshow('original',img)
cv.imshow('media',media)
cv.waitKey(0)
cv.destroyAllWindows()
处理结果:
上述滤波处理对比
import numpy as np
import cv2 as cv
img=cv.imread('noise.jpg')
blur=cv.blur(img,(3,3))
gauss=cv.GaussianBlur(img,(7,7),0)
media=cv.medianBlur(img,5)
res=np.hstack((img,blur,gauss,media)) # 水平拼接所有图像
cv.imshow('all',res)
opencv图像处理-图像平滑相关推荐
- OpenCV图像处理——图像平滑
总目录 图像处理总目录←点击这里 五.图像平滑 可以看出图像被加入了椒盐噪声,需要平滑处理(去噪) img = cv2.imread('./image/lenaNoise.png') cv2.imsh ...
- Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
作者 | 杨秀璋,责编 | 夕颜 题图 | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...
- OpenCV图像处理(Python)学习笔记
OpenCV图像处理 OpenCV图像处理 第1章 OpenCV入门 第2章 图像处理基础 2.1 基本表示方法 2.2 感兴趣区域(ROI) 第3章 图像运算 3.1 加法运算 3.2 图像加权和 ...
- python调用opencv代码_Python调用OpenCV实现图像平滑代码实例
主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波. 给图像增加噪声: import cv2 import numpy as np def test ...
- Python调用OpenCV实现图像平滑处理
1 前言 上一节,我们介绍了C++调用OpenCV接口,如何实现对图像的平滑处理,本节我们介绍一下在Python环境下调用OPenCV接口,如何对图像进行平滑模糊处理.接下来我们依次介绍均值滤波器.中 ...
- Python+OpenCV图像处理(一篇全)
参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...
- halcon opencv 图像处理面试指南
珠海某上市公司算法总监: 1.相机标定的原理与坐标系之间的转换,如何转换 2.激光三角原理,如何搭建 3.测量拟合的过程中有哪些算子,原理什么,接着问5,跌代多少次?什么情况最优,如何优化, 4.那个 ...
- 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
最新文章
- JVM中可生成的最大Thread数量
- UVa 10051 Tower of Cubes(类似LIS)
- R构建SVM回归模型
- 杨氏矩阵定义及其查找的实现C++
- DataBinding基础使用二
- GridView 简单扩展
- JavaScript Onclick事件解释
- ubuntu下使用UVC摄像头
- 创建LEANGOO账号
- CORS - 引入预检请求的动机是什么?
- 查看修改apk里resources.arsc的资源文件的工具
- 查看IP访问服务器日志的次数
- 剑指offer第二版面试题46:把数字翻译成字符串(java)
- 太难受了,,公司规章制度
- Linux自动切割及删除日志脚本
- 计算机知识与技能竞赛配图,“高教杯”全国大学生先进制图技术与技能大赛
- 2021年大连12中高考成绩查询,2021年大连各高中高考成绩排名及放榜最新消息
- PyCharm和Jupyter使用对比
- 洛谷 P1255数楼梯 题解
- 卷积神经网络预测数据值,一维卷积神经网络 keras
热门文章
- [数据库]三级模式-两级映像详解
- Kotlin Flow响应式编程,基础知识入门
- [勇者闯LeetCode] 125. Valid Palindrome
- Mac系统如何在圣诞节让电脑屏幕下雪?
- 攻防世界-Web-新手练习区-simple js
- 北理工计算机山东录取分数线,山东省排名多少上北京理工大学?附学校近三年录取分数线...
- 手把手教会你:VMware Esxi系统安装步骤(版本7.0.3)
- Support for Pickling
- 创建一个vue脚手架项目
- eclipse和maven在生成报告的时候产生栈溢出