python图像平滑处理原理

作者:ONEFPGA 时间:2023-07-07 00:21:11 

前言:

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

基本原理

  • 图像平滑的基本原理是,将噪声所在像素点的像素值处理为其周围临近像素点的值的近似值。

  • 图像平滑处理的方法有很多,比如均值滤波,方框滤波,高斯滤波,中值滤波,双边滤波。

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

1均值滤波

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

python图像平滑处理原理

原始图像像素

当前像素点为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像素点位置的新的像素。

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

python图像平滑处理原理

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()

python图像平滑处理原理

 原始图像:

python图像平滑处理原理

均值滤波后的图像 

2.高斯滤波

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

python图像平滑处理原理

高斯滤波卷积核示例

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.中值滤波

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

python图像平滑处理原理

中值滤波的处理过程为:将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()

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

来源:https://blog.csdn.net/ONEFPGA/article/details/125255288

标签:python,图像,平滑,处理
0
投稿

猜你喜欢

  • 中文用户名的js检验正则

    2022-03-26 03:19:32
  • Python深度学习实战PyQt5布局管理项目示例详解

    2023-03-11 08:47:37
  • vue3.0使用mapState,mapGetters和mapActions的方式

    2023-07-02 16:49:56
  • python实现在pandas.DataFrame添加一行

    2022-04-14 01:53:23
  • Mac Homebrew安装的MySQL无法远程登录的解决

    2024-01-14 12:12:56
  • 让表单 input 只能输入数字

    2008-06-08 13:54:00
  • MySQL 8.0.29 解压版安装配置方法图文教程

    2024-01-16 03:20:50
  • Python3使用TCP编写一个简易的文件下载器功能

    2021-02-20 09:58:07
  • 利用windows任务计划实现oracle的定期备份

    2009-08-31 12:24:00
  • 使用python模块plotdigitizer抠取论文图片中的数据实例详解

    2023-07-14 01:50:52
  • go项目中环境变量的配置

    2024-02-12 12:17:55
  • Python类中的魔法方法之 __slots__原理解析

    2023-10-01 18:49:51
  • wap开发 完整的WML文档结构详解

    2008-05-21 13:39:00
  • python实现简单成绩录入系统

    2023-09-16 08:00:27
  • Python微服务开发之使用FastAPI构建高效API

    2022-04-20 21:51:13
  • 关于TypeScript开发的6六个实用小技巧分享

    2024-04-16 08:59:26
  • python判断元素是否存在的实例方法

    2021-02-24 23:20:08
  • 将文本输入框内容加入表中的js代码

    2024-04-28 09:50:40
  • 一劳永逸彻底解决pip install慢的办法

    2023-08-10 20:30:52
  • Python生成数字图片代码分享

    2023-03-02 04:27:18
  • asp之家 网络编程 m.aspxhome.com