数字图像处理(入门篇)九 图像数据预处理之滤波

news2024/11/26 12:37:58

目录

1 模板运算

(1)模板卷积

(2)模板排序

2 均值滤波

(1)代码

(2)结果图

 3 高斯滤波

 (1)代码

(2)结果图

4 中值滤波

(1)代码

(2)结果图

 5 图像锐化

(1)代码

(2)结果图

灰度变换是点处理,输出值只和指定的像素点相关。

直方图是全局处理,输出值和整幅图像相关。

空间滤波是一种局部的处理方式。像素P的输出值由输入图像中像素P 以及其邻域中的像素值确定。

1 模板运算

        常用的模板运算有模板卷积和模板排序。

(1)模板卷积

        模板滤波器是一幅尺寸为n*n的小图像,n一般为奇数。小图像中每个位置上的值为权重。在计算的时候,将模板中心和像素p对齐,选取原始图像中和模板相同范围的领域内的像素值作为输入。计算公式如下:

 上述公式中,原始图像像素灰度值为s,计算的结果为d。

(2)模板排序

       计算时将邻域中的像素值进行排序,选择特定次序的灰度值作为像素P位置的输出值。比如:最大值,最小值,中位数等。

2 均值滤波

         图像邻域平均法的优点是算法简单,计算速度快,主要缺点是在降低噪声的同时在边缘和细节处使图像产生模糊,邻域越大,模糊越严重。为了改善邻域平均滤波法的这个缺点,可以使用加权平均滤波器。常用的加权均值滤波器如下所示:

        图像邻域平均法的处理效果与所选的邻域半径有关。半径越大,则图像的模糊程度也就越大。因此在实际应用中,可以根据不同的需要来选择使用不同的模板尺寸,如3×3、5×5、7×7和9×9等。邻域平均法是最简单的一种平滑方法,噪声平滑效果较好。

(1)代码

import numpy as np
import matplotlib.pyplot as plt
import cv2
def run(img_path):
    img = cv2.imread(img_path)
    # 方法一:使用cv2.blur
    im_meanblur9 = cv2.blur(img, (9, 9))
    im_meanblur5 = cv2.blur(img, (5, 5))
    # 方法二:使用cv2.filter2D
    mean_blur = np.ones([3, 3], np.float32)/9
    im_meanblur3 = cv2.filter2D(img, -1, mean_blur)
    titles = ["original", "meanblur(3*3)", "meanblur(5*5)", "meanblur(9*9)"]
    images = [img, im_meanblur3, im_meanblur5, im_meanblur9]
    for i in range(4):
        plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()
if __name__ == '__main__':
    run("test_bgr.jpg")
    pass

(2)结果图

 3 高斯滤波

        高斯滤波(或者说“高斯模糊”)就是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。

       高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到的结果。

       高斯滤波处理后,整个图像相较于原始图像会看起来较为模糊,原始图像上的某些噪声点在经过周围像素点加权求和后会被剔除掉。

       高斯滤波模板根据高斯分布来确定模板系数,接近中心的权重比边缘的权重大。

 (1)代码

import numpy as np
import matplotlib.pyplot as plt
import cv2
def run(img_path):
    img = cv2.imread(img_path)
    # 方法一:使用cv2.GaussianBlur
    gaussianblur_3 = cv2.GaussianBlur(img, (3, 3), 0)
    gaussianblur_13 = cv2.GaussianBlur(img, (13, 13), 0)
    # 方法二:使用cv2.filter2D
    gaussian_blur = np.array([
        [1, 4, 7, 4, 1],
        [4, 16, 26, 16, 4],
        [7, 26, 41, 26, 7],
        [4, 16, 26, 16, 4],
        [1, 4, 7, 4, 1]], np.float32)/273
    gaussianblur_5 = cv2.filter2D(img, -1, gaussian_blur)
    titles = ["original", "gaussianblur(3*3)", "gaussianblur(5*5)", "gaussianblur(13*13)"]
    images = [img, gaussianblur_3, gaussianblur_5, gaussianblur_13]
    for i in range(4):
        plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()
if __name__ == '__main__':
    run("test_bgr.jpg")
    pass

(2)结果图

4 中值滤波

        中值滤波是由Turky于1971年提出来的。中值滤波方法是一种非线性图像降噪方法,它在含有脉冲噪声和点状噪声的图像的处理中, 处理的效果较好。

         一般在实际使用窗口时,一般先用小尺寸的窗口,然后再逐渐增大窗口的尺寸,直到中值滤波的滤波效果满意为止。即窗口尺寸一般先用3×3,再用5×5,逐渐增大直到处理效果满意为止。常用的窗口形状有线状、方形、圆形、十字形以及圆环形等等。

        相比较于均值滤波,中值滤波的降噪效果比较明显,能够较好的保留原始图像的跃变部分。在灰度值变化比较小的情况下,中值滤波有较好的平滑效果,而且使得图像边界的模糊程度有所降低。但是,在大面积的噪声污染的情况下,中值滤波的处理效果却不如均值滤波的处理效果好。这是因为在邻域中如果多数图像点都已经被噪声污染,所以中值滤波的输出仍然是被噪声污染的像素。均值滤波却在某种程度上对噪声进行了平滑处理,即求平均值运算。

        中值滤波对椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效的保护图像边缘信息。但是,中值滤波是一种非线性变换,会破坏像素点间的线性关系,不适用于点、线等细节较多的图像或高精度的图像。

