0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于MATLAB 图像处理算法的作用分析介绍

MATLAB 来源:djl 2019-09-12 14:31 次阅读

得益于 Raspberry Pi 等低成本硬件平台,现在比以往更容易在硬件上对图像处理算法进行原型验证。大多数图像处理算法需要进行大量计算,在嵌入式平台上以可接受的帧频运行它们非常困难。尽管 Raspberry Pi 在运行简单的图像处理算法时游刃有余,但大图像和复杂算法应在 NVIDIAJetson 等功能强大的硬件上运行。

本文将以色度键控效果为例,介绍在嵌入式硬件上部署 MATLAB 图像处理算法的简单工作流。我们将使用 MATLAB Coder 通过算法生成C代码,然后使用在硬件上运行的实用程序在 Raspberry Pi 板卡上进行算法原型验证。最后,我们将算法移植至 NVIDIA Jetson Tx1 平台以保证实时性能。

色度键控算法

色度键控广泛用于电视天气预报、电影制作和图片编辑应用程序,它是一种视频处理技术,首先针对单色背景(如绿色屏幕)拍摄前景对象,然后用不同场景(图1)替换该背景。

关于MATLAB 图像处理算法的作用分析介绍

图1:应用色度键控之前和之后的示例

色度键控算法将图像中的每个像素与代表单背景色的基准色进行对比。如果像素颜色与基准色足够接近,像素将由之前所选场景图像的对应像素替换。从数学上讲,色度键控算法采用以下公式:

关于MATLAB 图像处理算法的作用分析介绍

其中代表进行色度键控后位置 (j,k) 处的最终像素值,是与原始图像对应的像素值,是代表替换单一背景色的场景的像素值,m(j,k)∈[0,1] 是掩码值。掩码数值 m(j,k) 对于前景像素应该为 1,对于背景像素应该为 0。0 与 1 之间的掩码值可提供从背景到前景的平滑过渡。

每个像素的掩码值通常在 YcbCr 颜色空间而不是普通的 RGB 颜色空间中进行计算。YcbCr 图像的 Y 分量代表亮度分量,用于确定图像的明暗度。Cb 和 Cr 分量代表色度分量,用于衡量与基准色的相似度。由于仅使用图像的 Cb 和 Cr 分量衡量颜色相似度,该算法在应对单一背景色明暗区域的亮度值差异时十分稳健。

为衡量像素色与基准色的相似性,我们在色度空间中使用欧氏距离平方:

关于MATLAB 图像处理算法的作用分析介绍

最后,使用以下公式计算图像中位置(j,k) 的掩码值:

关于MATLAB 图像处理算法的作用分析介绍

其中 t1 和 t2 ( t2 > t1)代表要确定的阈值。

MATLAB实现

以下是色度控键算法的 MATLAB 实现:

关于MATLAB 图像处理算法的作用分析介绍

在 MATLAB 中,图像由类型 uint8 的 [N,M, 3] 数组表示。这表示,在执行数学操作前,我们需要将图像数据类型转换为 “double”。为避免背景到前景的快速突变,我们对算出的掩模采用高斯过滤器进行滤波。

确定基准色和阈值

色度键控算法需要基准色和阈值。使用 MATLAB Raspberry Pi 支持包中的相机接口,我们拍摄了实际场景的图像。随后,我们可以凭借经验确定背景的适用基准色和相应的阈值。

关于MATLAB 图像处理算法的作用分析介绍

img = snapshot(cam); 命令绘制 MATLAB 中 Raspberry Pi 相机拍摄的图像。我们使用 MATLAB 绘制中的 Data Cursor 工具指定背景颜色(图2)。

关于MATLAB 图像处理算法的作用分析介绍

图2:MATLAB 中用于确定背景色值的 Data Cursor 工具

要确定阈值,我们将循环运行算法并调整阈值:

关于MATLAB 图像处理算法的作用分析介绍

当运行代码时,我们会获得带有所选背景的图像(图3)。

图3:左:原始图像;右:运行色度控键算法后获得的图像

将色度键控算法部署到 Raspberry Pi

在部署代码前,我们需要编写一段包含有色度键控算法的循环体,循环体中还包括从相机拍摄图像,并在 Raspberry Pi 连接的显示器上显示:

