python图像平滑处理原理

目录
  • 前言:
  • 基本原理
  • 1均值滤波
    • 1.1函数语法
  • 2.高斯滤波
    • 2.1函数语法
  • 3.中值滤波
    • 3.1函数语法

前言:

图像滤波是图像处理和计算机视觉中最常用、最基本的操作。主要是去除图像中的噪声,因为图像平滑处理过程中往往会使得图像变的模糊,因此又叫模糊处理。

基本原理

  • 图像平滑的基本原理是,将噪声所在像素点的像素值处理为其周围临近像素点的值的近似值。
  • 图像平滑处理的方法有很多,比如均值滤波,方框滤波,高斯滤波,中值滤波,双边滤波。

(这里就不讲公式推导了)

1均值滤波

在进行均值滤波的时候要考虑需要对周围多少个像素去平均值,即确定核 的大小,通常情况下都是以当前像素点为中心,读行数和列数相等的一块区域内的所有像素点求平均。将计算得到的结果作为该点的像素。

原始图像像素

当前像素点为226的位置,我们对其周围5x5区域内像素点求平均计算方法为:

新值=(197+25+106+156+159+149+40+107+5+71+163+198+226+223+156+222+37+68+233+157+75+193+250+2+42)/25

计算得到的新值即为226像素点位置的新的像素。

其中均值滤波的核如下所示:

1.1函数语法

在OpenCV中,实现均值滤波的函数是cv2.blur(),语法格式如下:

dst=cv2.blur(src,ksize,anchor,borderType)
  • dst是返回值,表示进行均值滤波后得到的结果
  • src是需要处理的图像,即原始图像,图像的深度有CV_8U,CV_16U,CV16S,CV32F,CV_64F.
  • ksize是核 的大小,
  • anchor是锚点,一般情况该值直接默认即可
  • borderType是边界样式,该值决定以何种方式处理边界,一般情况下不需要考虑该值的取值,直接默认即可。

因此函数cv2.blur()的一般形式为:

dst=cv2.blur(src,ksize)

接下来看一段程序:

import cv2 as cv
img=cv.imread(r'F:\AI\photo\test\lena.jpg')
blurImg=cv.blur(img,(5,5))
print('imgshape',img.shape)
print('blurImg',blurImg.shape)
cv.imshow('img',img)
cv.imshow('blurImg',blurImg)
cv.waitKey()
cv.destroyAllWindows()

 原始图像:

均值滤波后的图像

2.高斯滤波

均值滤波中,其邻域内每个像素的权重都是一样的,在高斯滤波中,中心点的权重值加大,远离中心点的权重值减少,在此基础上计算邻域内各个像素值不同权重的和。

高斯滤波卷积核示例

2.1函数语法

dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType)

式中:

  • dst为高斯滤波后得到的结果
  • src是需要处理的图像,
  • ksize是滤波卷积核。需要注意的是滤波核 的值必须是奇数
  • sigmaX是卷积在水平方向的标准差,或者X方向求导
  • sigmaY是卷积在垂直方向的标准差,或者说Y方向上
  • bordenType是边界类型

因此高斯滤波的一般形式为:

dst=cv2.GaussianBlur(src,ksize,0,0)

程序演示:

import cv2 as cv
img=cv.imread(r'F:\AI\photo\test\lena.jpg')
GS_blurImg=cv.GaussianBlur(img,(5,5),1,1)
print('imgshape',img.shape)
print('blurImg',GS_blurImg.shape)
cv.imshow('img',img)
cv.imshow('GS_blurImg',GS_blurImg)
cv.waitKey()
cv.destroyAllWindows()

相比原始图像,高斯滤波处理后的图像模糊了一些,但是相对于均值滤波来说,要好一些,这是因为高斯滤波卷积核在中心点的权重更高。

3.中值滤波

中值滤波就是将当前像素点及其邻域内的像素点排序后取中间值作为当前值的像素点。

中值滤波的处理过程为:将226像素点周期的8个像素点一起排序即5,37,40,68,107,198,223,223,226,所以226像素点的新 的像素值为107.

3.1函数语法

dscv2.medianBlur(src,ksize)

其中需要注意的是ksize核的大小必须是比1大的奇数,比如3,5,7等

import cv2 as cv
img=cv.imread(r'F:\AI\photo\test\lena.jpg')
medianblurImg=cv.medianBlur(img,5)
cv.imshow('img',img)
cv.imshow('medianblurImg',medianblurImg)
cv.waitKey()
cv.destroyAllWindows()

在中值滤波处理中,噪声成分很难被选中,所以可以在几乎不影响原有图像的情况下去除所有的噪声,但是由于需要进行排序等操作,中值滤波需要的运算较大。中值滤波对椒盐噪声去除效果较明显,下次补充,还有双边滤波以及方框滤波后面补充。

