美文网首页
OpenCV+Python图像滤波(平滑)+ 金字塔思想

OpenCV+Python图像滤波(平滑)+ 金字塔思想

作者: 音符纸飞机 | 来源:发表于2018-07-11 00:36 被阅读70次

图像处理中的滤波一般用于消除噪声,增强图像。

图像卷积(滤波)

数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。

dst = cv2.filter2D(img, ddepth, kernel)
# img为原图像
# ddepth是目标图像的图像深度,如CV_8U, CV_16U/CV_16S, CV_32F, CV_64F
#   -1表示与原图像深度一致。目标图像的深度必须大于等于原图像
# kernel 卷积核
实例
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('../laugh.jpg', 0)

kernel = np.ones((5, 5), np.float32) / 25
dst = cv2.filter2D(img, -1, kernel)

plt.subplot(121), plt.imshow(img, cmap='gray'), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(dst, cmap='gray'), plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
平均滤波

图像平滑(图像模糊)

图像平滑主要用的是低通滤波器,用于降噪,过滤图像中的高频信息,比如边界。OpenCV中实现了多种常用的低通滤波器。

平均滤波

dst = cv2.blur(img, kernel_size)
# 如(3,3)表示 [[1,1,1],[1,1,1],[1,1,1]]/9 的卷积核

高斯滤波

dst = cv2.GaussianBlur(img, kernel_size, sigma_X, sigma_Y=None, borderType=None)
# sigma_X 高斯卷积和在X方向上的标准差。
# sigma_Y的默认值表示与sigma_X相同
# 若sigma设为0, 会使用这个公式计算sigma: 0.3*((kernel_size-1)*0.5 - 1) + 0.8
# borderType 边缘扩展点插值类型,见cv2.BORDER_*
高斯函数
模拟人眼,关注中心区域,标准差\sigma越大,关注的区域越大,中心权重越低

卷积核可以拆分,减少计算量

中值滤波

去除椒盐噪声

dst = cv2.medianBlur(img, ksize)
# ksize必须是大于1的奇数

双边滤波(Bilateral Filter)

作用:过滤噪声的同时,保留边缘信息

  • 双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数。
  • 双边滤波的权重不仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程度、颜色强度,深度距离等),在计算中心像素的时候同时考虑这两个权重。
cv2.bilateralFilter(src, d, sigma_color, sigma_space)
# d 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会根据sigma_space计算该值。 
# sigma_color 颜色空间过滤器的sigma值
#       这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
# sigma_space  坐标空间中滤波器的sigma值
#       如果该值较大,则意味着颜色相近的较远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
#       当d>0时,d指定了邻域大小且与sigma_space无关,否则d正比于sigmaSpace。
# d越大,算法耗时越长

对于彩色图片,由于两种颜色中可能有其他完全不同的颜色,因此不像灰度图那样,仅仅是 blurred ,而是会产生 auras like 的奇怪的晕圈,所以在双边滤波的过程中,将RGB转换到 CIE-Lab 色彩空间,这个空间与人的主管色彩辨识能力相关,因此可以改善这一缺陷。

效果
import cv2
from matplotlib import pyplot as plt
# 以GBR颜色模型导入图像
img = cv2.imread('laugh.jpg')
# pyplot绘图时,彩色图像的信道顺序与opencv的不同,所以为了正常显示,必须改变颜色信道的顺序
b, g, r = cv2.split(img)
img = cv2.merge((r, g, b))

cv2.imshow("original", img)
dst1 = cv2.blur(img, (21, 21))
dst2 = cv2.GaussianBlur(img, (21, 21), 0)
dst3 = cv2.medianBlur(img, 21)
dst4 = cv2.bilateralFilter(img, 21, 75, 75)
titles = ["Original", "blur", "gaussian", "median", "bilateral"]
imgs = [img, dst1, dst2, dst3, dst4]
for i in range(5):
    plt.subplot(3, 2, i + 1), plt.imshow(imgs[i]), plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()
多种平滑滤波效果对比图

金字塔

降采样

金字塔其实就是降采样,但是直接降采样会损失信息,需要配合高斯滤波


原图、直接降采样、高斯+降采样
尺度空间

不同尺度适合不同尺寸的物体,合适的尺度永远未知。

拉普拉斯金字塔

高频细节在采样过程中被丢失,拉普拉斯金字塔会保留所有层所丢失的高频信息,用于图像恢复

中间一层就是保留的丢失的高频信息

相关文章

  • OpenCV+Python图像滤波(平滑)+ 金字塔思想

    图像处理中的滤波一般用于消除噪声,增强图像。 图像卷积(滤波) 数字图像是一个二维的离散信号,对数字图像做卷积操作...

  • OpenCV学习笔记(六)方框、均值、高斯滤波

    一、图像平滑与滤波概念 介绍图像滤波之前有必要了解一下图像平滑的概念。 图像平滑(smoothing)也称为图像模...

  • 三种图像处理方法(笔记补充中......)

    目前暂时只接触到椒盐噪声和高斯噪声(正态分布) 1.图像平滑(低通滤波) 图像平滑又称图像模糊,图像滤波,主要目的...

  • 图像平滑处理

    图像平滑处理(Smoothing Images)图像模糊处理(Blurring Images)图像滤波(Image...

  • Opencv-Python学习笔记八——图像平滑(滤波)smoo

    图像平滑、模糊处理 消除图像中的噪声成分叫作图像的平滑化或滤波操作 “平滑处理“(smoothing)也称“模糊处...

  • 滤波器的分类

    a.平滑空间滤波器:去除图像中不重要的细节,减少噪声b.锐化空间滤波器: a.平滑空间滤波器 线性滤波器(均值滤波...

  • python skimage图像处理(二)

    本文转自 python数字图像处理 图像简单滤波 对图像进行滤波,可以有两种效果:一种是平滑滤波,用来抑制噪声;另...

  • 7.6 2D卷积

    OpencV提供了多种滤波方式,来实现平滑图像的效果,例如均值滤波、方框滤波、高斯滤波、中值滤波等,大多数滤波方式...

  • opencv各种卷积核滤波器

    高斯滤波 使图像平滑,可以用来去除噪声。高斯滤波器将中心像素周围的像素按照高斯分布加权平均进行平滑化。 中值滤波 ...

  • 卷积,滤波,平滑

    图像处理基本概念——卷积,滤波,平滑 图像卷积:一种实现手段,可以说是数学在图像处理的一种延伸。图像滤波:一种图像...

网友评论

      本文标题:OpenCV+Python图像滤波(平滑)+ 金字塔思想

      本文链接:https://www.haomeiwen.com/subject/ibhcpftx.html