PotatoPie 4.0 实验教程(36) —— FPGA实现摄像头图像二值化开运算效果

手机扫码

链接直达

https://item.taobao.com/item.htm?ft=t&id=776516984361

什么是图像开运算,有什么作用?

图像开运算是数学形态学中的一种图像处理操作,它由两个基本操作组成:腐蚀(Erosion)和膨胀(Dilation)。开运算的作用包括:

  1. 平滑图像:开运算可以去除图像中的小型噪声或孤立的像素点,从而使图像变得更加平滑。

  2. 去除小物体:开运算可以有效地去除图像中的小型物体或细小的结构,使得图像中的主要物体更加突出。

  3. 分离物体:开运算可以将图像中的不同物体分离开来,使它们之间的空隙变得更加明显,从而便于后续的分析和处理。

  4. 改善边缘:开运算可以改善图像中物体的边缘,使其更加清晰和连续。

总的来说,图像开运算可以帮助提取图像中的主要特征,去除噪声和不必要的细节,从而改善图像质量和提高后续图像处理算法的准确性。

图像开运算的算法步骤

图像开运算是由腐蚀操作和膨胀操作组成的。其算法步骤如下:

  1. 腐蚀(Erosion):对输入的二值图像进行腐蚀操作,通过滑动一个结构元素(kernel)在图像上,将该结构元素与图像中的像素进行逐像素的比较,如果结构元素覆盖的所有像素都为前景像素(白色),则将中心像素设置为前景像素,否则设置为背景像素(黑色)。

  2. 膨胀(Dilation):对腐蚀操作得到的图像进行膨胀操作,同样通过滑动结构元素在图像上,将结构元素覆盖的所有像素中的至少一个为前景像素的像素设置为前景像素。

  3. 将膨胀操作得到的图像减去腐蚀操作得到的图像,即可得到图像开运算的结果。

总的来说,图像开运算的算法步骤是先腐蚀后膨胀,通常用于去除小物体、平滑图像和改善边缘等应用场景。

Python实现图像二值化开运算源码

PotatoPie 4.0 实验教程(36) —— FPGA实现摄像头图像二值化开运算效果-Anlogic-安路论坛-FPGA CPLD-ChipDebug

这段Python代码实现了图像的二值化、腐蚀和膨胀处理,并使用matplotlib库在子图中展示处理前后的图像。以下是对代码功能的详细说明:

  1. 读取图像:从当前.py文件所在目录读取名为”img_open.png”的图像,并转换为灰度图像。

  2. 图像二值化:将灰度图像进行阈值处理,大于阈值92的像素值设为255(白色),否则设为0(黑色),得到二值化图像。

  3. 腐蚀处理函数(image_erode):根据输入的迭代次数,在二值化图像上执行腐蚀操作。腐蚀的算法采用了基于像素值的逻辑判断,对图像中的每个像素点进行遍历,当其周围的8个像素点都为白色时,将当前像素点设为白色,否则设为黑色。

  4. 膨胀处理函数(image_dilate):根据输入的迭代次数,在二值化图像上执行膨胀操作。膨胀的算法也采用了基于像素值的逻辑判断,对图像中的每个像素点进行遍历,当其周围的8个像素点有一个或多个为白色时,将当前像素点设为白色,否则设为黑色。

  5. 图像处理过程:分别对腐蚀和膨胀处理进行多次迭代,得到不同次数的处理结果。

  6. 图像展示:使用matplotlib库在子图中展示原始灰度图像、二值化图像、腐蚀处理后的图像(0次、1次、2次)以及膨胀处理后的图像(0次、1次、2次)。

这段代码通过纯Python实现了图像处理过程,避免了使用OpenCV库中的膨胀和腐蚀函数,而是直接使用循环结构和逻辑判断来实现相应的操作。

可以看到经过两次腐蚀后,里面的白色小点已被消除,经过膨胀后 j 字符明显变粗了。  

matlab实现图像二值化开运算源码

PotatoPie 4.0 实验教程(36) —— FPGA实现摄像头图像二值化开运算效果-Anlogic-安路论坛-FPGA CPLD-ChipDebug

以上代码实现了图像的二值化、腐蚀和膨胀处理,并使用 MATLAB 的 imshow 和 title 函数将处理结果以子图形式展示出来。下面对代码功能进行详细说明:

  1. 读取图像并转换为灰度图像

    • 使用 imread 函数读取名为 “Lena.jpg” 的图像文件。
    • 通过 rgb2gray 函数将彩色图像转换为灰度图像。
  2. 图像二值化处理

    • 遍历图像的每个像素,若像素的灰度值大于 92,则将其设置为白色(255),否则设置为黑色(0)。
  3. 图像腐蚀处理

    • 对二值化后的图像进行腐蚀处理,采用3×3的结构元素。
    • 使用按位与(&)操作符对结构元素覆盖区域内的像素进行处理。
  4. 图像膨胀处理

    • 对腐蚀后的图像进行膨胀处理,同样采用3×3的结构元素。
    • 使用按位或(|)操作符对结构元素覆盖区域内的像素进行处理。
  5. 图像显示

    • 使用 subplot 函数创建子图,分别显示原始灰度图像、二值化图像、腐蚀处理结果和膨胀处理结果。
    • 使用 imshow 函数显示图像,并用 title 函数为每幅图像添加标题,标题文字使用微软雅黑字体。

以上代码及注释详细说明了每个步骤的功能和实现方法。

可以看到经过两次腐蚀后,里面的白色小点已被消除,经过膨胀后 j 字符明显变粗了。  

FPGA工程分析