关于MATLAB 图像处理算法的作用分析介绍

matlab.raspi.webcam 和 matlab.raspi.SDLVideo Display 是在硬件上运行实用程序的 System objects,它们可简化部署工作流程中相机的使用和 Raspberry Pi 显示。要编译并运行代码,我们可执行以下命令:

关于MATLAB 图像处理算法的作用分析介绍

runOnHardware 功能会为 Raspberry Pi 硬件创建 MATLAB Coder 配置,为 chromaKeyApp.m 生成代码并对其部署。为了以合理的帧频运行算法,图像大小可缩小到 640x480 或 320x240。

生成GPU代码

算法在 Raspberry Pi 上运行,但是它不会实现我们需要的实时性能。为了加快算法的速度,我们要使用 GPU Coder 将其部署到 NVIDIA Jetson 平台。我们需要生成 GPU 代码以利用算法中的内在并行性。首先,我们会编写 main 函数进行封装,以利用 OpenCV 访问连接到 NVIDIA Jetson 的 USB 相机。此功能将视频帧从相机送到我们的 chromaKey 算法,随后在屏幕上显示输出内容。

生成 GPU 代码后,我们首先创建 GPU Coder 配置对象、设置 GPU 参数以指向 NVIDIA Jetson 硬件平台,然后加入自定义的 main 函数。我们不会在 MATLAB 主机上编译代码,因为我们将专门为 NVIDIA Jetson 平台生成代码。我们将创建脚本来设置 GPU Coder 配置、输入示例数据,并为我们的应用生成源代码。

关于MATLAB 图像处理算法的作用分析介绍

我们随后在 MATLAB 中运行脚本为 chromaKey 算法生成 CUDA 代码。

向 NVIDIA Jetson 部署绿屏算法

要向 NVIDIA Jetson 部署生成的代码,我们需要使用以下 MATLAB 命令将全部所需文件打包到 codegen 目录。

关于MATLAB 图像处理算法的作用分析介绍

接下来,将生成的所有 codegen 文件夹从主机复制到 NVIDIA Jetson 控制板。在传输文件后,我们直接登录到 NVIDIA Jetson 以构建并运行应用程序。

登录到 NVIDIA Jetson 后,我们运行 NVIDIA 提供的 jetson_clocks.sh 脚本以将平台性能最大化、切换到包含生成的源代码(之前传输)的 codegen 目录,然后执行以下显示的编译命令。

在可执行程序(chromaKey)Build 后,使用 NVIDIA Jetson 控制台上的 USB 网络摄像头通过以下命令运行应用程序。每秒显示帧数将显示在输出窗口中。

关于MATLAB 图像处理算法的作用分析介绍

图 4 显示出现绿屏效果前后 NVIDIA Jetson 板卡的 USB 相机的输出内容。

图4:应用绿屏效果前后的示例

Raspberry Pi 和 NVIDIA Jetson 性能对比

NVIDIA Jetson 上 GPU 更加强大的并行处理能力极大地提高了算法的性能。Raspberry Pi 实现了约 1 帧/秒的帧频,而 NVIDIA Jetson 对于 1280x720 大小的图像实现了 20 帧/秒以上的帧频。也就是说,无需对算法进行任何修改或优化,我们便获得了 20 倍以上的加速。通过优化 MATLAB 算法提高 GPU 代码的生成效率,我们可以实现更高的性能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像处理
    +关注

    关注

    27

    文章

    1275

    浏览量

    56573
  • 摄像头
    +关注

    关注

    59

    文章

    4793

    浏览量

    95255
  • 网络
    +关注

    关注

    14

    文章

    7480

    浏览量

    88535
