前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV图像处理(十三)---图像滤波

OpenCV图像处理(十三)---图像滤波

作者头像
用户5410712
发布2022-06-01 19:13:29
4570
发布2022-06-01 19:13:29
举报
文章被收录于专栏:居士说AI

热力学第一定律(the first law of thermodynamics)就是不同形式的能量在传递与转换过程中守恒的定律,表达式为△U=Q+W。表述形式:热量可以从一个物体传递到另一个物体,也可以与机械能或其他能量互相转换,但是在转换过程中,能量的总值保持不变。其推广和本质就是著名的能量守恒定律。

该定律经过迈尔 J.R.Mayer、焦耳 J.P.Joule等多位物理学家验证。热力学第一定律就是涉及热现象领域内的能量守恒和转化定律。十九世纪中期,在长期生产实践和大量科学实验的基础上,它才以科学定律的形式被确立起来。

前言

在上一期的文章中,我们学习了图像阈值化(二值化)处理方法,阈值化操作很实用,特别是以后的去除噪点,图像分割等等都会涉及到一定的阈值操作。今天我们继续来学习图像的另一个技术--图像滤波。

一、图像滤波

一、图像滤波简介

滤波的在数字信号处理这门课程中的本义是,对各种数字信号中的某一或指定频率进行过滤(也可以理解为不想要的频率),最后筛选出我们想要的频率的信号,这即是滤波的过程,也是目的。我们常见的拍摄的图像中或多或少存在一些噪声,常见的图像噪声如高斯噪声、瑞利噪声、椒盐噪声等。这些噪声体现在图像上也就是一些像素值不合理像素(何为不合理,可以简单的理解为过大或者过小的像素,类似白点,黑点 等等),因此我们要对这些不合理的像素进行滤波,常见滤波操作有均值滤波、中值滤波、高斯滤波和双边滤波等。

1.1 原始图片

(蔚蓝色的星球)

(澄碧如洗的蓝天)

(海天一色的美景)

1.2 代码实践

代码语言:javascript
复制
# cv2.filter2D()滤波
import cv2
import numpy as np

img_path = './test_01.jpg'
image = cv2.imread(img_path)
read_image = cv2.imread(img_path, 0)

# 定义滤波核大小
filter_kernel = np.ones((3, 3), np.float32)/9
# 调用2D滤波器函数,跟之前一样,我们不用重点解释了,直接带参数就行
# 感兴趣的可以查看其他参数代表含义
dst_img = cv2.filter2D(read_image, -1, filter_kernel)
# 显示图像 进行对比
cv2.imshow('dst_img', dst_img)
cv2.imshow('src_image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果展示:

(可以看到,滤波后的图像变得模糊了,因此,模糊也是滤波的一个作用,当然,我们一般形容滤波的作用是滤掉不需要的像素值,尽量使之平均,不至于高低不平。)

均值滤波:

OpenCV中有一个专门的平均滤波模板供使用------归一化卷积模板,所有的滤波模板都是使卷积框覆盖区域所有像素点与模板相乘后得到的值作为中心像素的值。OpenCV中均值模板可以用cv2.blur,比如一个3*3的模板其实就可以如下表示;

这里的意思就是对这个M大小的像素区域进行对点相乘 ,然后各个相乘的结果相加 最后平均(除以9)。

代码语言:javascript
复制
# 均值滤波 cv2.blur(),
import cv2
import numpy as np
# 读取为灰度图像
src_img = cv2.imread('test_02.jpg')
img = cv2.imread('test_02.jpg', 0)
# 均值滤波
image_blur = cv2.blur(img, (3, 3))  # 模板大小为3*3, 可自定义
cv2.imshow('src_img', src_img)
cv2.imshow('image_blur', image_blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果展示:

(可以看到经过滤波后的图像与原图对比不是那么清晰,但滤波操作却十分的必要。)

代码语言:javascript
复制

#高斯双边滤波
import cv2
img=cv2.imread('test_03.jpg',1)
cv2.imshow('src',img)
#后面两个数字:空间高斯函数标准差,灰度值相似性标准差
dst=cv2.bilateralFilter(img,15,35,35)
cv2.imshow('dst',dst)
cv2.waitKey(0)

(可以看到高低双边滤波似乎变化不大,但别忘了像素分布取值已经不同了哦)

结语

今天的分享到此结束了,滤波操作将会是以后的图像处理和视频处理的基本操作,大家一定要记得哦,如果觉得调库过于硬化,大家可以看懂源码或者懂了数学原理后进行代码重写哦。

我们下期再见!

编辑:玥怡居士|审核:小圈圈居士

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT进阶之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是智能、强大、全面的多媒体数据处理服务,行业支持最全面的音视频编码标准,基于自研编码内核和AI算法,提供音视频转码和增强、媒体智能、质检评测等能力,帮助您提升媒体质量、降低成本,满足各类场景的音视频处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档