PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波

中值滤波是什么?

图像的中值滤波是一种非线性图像滤波方法,它用于去除图像中的椒盐噪声或其他类型的噪声。中值滤波的原理是用每个像素周围的邻域中的中值来替代该像素的值。与均值滤波不同,中值滤波不会受到极端值的影响,因此在处理存在椒盐噪声的图像时通常效果更好。

中值滤波的步骤如下:

  1. 定义邻域大小: 对于图像中的每个像素,定义一个固定大小的邻域,通常是一个正方形或矩形区域。

  2. 获取邻域像素值: 对于每个像素,获取其邻域内的像素值。

  3. 排序邻域像素值: 将邻域内的像素值按照大小进行排序,通常是从小到大或从大到小。

  4. 计算中值: 根据邻域内像素值的排序结果,找到中间位置的像素值,即中位数。

  5. 应用中值: 将中位数作为该像素的新值,用于替代原始图像中的像素值。

  6. 重复步骤: 对图像中的每个像素都重复执行上述步骤,直到整个图像都被处理过。

中值滤波的关键特点是它不受异常值的影响,因为它使用邻域内像素值的中间值来替代当前像素值,从而有效地去除噪声并保留图像的细节信息。

中值滤波是什么?

图像的中值滤波是一种非线性图像滤波方法,它用于去除图像中的椒盐噪声或其他类型的噪声。中值滤波的原理是用每个像素周围的邻域中的中值来替代该像素的值。与均值滤波不同,中值滤波不会受到极端值的影响,因此在处理存在椒盐噪声的图像时通常效果更好。

中值滤波的步骤如下:

  1. 定义邻域大小: 对于图像中的每个像素,定义一个固定大小的邻域,通常是一个正方形或矩形区域。

  2. 获取邻域像素值: 对于每个像素,获取其邻域内的像素值。

  3. 排序邻域像素值: 将邻域内的像素值按照大小进行排序,通常是从小到大或从大到小。

  4. 计算中值: 根据邻域内像素值的排序结果,找到中间位置的像素值,即中位数。

  5. 应用中值: 将中位数作为该像素的新值,用于替代原始图像中的像素值。

  6. 重复步骤: 对图像中的每个像素都重复执行上述步骤,直到整个图像都被处理过。

中值滤波的关键特点是它不受异常值的影响,因为它使用邻域内像素值的中间值来替代当前像素值,从而有效地去除噪声并保留图像的细节信息。

中值滤波的算法实现

python实现图像中值滤波的源码

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这段 Python 代码实现了图像处理中的几个常见操作:

  1. 从文件系统中读取名为 “Lena.jpg” 的图像文件,并将其转换为灰度图像。
  2. 实现了中值滤波函数 median_filter,用于对灰度图像进行中值滤波处理。中值滤波是一种非线性滤波器,用于去除图像中的噪声,通过用像素点周围区域的中值替换当前像素值。
  3. 实现了添加椒盐噪声的函数 add_salt_pepper_noise。椒盐噪声是一种常见的图像噪声,随机将像素点的灰度值设置为黑色或白色,模拟图像传感器中的随机错误。
  4. 使用中值滤波函数处理原始灰度图像、添加椒盐噪声后的图像以及高斯噪声后的图像,并显示处理前后的结果。

整体来说,这段代码演示了如何使用 Python 和 OpenCV 库对图像进行中值滤波处理以及添加椒盐噪声,并展示了处理前后的图像效果。

MATLAB实现图像中值滤波的源码

这段 MATLAB 代码实现了图像的中值滤波,包括对原始灰度图像、添加椒盐噪声后的图像以及添加高斯噪声后的图像进行中值滤波处理,并显示处理前后的图像。

  1. 首先,代码读取了名为 ‘Lena.jpg’ 的图像文件,并将其转换为灰度图像。
  2. 然后,对灰度图像进行了中值滤波处理,使用的窗口大小为3×3,即对每个像素及其周围8个像素进行排序,并将中间值作为该像素的值。
  3. 接着,代码生成了添加了椒盐噪声的图像,并对其进行了相同的中值滤波处理。
  4. 最后,代码生成了添加了高斯噪声的图像,并同样进行了中值滤波处理。

在处理后,原始灰度图像、添加椒盐噪声后的图像和添加高斯噪声后的图像分别与其对应的中值滤波处理结果一起显示在一个图像窗口中,以便比较处理前后的效果。

FPGA工程分析

工程层次图

demo18相比,只是多了一个img_med_fltr的模块,也就是下面这一段代码,在从SDRAM读出来之后,经它处理后再输出hdmi_tx模块。


