• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

(Python)从零开始,简单快速学机器仿人视觉Opencv—第十二节:几种常见的图像滤波、平滑

人工智能 Eragonl 3066次浏览 0个评论

事先准备

使用工具:Python3.5 使用库:cv2,numpy  

任务1:2D卷积

同一维信号一样,可以对2D图像实施低通滤波(LPF)和高通滤波(HPF)。LPF用于去除噪音,模糊图像,HPF用于找到图像的边缘。 OpenCV提供的函数cv.filter2D()可以对一幅图像进行卷积操作。练习一幅图像使用平均滤波器。举例下面是一个5X5的平均滤波器核:  
(Python)从零开始,简单快速学机器仿人视觉Opencv---第十二节:几种常见的图像滤波、平滑   操作如下,将核放在图像的一个像素A上,求与核对应的图像上25(5×5)个像素的和,再取平均数,用这个平均数代替像素A的值。重复以上操作直到将图像的每一个像素值都更新一遍。  

import cv2
import numpy as np

img = cv2.imread('1024.jpg')

kernel = np.ones((5,5),np.float32)/25

#cv.Filter2D(src, dst, kernel, anchor=(-1, -1))

dst = cv2.filter2D(img,-1,kernel)

cv2.imshow('original',img)
cv2.imshow('averaging',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

任务2:平均滤波

这是由一个归一化卷积框完成的,他只是用卷积框覆盖区域所有像素的平均值来代替中心元素。可以使用cv2.blur()和cv2.boxFilter()来实现, 我们需要设定卷积框的宽和高。同样是一个矩阵。  

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('1024.jpg')

blur = cv2.blur(img,(5,5))

while(1):
    cv2.imshow('image',img)
    cv2.imshow('blur',blur)
    k=cv2.waitKey(1)
    if k == ord('q'):#按q键退出
        break
cv2.destroyAllWindows()

  展示效果如下:  
(Python)从零开始,简单快速学机器仿人视觉Opencv---第十二节:几种常见的图像滤波、平滑  

任务3:高斯模糊

现在把卷积核换成高斯核,简单的说方框不变,将原来每个方框的值是相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余方框根据距离中心元素的距离递减,构成一个高斯小山包,原来的求平均数变成求加权平均数,权就是方框里的值。实现的函数是cv2.GaussianBlur()。需要指定高斯核的宽和高(必须是奇数),以及高斯函数沿X,Y方向的标准差。如果我们只指定了X方向的标准差,Y方向也会取相同值,如果两个标准差都是0.那么函数会根据核函数的大小自己计算,高斯滤波可以有效的从图像中去除高斯噪音。 也可以使用cv2.getGaussianKernel()自己构建一个高斯核。 如果要使用高斯模糊的话,上边的代码应改成:  

# 0是指根据窗口大小(5,5)来计算高斯函数标准差
blur = cv2.GaussianBlur(img,(5,5),0)

 

任务4:中值模糊

就是用与卷积框对应像素的中值来替代中心像素的值,这个滤波器经常用来去除椒盐噪声。前面的滤波器都是用计算得到的一个新值来取代中心像素的值,而中值滤波是用中心像素周围或者本身的值来取代他,他能有效去除噪声。卷积核的大小也应该是一个奇数。 需要给原始图像加上50%的噪声,然后用中值模糊。  

median = cv2.medianBlur(img,5)

 

任务5:双边滤波

函数cv2.bilateralFilter()能在保持边界清晰的情况下有效的去除噪音,但比较慢。这种高斯滤波器只考虑像素之间的空间关系,而不会考虑像素值之间的关系(像素的相似度),所以这种方法不会考虑一个像素是否位于边界,因此边界也会被模糊掉。 双边滤波在同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯函数确保只有邻近区的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算。所以能保证边界不会被模糊,因此边界处的灰度值变化比较大。  

#cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
# 9的意思是邻域直径,两个75的意思分别是空间高斯函数标准差,灰度值相似性高斯函数标准差 
blur = cv2.bilateralFilter(img,9,75,75)

   

总结

(本系列每周不定期更新,谢谢大家支持!)  


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明(Python)从零开始,简单快速学机器仿人视觉Opencv—第十二节:几种常见的图像滤波、平滑
喜欢 (0)

您必须 登录 才能发表评论!

加载中……