博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python计算机视觉3:模糊,平滑,去噪
阅读量:7122 次
发布时间:2019-06-28

本文共 2439 字,大约阅读时间需要 8 分钟。

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


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

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


 

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

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

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

下面介绍两种积分算子


 

 全1算子 

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

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

下面是python实例

import numpy as npfrom PIL import Imageimport matplotlib.pyplot as pltimport matplotlib.cm as cmsuanzi = 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-255image2 = (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 npfrom PIL import Imageimport matplotlib.pyplot as pltimport matplotlib.cm as cmimport 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-255image2 = (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.度娘,感谢那些热爱分享知识的朋友

转载于:https://www.cnblogs.com/smallpi/p/4562345.html

你可能感兴趣的文章
安装mysql 配置环境变量
查看>>
一学就会的django项目服务器部署nginx-uwsgi-django/build
查看>>
ICPR 2018|阿里巴巴读光OCR及MTWI数据集亮相引关注
查看>>
对象存储oss中bucket中存在的文件夹怎么移动或者复制到另一个账号中的对象存储oss中???...
查看>>
RocksDB Write Prepared Policy
查看>>
那些我希望在一开始使用 Zsh(oh-my-zsh) 时就知道的
查看>>
为节省内存,Firefox 将用新方式阻止加载没用到的标签页
查看>>
JDBC学习再小结
查看>>
P3 项目轶事之面试
查看>>
屌炸天,JDK8的排序大法!!
查看>>
android兼容oppo手机刘海屏解决方案
查看>>
html中让input标签只读不可编辑的方法
查看>>
IOS隐藏键盘
查看>>
代码为什么那么乱! 换种方法学面向对象
查看>>
WPF中动态添加控件,并为控制指定样式
查看>>
Aruba:物联网有望在2019年大规模应用
查看>>
区块链应用场景:征信和权属管理
查看>>
CES Asia专题|中国移动发布全球最小通信模组,助力物联网发展
查看>>
【MySql】赶集网mysql开发36条军规
查看>>
服务越好收入越高,300万快递小哥有了终身成长体系
查看>>