我是一名初学者,如果你发现文中有错误,请留言告诉我,谢谢


图像的模糊和平滑是同一个层面的意思,平滑的过程就是一个模糊的过程。

而图像的去噪可以通过图像的模糊、平滑来实现(图像去噪还有其他的方法)


那么怎么才能对一幅图像进行模糊平滑呢?

图像的模糊平滑是对图像矩阵进行平均的过程。相比于图像锐化(微分过程),图像平滑处理是一个积分的过程。

图像平滑过程可以通过原图像和一个积分算子进行卷积来实现。

下面介绍两种积分算子


全1算子

最简单的积分算子就是全1算子

利用全1算子可以对图像进行模糊平滑操作,有一定的去噪能力。

下面是python实例

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.cm as cm suanzi = np.ones((3,3)) # 创建全1算子 # 打开图像并转化成灰度图像
image = Image.open("pika.jpg").convert("L")
image_array = np.array(image) # 原图像与全1算子进行卷积
image2 = signal.convolve2d(image_array,suanzi,mode="same") # 将结果灰度值转化到0-255
image2 = (image2/float(image2.max()))*255 # 显示图像
plt.subplot(2,1,1)
plt.imshow(image_array,cmap=cm.gray)
plt.axis("off")
plt.subplot(2,1,2)
plt.imshow(image2,cmap=cm.gray)
plt.axis("off") plt.show()

运行结果如下图,(为了看到效果,图像经过人工局部放大)

上图为原图像,下图为经过模糊处理图像

比较两幅图可以看出,全1算子有一定的模糊平滑效果


高斯算子

利用高斯算子进行模糊处理就是我们常听到的高斯模糊。

标准差为σ的高斯分布如下式

我们可以通过numpy模块的fromfunction()方法来生成高斯算子。

import numpy as np

# 乘以100是为了使算子中的数便于观察
# sigma指定高斯算子的标准差 def func(x,y,sigma=1):
return 100*(1/(2*np.pi*sigma))*np.exp(-((x-2)**2+(y-2)**2)/(2.0*sigma**2)) # 生成标准差都2的5*5高斯算子
a = np.fromfunction(func,(5,5),sigma=2) print(a)
# 结果
[[ 2.92749158 4.25947511 4.82661763 4.25947511 2.92749158]
[ 4.25947511 6.19749972 7.02268722 6.19749972 4.25947511]
[ 4.82661763 7.02268722 7.95774715 7.02268722 4.82661763]
[ 4.25947511 6.19749972 7.02268722 6.19749972 4.25947511]
[ 2.92749158 4.25947511 4.82661763 4.25947511 2.92749158]]

对上面的5*5高斯算子每个元素进行四舍五入,可以得到下面矩阵

看到有些地方直接用上面的矩阵对图像进行高斯模糊,实际上是运用的是标准差为2的高斯近似算子。

利用高斯算子对图像进行模糊,程序如下

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import scipy.signal as signal # 生成高斯算子的函数
def func(x,y,sigma=1):
return 100*(1/(2*np.pi*sigma))*np.exp(-((x-2)**2+(y-2)**2)/(2.0*sigma**2)) # 生成标准差为2的5*5高斯算子
suanzi = np.fromfunction(func,(5,5),sigma=2) # 打开图像并转化成灰度图像
image = Image.open("pika.jpg").convert("L")
image_array = np.array(image) # 图像与高斯算子进行卷积
image2 = signal.convolve2d(image_array,suanzi,mode="same") # 结果转化到0-255
image2 = (image2/float(image2.max()))*255 # 显示图像
plt.subplot(2,1,1)
plt.imshow(image_array,cmap=cm.gray)
plt.axis("off")
plt.subplot(2,1,2)
plt.imshow(image2,cmap=cm.gray)
plt.axis("off") plt.show()

运行结果如下图,(为了看到效果,图像经过人工局部放大)

上图为原图像,下图为经过高斯模糊处理图像

对比高斯算子和全1算子,可以看出,高斯算子的模糊想过似乎更好。

而且,我们可以通过更改高斯算子的标准差和维数来调整模糊效果

一般来说,高斯算子标准差越大,维数越大,图像越模糊。


参考列表

1.《python计算机视觉编程》