(1)代码

使用OpenCV的中值模糊 API。

dst=cv2.medianBlur(src,ksize)

src 源图像。可有任意数量的通道,并能对各个通道独立处理。ksize 是滤波核的大小。

import numpy as np
import matplotlib.pyplot as plt
import cv2
def run(img_path):
    img = cv2.imread(img_path)
    medianblur_3 = cv2.medianBlur(img, 3)
    medianblur_5 = cv2.medianBlur(img, 5)
    medianblur_9 = cv2.medianBlur(img, 9)
    titles = ["original", "medianblur(3*3)", "medianblur(5*5)", "medianblur(9*9)"]
    images = [img, medianblur_3, medianblur_5, medianblur_9]
    for i in range(4):
        plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()
if __name__ == '__main__':
    run("test_bgr.jpg")
    pass

(2)结果图

 5 图像锐化

        图像锐化的主要目的是突出图像中的边缘、轮廓和图像细节。最常用的是梯度法。

(1)代码

import numpy as np
import matplotlib.pyplot as plt
import cv2
def run(img_path):
    img = cv2.imread(img_path)
    sharpen_1 = np.array([
        [-1, -1, -1],
        [-1, 9, -1],
        [-1, -1, -1]])
    sharpen1_img = cv2.filter2D(img, -1, sharpen_1)
    sharpen_2 = np.array([
        [0, -1, 0],
        [-1, 8, -1],
        [0, 1, 0]])/4.0
    sharpen2_img = cv2.filter2D(img, -1, sharpen_2)
    titles = ["original", "sharpen_1", "sharpen_2"]
    images = [img, sharpen1_img, sharpen2_img]
    for i in range(3):
        plt.subplot(1, 3, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()
if __name__ == '__main__':
    run("test_bgr.jpg")
    pass

(2)结果图

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

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

相关文章

IB数学HL/SL考试大纲简单介绍

IB数学难度怎么样?IB数学内部评估和外部评估是怎么评分的,IB数学HL和SL的考试大纲? 下面介绍IB数学框架体系IB数学SL考试大纲 SL数学为必修课 考试内容相对比较基础 代数(Algebra):涉及数列问题&#xff…

CentOS虚拟机搭建Hive环境

注&#xff1a;本文是对 https://www.bilibili.com/video/BV1CU4y1N7Sh 的实践。 关于如何搭建Hadoop集群&#xff0c;请参考我另一篇文档。 环境 CentOS 7.7JDK 8Hadoop 3.3.0Hive 3.1.2 准备 确认Hadoop的 etc/hadoop/core-site.xml 文件包含如下配置&#xff1a; <…

3D建模师做多了女人会不会找不到老婆?次世代美少女战士建模流程讲解

什么是次世代&#xff1f; 次世代是个舶来语&#xff0c;“次世代游戏”指代和同类游戏相比下更加先进的游戏&#xff0c;即“下一代游戏”。 次世代是利用高模烘焙的法线贴图回帖到低模上&#xff0c;让低模在游戏引擎里可以及时显示高模的视觉效果。模型面数比较高&#xf…

Python实现PSO粒子群优化卷积神经网络CNN回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法&#xff08;Particle Swarm Optimization&#xff09;的英文缩写&#xff0c;是一…

学完这篇,再不怕防火墙NAT策略问题

Q&A 1、配置了nat server后Tracert防火墙上的global地址&#xff0c;显示信息是什么? 无论具有Inside地址的设备在防火墙内部有多少跳&#xff0c;Tracert时全部显示nat server的global的地址。如果有3跳&#xff0c;则显示3次global地址。 2、nat server和destination-n…

艾美捷CMRL-1066培养基背景和化学性质分析

艾美捷CMRL-1066培养基背景&#xff1a; CMRL-1066是20世纪60年代后期在康诺医学研究实验室开发的一种化学定义的培养基。CMRL-1066最初设计用于非补充培养物中的小鼠L细胞。虽然CMRL-1066是为无血清培养而开发的&#xff0c;但它可以补充血清并用于支持多种细胞类型的生长。适…

[激光原理与应用-50]:《激光焊接质量实时监测系统研究》-1-绪论 (模式识别)

目录 1.1 问题概述 1.2 激光焊接质量监测在国内外的研究现状 1.2.1 国内外研究概况、水平和发展趋势 1.2.2 信号检测与传感器 1.2.3 信号分析与缺陷诊断 &#xff08;DSP或FPGA&#xff09; 1.3 本课题研究内容及意义 后记&#xff1a; 1.1 问题概述 激光焊接是一种高效…

YOLO v3

参考 YOLO v3 - 云社区 - 腾讯云 摘要 我们对YOLO进行了一些更新&#xff01;我们做了一些小的设计改变使它更好。我们还训练了这个非常棒的新网络。比上次大一点&#xff0c;但更准确。不过还是很快的&#xff0c;别担心。在320 320的情况下&#xff0c;YOLOv3在28.2 mAP下…

跳板攻击中如何追踪定位攻击者主机(上)

前段时间西北工业大学遭受NAS攻击事件中&#xff0c;TAO在针对西北工业大学的网络攻击行动中先后使用了54台跳板机和代理服务器&#xff0c;主要分布在日本、韩国、瑞典、波兰、乌克兰等17个国家&#xff0c;其中70%位于中国周边国家&#xff0c;如日本、韩国等。 同时&#x…

芯片漫游指南(3)-- UVM通信

目录1.TLM通信1.1 概述1.2 基本概念1.3 分类1.4 端口的使用2. 单向通信2.1 概念2.2 方法2.3 示例3.双向通信3.1 概述3.2 分类3.3 transport4. 多向通信4.1 概述4.2 示例5.通信管道5.1 概述5.2 TLM FIFO5.3 Analysis Port5.4 analysis TLM FIFO5.5 request & response通信管…

[附源码]JAVA毕业设计疫情防控期间人员档案追演示录像下(系统+LW)

[附源码]JAVA毕业设计疫情防控期间人员档案追演示录像下&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#x…

Springboot内置的工具类之ObjectUtils

在实际业务开发中&#xff0c;有时候经常需要判断对象是否为空、数组是否为空、两个对象是否相等&#xff0c;数组中是否包含某个元素&#xff0c;往数组中追加元素等这些操作&#xff0c;每次都手写太麻烦&#xff0c;然后很多人的选择是封装成util工具类&#xff0c;实际上类…

Golang protobuf

文章目录protobuf 和 grpc 的区别下载工具 protoc为什么要使用 protocprotoc 基本语法基础用法结构体声明protoc生成结构体服务声明生成服务使用生成的服务端使用生成的客户端protobuf 和 grpc 的区别 grpc 是开源的rpc框架 protobuf是编码协议下载工具 protoc https://githu…

人工神经网络/ANN简介

目录 前言 1.什么是训练集、测试集和验证集&#xff1f; 2.人工神经网络和 生物神经元结构对应的理解 3.什么是梯度下降法&#xff0c;在神经网络上如何用于调节权重&#xff1f; 4.为什么神经网络要进行归一化处理&#xff1f; 5.激活函数的形式&#xff1a; 6.NN分类 …

序列模型(自回归模型,马尔可夫模型,因果关系)

李沐老师《动手学深度学习 PyTorch版》课程&#xff0c;小破站也有视频51 序列模型【动手学深度学习v2】_哔哩哔哩_bilibili 主要参考8.1. 序列模型 — 动手学深度学习 2.0.0 documentation 目录 1.基本原理 1.1自回归模型 1.2马尔可夫模型 1.3因果关系 2.训练 3.预测 4…

CMake中link_directories/target_link_directories的使用

CMake中的link_directories命令用于添加目录使链接器能在其查找库(add directories in which the linker will look for libraries)&#xff0c;其格式如下&#xff1a; link_directories([AFTER|BEFORE] directory1 [directory2 ...]) 添加路径使链接器应在其中搜索库。提供给…

【云计算与大数据技术】数据分片哈希算法、路由算法、复制算法的讲解(图文解释 超详细)

一、大数据的存储问题 随着结构化数据量和非结构化数据量的不断增长&#xff0c;以及分析数据来源的多样化&#xff0c;之前的存储系统设计已经无法满足大数据应用的需求&#xff0c;对于大数据的存储&#xff0c;存在以下几个不容忽视的问题 容量 - “大容量”通常是指可达P…

Python+Qt相片更换背景颜色窗体程序

程序示例精选 PythonQt相片更换背景颜色窗体程序 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 QTPython是非常经典的窗体编程组合&#xff0c;功能完善&#xff0c;可视化界面美观易维护&#xff0c;这篇博…

fpga实操训练(按键输入)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在fpga上面进行按键的输入&#xff0c;要比stm32编写按键输入要容易的多。这里面最主要的工作就是把led输出和按键输入绑定在一起。当然&#xff0…

MySQL MVCC

1.隔离级别 1.1.理论 1.1.1.序列化(SERIALIZABLE) 如果隔离级别为序列化,则用户之间通过一个接一个顺序地执行当前的事务,这种隔离级别提供了事务之间最大限度的隔离; 1.1.2.可重复读(REPEATABLE READ,MySQL默认的隔离级别) 在可重复读在这一隔离级别上,事务不会被看成是一…