到此这篇关于python图像平滑处理原理的文章就介绍到这了,更多相关python 图像平滑处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • OpenCV-Python实现图像平滑处理操作

    什么是图像平滑处理 在尽量保留图像原有信息的情况下,过滤掉图像内部的噪声,这一过程我们称之为图像的平滑处理,所得到的图像称为平滑图像. 那么什么是图像的噪声呢? 图像的噪声就是图像中与周围像素点差异较大的像素点.噪声的处理就是将其更改为临近像素点的近似值,使图像更平滑. 图像平滑处理的噪声取值的方式有以下6种: (1)均值滤波 (2)方框滤波 (3)高斯滤波 (4)中值滤波 (5)双边滤波 (6)2D卷积(自定义滤波) 均值滤波 均值滤波是指用当前像素点周围N*N个像素点的均值来代替当前像素值.

  • Python中的图像处理之Python图像平滑操作

    目录 前言 一. Python准备 二. Python仿真 三. 小结 前言 随着人工智能研究的不断兴起,Python的应用也在不断上升,由于Python语言的简洁性.易读性以及可扩展性,特别是在开源工具和深度学习方向中各种神经网络的应用,使得Python已经成为最受欢迎的程序设计语言之一.由于完全开源,加上简单易学.易读.易维护.以及其可移植性.解释性.可扩展性.可扩充性.可嵌入性:丰富的库等等,自己在学习与工作中也时常接触到Python,这个系列文章的话主要就是介绍一些在Python中常用一

  • python图像平滑处理原理

    目录 前言: 基本原理 1均值滤波 1.1函数语法 2.高斯滤波 2.1函数语法 3.中值滤波 3.1函数语法 前言: 图像滤波是图像处理和计算机视觉中最常用.最基本的操作.主要是去除图像中的噪声,因为图像平滑处理过程中往往会使得图像变的模糊,因此又叫模糊处理. 基本原理 图像平滑的基本原理是,将噪声所在像素点的像素值处理为其周围临近像素点的值的近似值. 图像平滑处理的方法有很多,比如均值滤波,方框滤波,高斯滤波,中值滤波,双边滤波. (这里就不讲公式推导了) 1均值滤波 在进行均值滤波的时候要

  • 用Python解决计数原理问题的方法

    前几天遇到这样一道数学题: 用四种不同颜色给三棱柱六个顶点涂色,要求每个点涂一种颜色,且每条棱的两个端点涂不同颜色,则不同的涂色方法有多少种? 当我看完题目后,顿时不知所措.于是我拿起草稿纸在一旁漫无目的地演算了一下,企图能找到解决方法.结果一无所获.于是打算通过程序算法解决这个问题.经过2个多小时的研究,终于完成了代码,并求得了答案. 由于Python写起来比较方便而且本人比较喜欢Python的语法,所以研究算法时我通常采用Python,此次也不例外.以下就是整个算法的实现过程. 两种算法 我

  • python中self原理实例分析

    本文实例讲述了python中self原理.分享给大家供大家参考.具体分析如下: 类的方法与普通的函数只有一个特别的区别--它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值.这个特别的变量指对象本身,按照惯例它的名称是self. 假如你有一个类称为MyClass和这个类的一个实例MyObject.当你调用这个对象的方法 MyObject.method(arg1, arg2) 的时候,这会由Python自动转为 MyClass.method(M

  • Python程序运行原理图文解析

    本文研究的主要是Python程序运行原理,具体介绍如下. 编译型语言(C语言为例) 动态型语言 一个程序是如何运行起来的?比如下面的代码 #othermodule.py def add(a, b): return a + b #mainrun.py import othermodule a = ['xiaoke', 1, 'python'] a = 'xiaoke string' def func(): a = -5 b = 257 print(a + b) print(a) if __name

  • Python装饰器原理与用法分析

    本文实例讲述了Python装饰器原理与用法.分享给大家供大家参考,具体如下: 1.装饰器的本质是函数,主要用来装饰其他函数,也就是为其他函数添加附加功能 2.装饰器的原则: (1) 装饰器不能修改被装饰的函数的源代码 (2) 装饰器不能修改被装饰的函数的调用方式 3.实现装饰器的知识储备 (1) Python中函数即'变量' a.变量在Python中的存储 x='Tomwenxing' y=x [说明]: 当Python解释器遇到语句x='Tomwenxing'时,它主要完成了两样工作: 1.在

  • Python multiprocessing多进程原理与应用示例

    本文实例讲述了Python multiprocessing多进程原理与应用.分享给大家供大家参考,具体如下: multiprocessing包是Python中的多进程管理包,可以利用multiprocessing.Process对象来创建进程,Process对象拥有is_alive().join([timeout]).run().start().terminate()等方法. multprocessing模块的核心就是使管理进程像管理线程一样方便,每个进程有自己独立的GIL,所以不存在进程间争抢

  • python中metaclass原理与用法详解

    本文实例讲述了python中metaclass原理与用法.分享给大家供大家参考,具体如下: 什么是 metaclass. metaclass (元类)就是用来创建类的类.在前面一篇文章<python动态创建类>里我们提到过,可以用如下的一个观点来理解什么是metaclass: MyClass = MetaClass() MyObject = MyClass() metaclass是python 里面的编程魔法 同时在前面一篇<python动态创建类>文章里描述动态创建class 的

  • Python queue队列原理与应用案例分析

    本文实例讲述了Python queue队列原理与应用.分享给大家供大家参考,具体如下: 作用: 解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系. 提高处理效率:FIFO = 现进先出,LIFO = 后入先出. 队列: 队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可.请求数据的线程只与这个队列容器存在关系,处理数据的线程down掉不会影响到请求数据的线程,队列会派给其他

  • Python装饰器原理与简单用法实例分析

    本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此简单.... 第一步 :从最简单的例子开始 # -*- coding:gbk -*- '''示例1: 使用语法糖@来装饰函数,相当于"myfunc = deco(myfunc)" 但发现新函数只在第一次被调用,且原函数多调用了一次''' def deco(func): print(&quo

  • Python多继承原理与用法示例

    本文实例讲述了Python多继承原理与用法.分享给大家供大家参考,具体如下: python中使用多继承,会涉及到查找顺序(MRO).重复调用(钻石继承,也叫菱形继承问题)等 MRO MRO即method resolution order,用于判断子类调用的属性来自于哪个父类.在Python2.3之前,MRO是基于深度优先算法的,自2.3开始使用C3算法,定义类时需要继承object,这样的类称为新式类,否则为旧式类 从图中可以看出,旧式类查找属性时是深度优先搜索,新式类则是广度优先搜索 C3算法

随机推荐