img_med_fltr u_img_med_fltr(.i_clk(clk_pixel),.i_rst_n(sys_rst_n),.i_hs(VGA_HS),.i_vs(VGA_VS),.i_de(VGA_DE),.i_r(VGA_RGB[23:16]),.i_g(VGA_RGB[15:8] ),.i_b(VGA_RGB[7:0] ),.o_hs(img_med_hs),.o_vs(img_med_vs),.o_de(img_med_de),.o_r(img_med_data[23:16]),.o_g(img_med_data[15:8] ),.o_b(img_med_data[7:0] ));

img_med_fltr模块源代码分析

跟前面几篇教程一样,我们都需要先用行缓存将像素转化为同时输出3行3列来,后面的讲解都以R通道为例,因为其它三个通道的行为是一样的:

// R通道行缓存
img_buf u_r_buf
(.i_clk    (i_clk      ),.i_rst_n  (i_rst_n    ),.i_de    (i_de      ),.i_data    (i_r      ),.o_de    (        ),.o_p11    (r_p_11      ),.o_p12    (r_p_12      ),.o_p13    (r_p_13      ),  .o_p21    (r_p_21      ),.o_p22    (r_p_22      ),.o_p23    (r_p_23      ),    .o_p31    (r_p_31      ),.o_p32    (r_p_32      ),.o_p33    (r_p_33      )
);

然后对像素进行排序,分成三步:

1.先按行找出同一行中的最大值,最小值,中值,即:

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波-Anlogic-安路论坛-FPGA CPLD-ChipDebug

2.从找出这三行的三个最大值中找出最大值里的最小值,同时从三行的最小值里找出最大值,还有从三行的最值里找出最中值,即:

PotatoPie 4.0 实验教程(30) —— FPGA实现摄像头图像中值滤波-Anlogic-安路论坛-FPGA CPLD-ChipDebug

3.从第2步的值里找出最终的中值reg [7:0] r_med;

具体怎么比较,verilog代码里写得比较清楚。

管脚约束

与PotatoPie 4.0 实验教程(18) —— FPGA实现OV5640摄像头采集以SDRAM作为显存进行HDMI输出显示相同,不作赘述。

时序约束

与PotatoPie 4.0 实验教程(18) —— FPGA实现OV5640摄像头采集以SDRAM作为显存进行HDMI输出显示相同,不作赘述。

实验效果

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

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

相关文章

数据仓库是什么

写在前面 刚接触大数据的新手小白可能会对数据仓库这个词比较陌生,本文将介绍数据仓库的主要特征及OLTP&OLAP的区别,帮助读者更好理解数据仓库。 一、什么是数据仓库 数据仓库,简称数仓,是一个对数据进行加工,集…

YOLOv8 的安装、使用与训练

YOLOV8 YOLOv8简介 YOLOv8是YOLO系列的最新版本,它融合了先进的深度学习技术和目标检测领域的最新研究成果 与其前身相比,YOLOv8在速度和精度方面都有了显著的提升,使其成为一个理想的实时目标检测解决方案。该模型结合了卷积神经网络&…

分段函数拟合-施加分段点连续约束条件|【Matlab源码+视频介绍】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法,并提供所有案例完整源码;2.…

PotatoPie 4.0 实验教程(27) —— FPGA实现摄像头图像拉普拉斯边缘提取

拉普拉斯边缘提取有什么作用? 拉普拉斯边缘检测是一种常用的图像处理技术,用于检测图像中的边缘和边界。它的主要作用包括: 边缘检测:拉普拉斯算子可以帮助检测图像中的边缘,即图像中亮度快速变化的位置。这些边缘通常…

数据集笔记:处理北大POI 数据:保留北京POI

数据来源:Map POI (Point of Interest) data - Official data of the contest (pku.edu.cn) windows 下载方法:数据集笔记:windows系统下载北大开放数据研究平台的POI数据-CSDN博客 1 读取数据 1.1 列出所有的文件 dir1D:/data/PKU POI/2…

CentOS 9 (stream) 安装 nginx

1.我们直接使用安装命令 dnf install nginx 2.安装完成后启动nginx服务 # 启动 systemctl start nginx # 设置开机自启动 systemctl enable nginx# 重启 systemctl restart nginx# 查看状态 systemctl status nginx# 停止服务 systemctl stop nginx 3.查看版本确认安装成功…

springboot3整合redis

redis在我们的日常开发中是必不可少的&#xff0c;本次来介绍使用spring boot整合redis实现一些基本的操作&#xff1b; 1、新建一个spring boot项目&#xff0c;并导入相应的依赖&#xff1b; <dependency><groupId>org.springframework.boot</groupId><…

MySQL数据库安装——zip压缩包形式

