基于Python语言图像边缘检测及其算法分析

2022-09-11

一、系统开发环境介绍

(一) MicroPython

Python是一种相对来说较为易于上手的脚本语言, 并且具备极为强有力的社区支持, 有很多并不是这一专业领域的人通常都会把这一脚本语言当作其基础学习。然而令人惋惜的是, 它没有办法做某些较为底层的操作, 因此, 在硬件领域里它并没有受到太多关注。MicroPython是一种较为精密简化而且效率高的编程语言, 它是由Python3简化而来, 其不但涵盖了Python标准库当中的一个小子集, 而且也有效地优化和改善了微控制器, 甚至是受限环境当中的运行状态。利用MicroPython使用者能够完全依靠Python脚本语言来完成对硬件底层的访问以及操控。例如, 控制LED灯的灯泡或者LCD显示器, 又比如, 还能够操控电机、获取电压信息, 以及实现对SD卡的访问等等。

(二) OpenMV

OpenMV是建立在STM32F765VIARMCortexM7处理器的单片机以及OV2640图像传感器基础之上的一种开原型的微型机器视觉模块。OpenMV中配备了一个MicroPython解释器, 通过Python脚本语言的程序编制来完成各项功能的设计, 其中就包含了IO端口的操控以及读取文件系统等一系列基本的操作功能。另外, 还能够编制人脸识别及追踪功能和关键点截取功能, 以及颜色追踪等一系列的功能。

(三) 图像模型

Lab模型是由以下三种要素组合而成, 即明度、与颜色有关联的a和b。在Lab的颜色空间当中, L所表示的含义是亮度;a指代正数则表示的颜色为红色, 负数则表示的颜色为绿色;b指代正数表示的颜色为黄色, 负数则表示的颜色为兰色。与RGB以及CMYK等色彩空间有区别的是, Lab的颜色设计通常与人类的视觉十分相近。所以, L分量能够调控亮度, 并以改变a与b分量的输出色阶的方式来更好地控制色彩平衡。Lab色彩模型不需要借助设备, 而且它的色域较为广阔, 其不但涵盖了RGB以及CMYK中所包含的全部色域, 而且人类可以通过肉眼感受到的色彩, Lab都可以利用LAB模型将其显现出来。

二、图像处理的基础原理

图像边缘是图像当中的灰度或是纹理, 亦或是色彩出现强烈改变的位置, 像素矩阵是具有阶跃性的变化, 或者是屋脊变化的像素的集合。图像边缘存在于两个不一样的物体或者是物体和背景的边界, 又或者存在于两种色块之间的边界, 是图像识别信息极为密集的位置。

(一) 边缘检测

1. 像素矩阵的一阶微分边缘检测算子

像素矩阵的一阶微分方程一般是针对图像像素矩阵的幅值展开微分处理来截取边缘信息的。它的图像像素矩阵的梯度值可以表示图像的灰度变化程度, 并反映其方向梯度, 其定义可用下述公式表达: , 其幅值大小可用下式表达:, 方向梯度的表达式 。当中随着Gx值和Gy值的不同, 所选用的模板也会不一样, 例如:Sobel算子、Robert算子等等。这样的运算方便容易, 但是很容易遭到噪声的影响, 因此所识别得到的边界轮廓相对会粗一些。

2. 二阶微分图像像素边缘检测算子

图像的边缘图像矩阵产生强烈的变动, 图像像素矩阵当中二阶导数的零点, 亦或是极限值点, 便是图像的边缘位置。二阶微分边缘检测一般采用的算子为Laplacian算子以及Log算子, Laplacian法相对较为容易遭到噪声的影响。Log法是在Laplacian法的基础上进行改良以后的算法, 第一步先采取滤波的方式来去除噪声给图像带来的干扰, 之后进行二阶导数的运算, 这当中二阶方向导数的零点和极限值点, 便是图像的边界位置。Canny法在现阶段来看是相对较为高效, 而且应用上也比较普及的一种边缘检测算法类型。然而, 这一种算法很容易遭到噪声的影响, 在滤波处理过程中, 针对实时图像的数据处理过程来说其计算量是十分庞大的。所以, 可以选用一种能够防止噪声干扰, 并且使得计算更精准、速度更快, 同时结合图像的亮度可以自行显示阈值, 而且还能识别边界线较细的图像的边缘检测算法。

(二) 腐蚀膨胀算法

膨胀算法是通过矢量加法把两个集合各自进行合并的。膨胀函数X⊕B表示的是整个矢量的和的集合, 这当中矢量加法的两个加数各来自X和B, 同时能够随机组成一个组合, 如以下公式:X⊕B={p∈ε2, p=x+b, x∈X, b∈B}。此外, 腐蚀函数XΘB针对图像像素的集合元素, 是通过矢量减法来把两个集合进行合并的, 如以下公式:XΘB={p∈ε2, p+b∈X, ∀b∈B}。腐蚀函数与膨胀函数的关系是相互对偶的关系, 两者的关系可以通过下式来表述:

三、基于Python语言软件程序编写

(一) 图像边缘检测程序流程

图像边缘检测程序流程如下:初始化摄像头→设置图片格式→设置白平衡→跳过不稳定帧→借助摄像头获取图像→滤波处理、边缘腐蚀→图像分割→图像边界腐蚀操作。

(二) 图像边缘检测程序测试结果

腐蚀函数剔除相邻点的数量值设定的过高, 被侵蚀的边缘点的数量太多, 边界清晰度低且不连续, 图像色彩较黑。

(三) 腐蚀膨胀算法程序流程

腐蚀膨胀算法程序流程如下:初始化摄像头→设置图片格式→设置白平衡→跳过不稳定帧→借助摄像头获取图像→滤波处理去除噪声→图像分割并进行二值化处理→图像边界腐蚀处理→图像边界膨胀处理。

(四) 腐蚀膨胀算法程序测试结果

通过检测结果能够看得出腐蚀后的图像的边界变得模糊不清, 被黑色所掩盖, 而膨胀后的图像的边界则变粗。

四、结束语

综上所述, 在Python语言软件的强大支持下, 不仅实现了计算机的视觉应用操作, 而且还能进行相关图文信息的读取。在这一技术手段帮助下, 进行图像边缘检测与处理, 使其图像轮廓特征更加明显, 也更有利于人眼与机器的观察、识别。

摘要:本篇文章针对基于OpenMV的微型机器视觉模块进行了介绍, 利用MicroPython完成程序的编制, 借助摄像头提取实时的图像, 展开边缘检测并以腐蚀膨胀算法进行处理。同时经过缜密的实验以及科学的研究, 对其精准度的干扰因素进行了更细致化的分析和研究。

关键词:OpenMV,MicroPython,边缘检测,腐蚀膨胀算法

参考文献

[1] 潘丽静, 张虹波, 周婷婷.全自动模拟目标搜救系统的设计与实现[J].电脑知识与技术, 2016, 12 (28) :178-180.

[2] 余金栋, 张宪民.用于线纹显微图像的边缘检测算法[J].光学紧密工程, 2015, 23 (1) :271-281.

上一篇:他们为什么会厌学——试析农村高中生厌学原因与辅导策略下一篇:如何在数学教学中培养小学生的学习兴趣