工程层次图

前面我们提到过开运算就是先腐蚀后膨胀,可以看到上面的层次图中分别有一个img_erosion_fltr和img_dlat_fltr, video_tpg_24b产生的数据先经过img_erosion_fltr处理,再经过img_dlat_fltr处理即完成了开运算,如下面的代码所示:

img_erosion_fltr u_img_erosion_fltr
(.i_clk          (clk_pixel              ),  .i_rst_n        (sys_rst_n              ),  .i_hs           (VGA_HS                 ),  .i_vs           (VGA_VS                 ),  .i_de           (VGA_DE                 ),  .i_bin          (v_bin                  ),  .o_hs           (erosion_hs             ),  .o_vs           (erosion_vs             ),  .o_de           (erosion_de             ),  .o_bin          (erosion_bin            )   
);img_dlat_fltr u_img_dlat_fltr
(.i_clk          (clk_pixel              ),        .i_rst_n        (sys_rst_n              ),        .i_hs           (erosion_hs             ),        .i_vs           (erosion_vs             ),        .i_de           (erosion_de             ),        .i_bin          (erosion_bin            ),  .o_hs           (dlat_hs                ),  .o_vs           (dlat_vs                ),  .o_de           (dlat_de                ),  .o_bin          (dlat_bin               )   
);

管脚约束

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

时序约束

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

效果图

效果图就不发了,效果可以预见,哈哈。

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

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

相关文章

73、栈-柱状图中最大的矩形

思路: 矩形面积:宽度*高度 高度如何确定呢?就是在宽度中最矮的元素。如何确定宽度,就是要确定左右边界。 当我们在处理直方图最大矩形面积问题时,遇到一个比栈顶柱子矮的新柱子时开始计算面积的原因关键在于如何确定…

opencv基础篇 ——(十)非真实感渲染

非真实感渲染(Non-Photorealistic Rendering, NPR)是指通过一系列图像处理技术,将真实感图像转换为具有特定艺术风格或视觉效果的图像,模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染&a…

74、堆-数组中的第K个最大元素

思路&#xff1a; 直接排序是可以的&#xff0c;但是时间复杂度不符合。可以使用优先队列&#xff0c;代码如下&#xff1a; class Solution {public int findKthLargest(int[] nums, int k) {if (numsnull||nums.length0||k<0||k>nums.length){return Integer.MAX_VAL…

全域团购外卖SAAS系统是什么?

随着多家互联网平台的团购外卖板块逐渐稳定&#xff0c;不少人不再满足于只做1~2个平台的团购外卖服务商&#xff0c;想要拓宽业务范围。在此背景下&#xff0c;全域团购外卖SAAS应运而生&#xff0c;进一步推动了全域团购外卖的流行。 而所谓全域团购外卖&#xff0c;就是指所…

Android Perfetto 监控应用启动耗时

Perfetto 是一个 Google 开发的用于安卓系统性能监控和调试的工具&#xff0c;它旨在提供实时数据收集和可视化功能&#xff0c;帮助我们分析和优化应用程序的性能表现。Perfetto 可以捕获系统事件、CPU、内存、网络、GPU 等性能指标数据&#xff0c;并将其记录为轻量级的 Trac…

链表刷题集

文章目录 概要反转链表代码Python代码C 环形链表代码Python代码Java 小结 概要 这个主要记录下刷的一些题。 链表已经看过了&#xff0c;之前写了篇链表的文章&#xff0c;这一篇&#xff0c;写点跟链表有关的题。主要是leetcode上的。目的是熟悉下代码&#xff0c;代码这东西…

2024 JAVA Tinypng压缩图片,超级简单!!!

一、打开官网&#xff0c;注册账号&#xff0c;获取秘钥&#xff08;每个月500张免费&#xff09; 1.打开官网&#xff0c;注册账号 TinyPNG – Compress WebP, PNG and JPEG images intelligently 2.登录后&#xff0c;点击账号名字&#xff0c;找到如图所示 3.找到API&…

当众演讲技巧的方法有哪些(3篇)

当众演讲技巧的方法有哪些&#xff08;3篇&#xff09; 当众演讲技巧的方法有很多&#xff0c;下面我将分三篇来详细阐述其中的一些关键技巧&#xff1a; **篇&#xff1a;准备与开场技巧 充分准备&#xff1a;提前规划演讲内容&#xff0c;明确主题和目标&#xff0c;准备详…

螺旋角和导程、转位后的齿轮有什么关系?

最近和小伙伴聊到了一个问题&#xff1a;斜齿轮螺旋角和导程的关系&#xff0c;主要是在遇到在采用转位设计方式的刀具时&#xff0c;更觉得有点迷惑&#xff0c;今天咱们就聊聊这个事儿。 先来说斜齿轮螺旋角和导程的关系&#xff1a; 斜齿轮是有多个螺旋面组成的&#xff0…

解决RTC内核驱动的问题bm8563

常用pcf-8563 , 国产平替BM8563(驱动管脚一致)&#xff1b; 实时时钟是很常用的一个外设&#xff0c;通过实时时钟我们就可以知道年、月、日和时间等信息。 因此在需要记录时间的场合就需要实时时钟&#xff0c;可以使用专用的实时时钟芯片来完成此功能 RTC 设备驱动是一个标准…

【证明】快慢指针在带环链表中是否存在无法相遇的情形

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1. 前言2. 证明过程2.1 证明2.2 加证 3. 结论4. 结语 1. 前言 在了解本次内容前&#xff…

牛客热题:判断链表是否有环

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;判断链表是否有环题目链接方法一…