python+OpenCV图像处理(六)图像平滑与滤波

图像平滑与滤波

运用它,首先就要了解它,什么是平滑滤波?

      平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另一类是消除噪音。空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,从而使输出的图像变得模糊,因此需合理选择邻域的大小。

在看一下滤波的目的:

滤波的本义是指信号有各种频率的成分,滤掉不想要的成分,即为滤掉常说的噪声,留下想要的成分.这即是滤波的过程,也是目的。

 

  • 一是抽出对象的特征作为图像识别的特征模式;(在我未来将要进行的一个项目中将会用的到)
  • 另一个是为适应图像处理的要求,消除图像数字化时所混入的噪声。

有关平滑与滤波更多的介绍,可以查看百度词条:平滑与滤波

里面有对平滑与滤波详细的解释,我就不一 一介绍了,感谢词条的贡献者,感谢分享,非常感谢。

 

对于2D图像可以进行低通或者高通滤波操作,低通滤波(LPF)有利于去噪,模糊图像,高通滤波(HPF)有利于找到图像边界。

(一)2D滤波器cv2.filter2D( )

img = cv2.imread('kenan.jpg', 0)
kernel = np.ones((5, 5), np.float32)/25dst = cv2.filter2D(img, -1, kernel)
cv2.imshow('dst', dst)
cv2.imshow('yuantu', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(二)均值滤波

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

模板大小m*n是可以设置的。如果不想要前面的1/9,可以使用非归一化模板cv2.boxFitter。

cv2.blur()是一个通用的2D滤波函数,它的使用需要一个核模板。该滤波函数是单通道运算的,
如果是彩色图像,那么需要将彩色图像的各个通道提取出来,然后分别对各个通道滤波。

如果不想使用归一化模板,那么应该使用cv2.boxFilter(), 并且传入参数normalize=False

img = cv2.imread('kenan.jpg', 0)
blur = cv2.blur(img, (3, 5))  # 模板大小为3*5, 模板的大小是可以设定的
box = cv2.boxFilter(img, -1, (3, 5))
cv2.imshow('gray', img)
cv2.imshow('gray_new', blur)
cv2.imshow('gray_new2', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

(三)高斯模糊模板

在上一目录中,我们的卷积模板中的值全是1,现在把卷积模板中的值换一下,不全是1了,换成一组符合高斯分布的数值放在模板里,这时模板中的数值将会中间的数值最大,往两边走越来越小,构造一个小的高斯包。这样可以减少原始图像信息的丢失。

在OpenCV实现的函数为cv2.GaussianBlur()。对于高斯模板,我们需要制定的是高斯核的高和宽(奇数),沿x与y方向的标准差(如果只给x,y=x,如果都给0,那么函数会自己计算)。高斯 核可以有效的去除图像的高斯噪声。当然也可以自己构造高斯核,相关函数为:cv2.GaussianKernel()。

# 高斯模糊模板
img = cv2.imread('kenan.jpg', 0)
for i in range(2000):  # 在图像中加入点噪声_x = np.random.randint(0, img.shape[0])_y = np.random.randint(0, img.shape[1])img[_x, _y] = 255
blur = cv2.GaussianBlur(img, (5, 5), 0)  # (5,5)表示的是卷积模板的大小,0表示的是沿x与y方向上的标准差
cv2.imshow('img', img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果为:

(四)中值滤波模板

中值滤波模板就是用卷积框中像素的中值代替中心值,达到去噪声的目的。这个模板一般用于去除椒盐噪声。前面的滤波器都是用计算得到的一个新值来取代中心像素的值,而中值滤波是用中心像素周围(也可以使他本身)的值来取代他,卷积核的大小也是个奇数。

# 中值滤波模板
img = cv2.imread('kenan.jpg', 0)
for i in range(2000):  # 加入椒盐噪声_x = np.random.randint(0, img.shape[0])_y = np.random.randint(0, img.shape[1])img[_x][_y] = 255
blur = cv2.medianBlur(img, 5)  # 中值滤波函数
cv2.imshow('img', img)
cv2.imshow('medianblur_img', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果为:

可以看到,中值滤波对于这些白点噪声的去除,效果是非常好的。

(五)双边滤波

双边滤波(Bilateral  filter)是一种可以保证边界清晰的去噪的滤波器。之所以可以达到此去噪声效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差决定滤波器系数。它的构造比较复杂,即考虑了图像的空间关系,也考虑图像的灰度关系。双边滤波同时使用了空间高斯权重和灰度相似性高斯权重,确保了边界不会被模糊掉。

cv2.bilateralFilter(img, d, 'p1', 'p2')函数有四个参数需要,d是领域的直径,后面两个参数是空间高斯函数标准差和灰度值相似性高斯函数标准差。

# 双边滤波
img = cv2.imread('rose1.jpg', 0)
for i in range(2000):  # 添加椒盐噪声_x = np.random.randint(0, img.shape[0])_y = np.random.randint(0, img.shape[1])img[_x][_y] = 255
# 9表示的是滤波领域直径,后面的两个数字:空间高斯函数标准差,灰度值相似性标准差
blur = cv2.bilateralFilter(img, 9, 80, 80)
cv2.imshow('img', img)
cv2.imshow('blur_img', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果为:

双边滤波函数后面的两个参数设置的越大,图像的去噪越多,但随之而来的是图像ji将变得模糊,所以根据需要调整好后两个参数的大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch每次迭代训练前都重新对数据集进行采样形成平衡数据集

对于不平衡数据集的训练通常有两种方法: 一种是先用数据平衡的方法形成平衡数据集之后用于每一轮的训练,此时每轮训练的数据集是不变的,这一方法在pytorch的实现比较简单,即先构建好平衡数据集train_set,然后构建trai…

Delphi中动态调用DLL的方法

Delphi中动态调用dll的方法如下&#xff1a; function CallFunc(dllname, funcname: string; const param: array of const): DWORD; varhLib: THandle;pFunc: Pointer;intSize: Integer; beginResult : 0;hLib : LoadLibrary(PChar(dllname));if hLib <> 0 then beginpF…

语音助手再次敲响隐私保护警钟

来源&#xff1a; 中国科学报智能手机内置的语音助手已成为人们生活中的亲密伙伴&#xff0c;大家习惯于让它完成报时、查询天气等日常任务甚至与它聊天解闷。然而&#xff0c;近期多家科技公司被曝光以智能语音助手录制用户谈话&#xff0c;再通过人工对语音做标注和反馈&…

大数据深度解析NLP文本摘要技术:定义、应用与PyTorch实战

文章目录 大数据深度解析NLP文本摘要技术&#xff1a;定义、应用与PyTorch实战1. 概述1.1 什么是文本摘要&#xff1f;1.2 为什么需要文本摘要&#xff1f; 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 …

python+OpenCV图像处理(七)图像的形态学处理

图像的形态学处理 数学形态学&#xff08;Mathematical morphology&#xff09;是一门 建立在格论和拓扑学基础之上的图像分析学科&#xff0c;是数学形态学图像处理的基本理论。其基本的运算包括&#xff1a;腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、…

pandas取某一索引的数据

pandas.DataFrame.take(index) 返回给定位置索引中的元素。注意上面的index是元素的实际位置 举个例子&#xff1a; myList [[a, 10, 1.1],[b, 20, 2.2],[c, 30, 3.3],[d, 40, 4.4]] df1 pd.DataFrame(data myList) print(df1.take([2,3])) 输出&#xff1a; c 30 3.…

站立会议08

一、会议细节 时间   2014-4-27 21&#xff1a;10~21:40 地点   基教102 记录人   王岸城 二&#xff0c;会议记录 姓名今天你做了什么明天你要做什么今天遇到了什么问题王岸城记事本删除记事本修改无法使用数据库 苏月 实现登录和注册的连接 学习数据库 连接数据库信息…

【人工智能】机器人的未来发展:从工业自动化到知识自动化

来源&#xff1a;王飞跃博客【导读】智能时代的核心技术将是知识自动化&#xff0c;因此必须从一开始就加快、加强以软件形态为主的知识机器人的研发与应用&#xff0c;尽快形成软件和物理形态平行互动的新型机器人系统&#xff0c;并以此为突破口&#xff0c;引发下一代智能机…

python+OpenCV图像处理(八)边缘检测

边缘检测 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘检测是特征提取中的一个研究领域。 图像边缘检测大幅度地减少了数据量&#xff0c;并且剔除了…

os.path.join拼接错误

csv_dir r"D:\test" print(os.path.join(csv_dir, r\test.csv)) 如上述代码所示&#xff0c;此时拼接后的路径为“D:\a.csv”&#xff0c;不符合预期&#xff0c;那是因为os.path.join第二个参数开头不能为斜杠和反斜杠&#xff0c;改为如下代码之后正确&#xff1…

bzoj 4551[Tjoi2016Heoi2016]树

这题可以用并查集做&#xff0c;一开始统计一下记录每个点被标记了几次&#xff0c;除了被标记过的点外&#xff0c;其他节点都与其父亲所在集合合并&#xff0c;然后倒着做&#xff0c;做的时候如果有节点标记次数变为了0&#xff0c;则将其与其父亲合并。 代码 1 #include<…

python+OpenCV图像处理(九)图像金字塔

图像金字塔 图像金字塔是图像多尺度表达的一种&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩&#xff0c;一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低&#xff0c;且来源于同一张原始图的图像集合。其通…

ImportError: cannot import name ‘joblib‘

原因&#xff1a; 安装的Scikit-learn版本太高&#xff0c;我安装的版本是0.23.1 解决方法&#xff1a; 需要将Scikit-learn版本降到0.21以下 pip uninstall joblib scikit-learn sklearn pip install Scikit-learn0.20.4 或者直接安装joblib&#xff1a; pip install j…

3位物理学家获基础物理学特别突破奖

Peter van Nieuwenhuizen、Sergio Ferrara和Dan Freedman&#xff08;从左至右&#xff09;来源&#xff1a;中国科学报超引力理论是一个试图统一所有自然力的理论&#xff0c;在被提出40多年后&#xff0c;它是否能真实描述这个世界仍然悬而未决。尽管如此&#xff0c;该理论的…

python+OpenCV图像处理(十)霍夫变换简单图形检测

霍夫变换 霍夫变换&#xff08;Hough Transform&#xff09;是图像处理中从图像中识别几何形状的基本方法之一&#xff0c;应用很广泛&#xff0c;也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状&#xff08;如&#xff1a;直线、圆等&#xff09;。最基…

Windows下安装scikit-learn

在安装sklearn前&#xff0c;首先确保安装了Numpy、Scipy和matplotlib 安装Numpy&#xff1a; 首先到https://pypi.org/project/numpy/#files下载安装包 注意文件的版本&#xff0c;如“numpy-1.19.1-cp36-cp36m-win_amd64.whl”表示该文件适用于widows操作系统下64位的Pyth…

华为发布面向2025十大趋势

来源&#xff1a;华为华为今日发布全球产业展望GIV2025&#xff0c;提出智能世界正在加速而来&#xff0c;触手可及&#xff0c;并预测&#xff1a;到2025年&#xff0c;智能技术将渗透到每个人、每个家庭、每个组织&#xff0c;全球58%的人口将能享有5G网络&#xff0c;14%的家…

python+OpenCV图像处理(十一)图像轮廓检测

图像轮廓检测 &#xff08;一&#xff09;检测轮廓 在OpenCV-python中&#xff0c;使用cv2.findContours()函数来对图像进行轮廓检测。 返回三个值&#xff1a;image&#xff0c;contours&#xff0c;hierarchy contours指的是轮廓本身&#xff0c;hierarchy是每条轮廓对应的…

Array.sort排序

Sorting an Array 1. 数字排序 int[] intArray new int[] { 4, 1, 3, -23 }; Arrays.sort(intArray); 输出&#xff1a; [-23, 1, 3, 4] 2. 字符串排序&#xff0c;先大写后小写 String[] strArray new String[] { "z", "a", "C" }; Ar…

python+OpenCV图像处理(十二)车牌定位中对图像的形态学组合操作处理

车牌定位中对图像的形态学组合操作处理 所谓的车牌定位&#xff0c;其中最关键的部分就是对图片的处理&#xff0c;参数的设置&#xff0c;并使之拥有泛化能力。 首先传入图片&#xff0c;在进行大规模的图片处理时&#xff0c;因为无法确定图片的尺寸&#xff0c;所以需要将…