2.度娘,感谢那些热爱分享知识的朋友

Python计算机视觉3:模糊,平滑,去噪的更多相关文章

  1. python计算机视觉2:图像边缘检测

    我是一名初学者,如果你发现文中有错误,请留言告诉我,谢谢 如果需要检测到图像里面的边缘,首先我们需要知道边缘处具有什么特征. 对于一幅灰度图像来说,边缘两边的灰度值肯定不相同,这样我们才能分辨出哪里是 ...

  2. Python 代码实现模糊查询

    Python 代码实现模糊查询 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列 ...

  3. python计算机视觉1:基本操作与直方图

    本文主要内容来源于书籍<python计算机视觉编程> 我是一名初学者,如果你发现文中有错误,请留言告诉我,谢谢 PIL模块 PIL模块全程为Python Imaging Library,是 ...

  4. 《Python计算机视觉编程》

    <Python计算机视觉编程> 基本信息 作者: (美)Jan Erik Solem 译者: 朱文涛 袁勇 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:978711535 ...

  5. 10 行 Python 代码实现模糊查询/智能提示

    10 行 Python 代码实现模糊查询/智能提示   1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...

  6. 基于python的小波阈值去噪算法

    https://blog.csdn.net/alwaystry/article/details/52756051 发表于 2018-01-10 16:32:17 嵌入式设计应用 +关注 小波图像去噪原 ...

  7. Python札记 -- MongoDB模糊查询

    最近在使用MongoDB的时候,遇到了使用多个关键词进行模糊查询的场景.竹风使用的是mongoengine库. 查了各种资料,最后总结出比较好用的方法.先上代码,后面进行详细说明.如下: #!/usr ...

  8. 推荐一个计算机视觉图书:python计算机视觉编程

    编辑部的主页:好像没啥用 http://shop.oreilly.com/product/0636920022923.do 每章的代码,github上面的:中文版 https://github.com ...

  9. python计算机视觉项目实践

    这是一个贝叶斯模型的计算机视觉小项目.希望大家通过这个简单的项目知道一般的计算机视觉项目是怎样操作的. 我先讲题目放在这里希望有兴趣的童鞋花一周的时间思考并用python实现.一周以后我来发布我的详细 ...

随机推荐

  1. HDFS配置文件内容解释

    配置概述 hadoop-env.sh 一个可由hadoop脚本调用的bourne shell文件,它制定hadoop要用的JDK环境变量.守护进程JDK选项.pid文件和log文件夹 core-sit ...

  2. [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  3. final关键字的作用

    final 可以修饰类.方法.变量. (1):final修饰的变量是一个常量,只能被赋值一次. 常量一般使用final声明,如: public static final String CHINA = ...

  4. 【转】CTS tests 4.2_r4

    原文网址:http://www.xuebuyuan.com/1722006.html Precondition: 1.Get android sdk 2.Set adb to environment ...

  5. HDU 1251 字典树(前缀树)

    题目大意 :Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).(单词互不相同) ...

  6. 线段树(build,insert,dfs操作)

    模板原型: 解决零散数点在已知线段上的出现次数.思想是将线段用长线覆盖,将长线转化成线段树.用权值记录各个数点出现的次数,最后进行查询.代码解释见注释. #include <bits/stdc+ ...

  7. VS 2012 显示Link的参数

    VC 通过Link将cl编译出来的.obj文件链接到一起.不过默认设置还是看不到究竟是怎么做的.需要如下设置: 右键点击工程,选择Properties菜单,然后选择左边的Linker->Gene ...

  8. 【转】Linux下编译ffmpeg

    1.下载ffmpeg.下载网址:http://www.ffmpeg.org/download.html 2.解压缩tar -zxvf ffmpeg-2.0.1.tar.gz 3.配置,生成Makefi ...

  9. Android 之 ExpandableListView 的使用

    喜欢显示好友QQ那样的列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到an ...

  10. Unity 屏幕适配小脚本

    屏幕适配是可以通过代码实现的,相信给你时间就一定能写出来. 我们公司貌似没有分辨率适配框架通常对应小屏幕的苹果4要额外设置下等等就完了! 屏幕适配框架实现思路:  通过代码获取当前的分辨率 –> ...