收藏 人收藏

    评论

    相关推荐

    FPGA在图像处理领域的优势有哪些?

    。这种并行处理能力使得FPGA在处理大规模图像数据时表现出色,能够实时完成复杂的图像处理算法。 二、高灵活性 FPGA具有很高的灵活性,可以
    发表于 10-09 14:36

    图像识别算法有哪几种

    图像识别算法是计算机视觉领域的核心技术之一,它通过分析处理图像数据,实现对图像中的目标、场景和
    的头像 发表于 07-16 11:22 889次阅读

    图像识别算法都有哪些方法

    图像识别算法是计算机视觉领域的核心任务之一,它涉及到从图像中提取特征并进行分类、识别和分析的过程。随着深度学习技术的不断发展,图像识别
    的头像 发表于 07-16 11:14 4912次阅读

    图像识别算法的优缺点有哪些

    图像识别算法可以快速地处理大量图像数据,提高工作效率。与传统的人工识别方法相比,图像识别算法
    的头像 发表于 07-16 11:09 1215次阅读

    利用Matlab函数实现深度学习算法

    Matlab中实现深度学习算法是一个复杂但强大的过程,可以应用于各种领域,如图像识别、自然语言处理、时间序列预测等。这里,我将概述一个基本的流程,包括环境设置、数据准备、模型设计、训
    的头像 发表于 07-14 14:21 1787次阅读

    FPGA设计经验之图像处理

    今天和大侠简单聊一聊基于FPGA的图像处理,之前也和各位大侠聊过相关的图像处理,这里面也超链接了几篇,具体如下: 图像边缘检测
    发表于 06-12 16:26

    基于FPGA的实时边缘检测系统设计,Sobel图像边缘检测,FPGA图像处理

    ,利用乒乓操作和 SDRAM 缓存图像,可以实时提取视频图像的边缘特征。文中对比了 MATLAB 和 FPGA 的处理效果,由于 FPGA 对算法
    发表于 05-24 07:45

    MATLAB信号处理常用函数详解

    MATLAB是一款功能强大的数学软件,尤其在信号处理领域,它提供了众多的函数和工具箱,使得信号的分析处理、仿真变得简单而高效。本文将详细介绍
    的头像 发表于 05-17 14:31 1558次阅读

    基于MATLAB的信号处理系统与分析

    在信息技术日新月异的今天,信号处理分析技术在通信、控制、生物医学、图像处理等领域的应用日益广泛。MATLAB作为一款功能强大的数学软件,为
    的头像 发表于 05-17 14:24 929次阅读

    请问有人用过瑞芯微自定义3A算法模块吗

    目前也研究了好一阵了,想请教一下如何开发自己的3A算法库或者别的图像处理算法库。想和各位讨论一下
    发表于 01-25 10:15

    FPGA图像处理之CLAHE算法

    在FPGA图像处理--CLAHE算法(一)中介绍了为啥要用CLAHE算法来做图像增强。
    的头像 发表于 01-04 12:23 2319次阅读
    FPGA<b class='flag-5'>图像</b><b class='flag-5'>处理</b>之CLAHE<b class='flag-5'>算法</b>

    FPGA图像处理-CLAHE算法介绍(一)

    介绍CLAHE算法之前必须要先提一下直方图均衡化,直方图均衡化算法是一种常见的图像增强算法,可以让像素的亮度分配的更加均匀从而获得一个比较
    的头像 发表于 01-02 13:32 1645次阅读
    FPGA<b class='flag-5'>图像</b><b class='flag-5'>处理</b>-CLAHE<b class='flag-5'>算法</b><b class='flag-5'>介绍</b>(一)

    图像处理算法——边缘检测

    基于边缘检测的分析不易受整体光照强度变化的影响,同时利用边缘信息容易凸显目标信息和达到简化处理的目的,因此很多图像理解方法都以边缘为基础。边缘检测强调的是图像对比度。
    的头像 发表于 11-30 16:56 957次阅读
    <b class='flag-5'>图像</b><b class='flag-5'>处理算法</b>——边缘检测

    关于利用传统图像处理方法瑕疵检测总结

    最近做图像处理与识别相关的事情,先从OpenCV/Matlab入手,看传统算法在瑕疵检测方向能做到什么程度。   因之前并没有相关的经验,乍开始生怕闭门造车,遂多方搜寻,相关的会
    的头像 发表于 11-20 15:19 758次阅读

    基于图像处理的PCB自动检测系统的设计与研究(二)

    手动检测可以根据需要在采集图像时直接通过控制步进电机运动将CCD摄像头运动到待测PCB板的主要部位,在进行图像处理时也可以根据图像质量来选择与之 相适应的
    发表于 11-15 15:44 612次阅读
    基于<b class='flag-5'>图像</b><b class='flag-5'>处理</b>的PCB自动检测系统的设计与研究(二)