安装压缩包zip形式的 MySQL 8数据库 一 、先进入官网下载 https://dev.mysql.com/downloads/mysql/ 二、解压到某个文件夹 我解压到了D:\mysql\mysql8 下面 然后在这个文件夹下手动创建 my.ini 文件和 data 文件夹 my.ini 内容如下&#xff1a; 注意 basedir 和 datadi…

[leetcode] B树是不是A树的子结构

给定两棵二叉树 tree1 和 tree2&#xff0c;判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 注意&#xff0c;空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 示例 1&#xff1a; 输入&#xff1a;tree1 [1,7,5], tree2 [6,…

基于深度学习的车牌识别

如果你认为车牌只是车子的‘名字’&#xff0c;那么是时候让你见识一下&#xff0c;当科技赋予它‘超能力’时会发生什么&#xff1f; 上效果图&#xff1b; 这就是车牌识别的力量&#xff0c;下面是主函数代码&#xff1a; # -*- coding: UTF-8 -*- import argparse import …

服务器硬件:裸金属安装 VMware ESXi

写在前面 工作中遇到&#xff0c;简单整理博文内容涉及 裸金属安装VMware ESXi 基本步骤理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。——村上春树 一、准备工作 确…

1. 房屋租赁管理系统(Java项目 springboot/vue)

1.此系统的受众 1.1 在校学习的学生&#xff0c;可用于日常学习使用或是毕业设计使用 1.2 毕业一到两年的开发人员&#xff0c;用于锻炼自己的独立功能模块设计能力&#xff0c;增强代码编写能力。 1.3 亦可以部署为商化项目使用。 2. 技术栈 jdk8springbootvue2mysq5.7&8…

基于SpringBoot + Vue实现的家政服务管理系统设计与实现+毕业论文+答辩PPT+指导搭建视频(包运行成功)

目录 项目介绍 论文展示 资源获取 项目介绍 家政服务管理平台是一个管理信息系统&#xff0c;为了宣传的需要&#xff0c;为了给用户提供方便快捷的服务&#xff0c;从而设计了家政服务管理平台。管理员可以通过这个系统把家政服务信息发布出去&#xff0c;可以方便用户快…

终端安全管理软件哪个好?

终端安全管理软件是保障企业信息安全的重要工具。 它们能够有效地防范恶意软件、黑客攻击和其他安全威胁&#xff0c;并提供多方面的终端设备安全保护措施。 终端安全软件的功能和保护机制各不相同&#xff0c;这就需要企业根据自身的需求和情况来进行评估和选择。 下面总结了…

spring的常用注解

目录 1.前言 2.web url映射 2.1RequestMapping 2.2PostMapping 2.3GetMapping 3.参数接受和接口响应 3.1RequestParam 3.2RequstBoby 3.3ResponseBoby 3.4RestController 4.bean的存储 4.1Controller 4.2Service 4.3Repository 4.4Compontent 4.5Configuration …

短视频生成背景文字工具(前端工具)

过年这两天有些无聊就刷刷抖音&#xff0c;刷着刷着自己也蠢蠢欲动&#xff0c;想发上几个&#xff0c;可是却找不到合适自己的模板。由于个人喜欢一些古诗文之类的&#xff0c;所以自己简单的编写了一个小工具&#xff0c;如下图&#xff1a; 当设置好了之后&#xff0c;将浏…

关于Spring Aop的通知类型

一、概述 1.1 通知类型 为了符合各种流程处理&#xff0c;通知类型提供了5种&#xff0c;可以对目标方法进行全方位处理&#xff0c;如下所示&#xff1a; 通知类型说明前置通知&#xff08;Before advice&#xff09;在某连接点之前执行的通知&#xff0c;但这个通知不能阻止…

Python数据分析实验二:Python数据预处理

目录 一、实验目的与要求二、实验任务三、主要程序清单和运行结果&#xff08;一&#xff09;对chipotle.csv文件的销售数据进行分析&#xff08;二&#xff09;对描述泰坦尼克号成员的信息进行可视化和相关分析 四、实验体会 一、实验目的与要求 1、目的&#xff1a;   掌握…

linux kernel内存泄漏检测工具之slub debug

一、背景 slub debug 是一个debug集&#xff0c;聚焦于kmem_cache 分配机制的slub内存&#xff08;比如kmalloc&#xff09;&#xff0c;这部分内存在内核中使用最频繁&#xff0c;slub debug其中有相当部分是用来处理内存踩踏&#xff0c;内存use after free 等异常的&#x…

创建electron,解决包清理的问题,解决镜像源卡住下载时间长

我的电脑用户名是Anyphasy,我的node.js安装在D:\developp\nodejss18.18.0 使用npm config get prefix查看node.js安装路径 npm config get prefix 创建electron 创建package.json文件,它里面记载了你的electron版本,项目描述,以及启动命令等信息 npm init -y 先查看你自己的…