图像平滑是一种区域增强算法,在图像产生、传输和复制的过程中,会因为多方面原因而产生噪声(某一像素与周围像素点相比有明显不同)或丢失数据,因而图像的质量会降低。此时就需要对图像进行一定的增强处理,以降低图像质量带来的影响

图像噪声

图像噪声使得图像模糊,甚至淹没图像特征,造成分析困难。

常见的噪声分类:

  • 产生原因: 外部噪声、内部噪声
  • 统计特征: 平稳噪声 非平稳噪声
  • 幅度分布: 高斯噪声 椒盐噪声
  • 噪声频谱: 白噪声 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图像处理-图像平滑相关推荐

  1. OpenCV图像处理——图像平滑

    总目录 图像处理总目录←点击这里 五.图像平滑 可以看出图像被加入了椒盐噪声,需要平滑处理(去噪) img = cv2.imread('./image/lenaNoise.png') cv2.imsh ...

  2. Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

    作者 | 杨秀璋,责编 | 夕颜 题图  | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...

  3. OpenCV图像处理(Python)学习笔记

    OpenCV图像处理 OpenCV图像处理 第1章 OpenCV入门 第2章 图像处理基础 2.1 基本表示方法 2.2 感兴趣区域(ROI) 第3章 图像运算 3.1 加法运算 3.2 图像加权和 ...

  4. python调用opencv代码_Python调用OpenCV实现图像平滑代码实例

    主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波. 给图像增加噪声: import cv2 import numpy as np def test ...

  5. Python调用OpenCV实现图像平滑处理

    1 前言 上一节,我们介绍了C++调用OpenCV接口,如何实现对图像的平滑处理,本节我们介绍一下在Python环境下调用OPenCV接口,如何对图像进行平滑模糊处理.接下来我们依次介绍均值滤波器.中 ...

  6. Python+OpenCV图像处理(一篇全)

    参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...

  7. halcon opencv 图像处理面试指南

    珠海某上市公司算法总监: 1.相机标定的原理与坐标系之间的转换,如何转换 2.激光三角原理,如何搭建 3.测量拟合的过程中有哪些算子,原理什么,接着问5,跌代多少次?什么情况最优,如何优化, 4.那个 ...

  8. 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. 《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

最新文章

  1. JVM中可生成的最大Thread数量
  2. UVa 10051 Tower of Cubes(类似LIS)
  3. R构建SVM回归模型
  4. 杨氏矩阵定义及其查找的实现C++
  5. DataBinding基础使用二
  6. GridView 简单扩展
  7. JavaScript Onclick事件解释
  8. ubuntu下使用UVC摄像头
  9. 创建LEANGOO账号
  10. CORS - 引入预检请求的动机是什么?
  11. 查看修改apk里resources.arsc的资源文件的工具
  12. 查看IP访问服务器日志的次数
  13. 剑指offer第二版面试题46:把数字翻译成字符串(java)
  14. 太难受了,,公司规章制度
  15. Linux自动切割及删除日志脚本
  16. 计算机知识与技能竞赛配图,“高教杯”全国大学生先进制图技术与技能大赛
  17. 2021年大连12中高考成绩查询,2021年大连各高中高考成绩排名及放榜最新消息
  18. PyCharm和Jupyter使用对比
  19. 洛谷 P1255数楼梯 题解
  20. 卷积神经网络预测数据值,一维卷积神经网络 keras

热门文章

  1. [数据库]三级模式-两级映像详解
  2. Kotlin Flow响应式编程,基础知识入门
  3. [勇者闯LeetCode] 125. Valid Palindrome
  4. Mac系统如何在圣诞节让电脑屏幕下雪?
  5. 攻防世界-Web-新手练习区-simple js
  6. 北理工计算机山东录取分数线,山东省排名多少上北京理工大学?附学校近三年录取分数线...
  7. 手把手教会你:VMware Esxi系统安装步骤(版本7.0.3)
  8. Support for Pickling
  9. 创建一个vue脚手架项目
  10. eclipse和maven在生成报告的时候产生栈溢出