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

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

3天内不再提示

如何使用Simulink实现MATLAB图像采集与输出

电子设计 来源:CSDN 博主 作者:FPGADesigner 2020-12-30 10:32 次阅读

本文将介绍如何使用Simulink提供的回调函数机制,实现从MATLAB工作空间采集和输出图像。

Simulink回调函数机制
在空白处右键->Model Properties,切换到“Callbacks”标签下,可以看到Simulink支持的回调函数,这些函数在某些时刻会自动触发,执行M文件中的程序:

点击每个函数,可以在右边看到该函数的触发时刻;右边的编辑框中输入执行的M文件的名称。M文件与slx文件在同一目录下。

System Generator设计
数据流方法完成图像的采集与输出,其实就是从MATLAB的工作空间中导入图像数据,再将结果导出到工作空间。按下图连接model:

pIYBAF9uJwGAA2RKAABIJrq0wCE842.jpg

From Workspace从工作空间中读取数据;To Workspace将数据导出到工作空间。读出数据时会受到采样时间的控制,因此读出的为标量数据,可以直接接入Gateway In中。三个输入模块和输出模块分别对应R、G、B三个通道,双击打开配置界面,在“Data”中设置变量名称。

设计思路如下:在启动模型时,设计一个函数读取图片并将图片转换为From Worspace兼容的格式;在仿真结束时,设计一个函数将输出的数据重新整理为图片格式并显示结果。添加一个PreLoadFcn回调函数LoadImg.m、一个StopFcn回调函数ShowImg.m,分别完成上述功能。

回调函数设计
LoadImg.m文件的代码清单如下:
%读取图片
img = imread('test.jpg');

%读取图片尺寸
width = size(img, 2); %长
height = size(img, 1); %宽

%读取R、G、B通道,2维转1维
inimg_r = reshape(img(:,:,1), 1, width*height);
inimg_g = reshape(img(:,:,2), 1, width*height);
inimg_b = reshape(img(:,:,3), 1, width*height);

%From Workspace读取的变量要求为double类型矩阵
%第一列为时间;其余列为数据
inimg_r = [(0:width*height-1)' double(inimg_r)'];
inimg_g = [(0:width*height-1)' double(inimg_g)'];
inimg_b = [(0:width*height-1)' double(inimg_b)'];

注意From Workspace读取的变量(inimg_r、inimg_g、inimg_b)中的第一列为采样时间设置,这里设计为每个时刻读一个像素值。StopFcn.m文件的代码清单如下:
%一维转二维
out_r = reshape(outimg_r(1:width*height), height, width);
out_g = reshape(outimg_g(1:width*height), height, width);
out_b = reshape(outimg_b(1:width*height), height, width);

%组合R、G、B通道
showimg = zeros(width, height, 3);
showimg(:,:,1) = out_r;
showimg(:,:,2) = out_g;
showimg(:,:,3) = out_b;

subplot(121);
imshow(img); title('输入图像');
subplot(122);
imshow(uint8(showimg)); title('输出图像');

将RGB三通道合为一副图像并显示。

仿真测试
读取一副256*256的RGB图像,系统采样时间为1s,仿真时长设置为256*256,即只读取一次完整的图像。先关闭slx文件,再次启动,此时MATLAB的工作空间:

o4YBAF9uJwKAHnvuAAAkJ-SmSGc640.jpg

可见启动时执行了LoadImg函数。运行仿真后,MATLAB的工作空间:

pIYBAF9uJwOAWRBrAABLbzGzRwc692.jpg

可见仿真结束时执行了ShowImg函数,弹出结果图如下:

在某些方面讲,基于数据流方法的图像采集与输出要更灵活,设计者可以根据需要随意设计回调函数(当然回调函数的用途不限于此)。

编辑:hfy

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

    关注

    175

    文章

    2908

    浏览量

    228325
  • Simulink
    +关注

    关注

    22

    文章

    506

    浏览量

    61483
收藏 人收藏

    评论

    相关推荐

    图像采集卡与千兆卡的区别

    卡是一种专门用于接收和处理图像信号的设备。它一般通过接口将摄像机、监控设备等图像源连接到计算机上,实现图像采集、存储、处理和传输等功能。
    的头像 发表于 12-15 09:57 358次阅读

    MATLAB的数字逻辑电路Simulink仿真

    电子发烧友网站提供《MATLAB的数字逻辑电路Simulink仿真.pdf》资料免费下载
    发表于 11-17 15:39 3次下载
    <b class='flag-5'>MATLAB</b>的数字逻辑电路<b class='flag-5'>Simulink</b>仿真

    Simulink中如何创建一个Publisher

    > Library Browser打开Simulink库浏览器。单击ROS工具箱选项卡(也可以在MATLAB命令窗口中输入roslib)。选择ROS库。 4.将Publish块拖到模型中。双击该块以配置主题和消息类型。 5.为Topic源选择
    的头像 发表于 11-15 17:32 242次阅读
    <b class='flag-5'>Simulink</b>中如何创建一个Publisher

    讲解MATLAB/Simulink HDL使用入门

    我们将使用实例讲解MATLAB / Simulink HDL 使用入门。
    的头像 发表于 11-06 09:12 547次阅读
    讲解<b class='flag-5'>MATLAB</b>/<b class='flag-5'>Simulink</b> HDL使用入门

    MATLAB图像处理实例详解

    读入图像数据到内存中,并显示读入的图像;  2. 实现直方图均衡化处理,显示处理前后图像的直方图。  3. 显示并保存处理结果。  四、 实验步骤:  1. 打开
    发表于 07-18 15:06 5次下载

    MBD的Simulink使用技巧:Simulink代码生成的基本概念(1)

    MATLAB/Simulink中一共提供三个代码生成的工具
    的头像 发表于 07-13 15:11 1292次阅读
    MBD的<b class='flag-5'>Simulink</b>使用技巧:<b class='flag-5'>Simulink</b>代码生成的基本概念(1)

    基于Matlab/Simulink建立一种Thevenin/RC电池模块仿真模型

    本文以锂电池数学模型为基础,在Matlab/Simulink的仿真系统中,建立了一种Thevenin/RC电池模块仿真模型,通过实际工况试验,测试精度在允许误差范围内,为电池SOC/SOH研究提供了极大的参考价值。
    的头像 发表于 06-28 10:49 3010次阅读
    基于<b class='flag-5'>Matlab</b>/<b class='flag-5'>Simulink</b>建立一种Thevenin/RC电池模块仿真模型

    基于龙伯格观测器Luenberger的无感控制+Matlab/Simulink仿真

    本章节采用龙伯格观测器进行永磁同步电机的无传感器控制,首先分析了龙伯格观测器的原理,然后设计了PMSM的全阶龙伯格观测器,最后通过Matlab/Simulink对该观测器方案进行仿真分析,为了进行
    发表于 06-08 14:46 2016次阅读
    基于龙伯格观测器Luenberger的无感控制+<b class='flag-5'>Matlab</b>/<b class='flag-5'>Simulink</b>仿真

    如何建立matlab和freemaster的关系?如何将freemaster数据导入matlab/simulink

    你能帮助我们的客户解决以下问题吗? 如何建立matlab和freemaster的关系? 如何将freemaster数据导入matlab/simulink
    发表于 05-29 08:25

    simulink和pspice联合仿真问题

    的联合仿真操作: PSpice 17.4+Matlab a2023 利用pspice调用matlab,添加主路径后,simulink中有PSpice block模块,然后双击模块选择模型,输入
    发表于 05-23 15:04

    matlab simulink问题求助

    一道难题需要解答。请帮忙在18号完成,越快越好。希望能给出简单辅导。谢谢!涉及内容包括matlab simulink知识点涉及 lqr控制 全状态回授,状态观测器联系电话(微信同号):***
    发表于 04-16 10:11

    利用MATLAB/SIMULINK完成光伏-储能并网系统搭建-part1

    光伏-储能并网系统仿真(MATLAB/SIMUlink)-part1 如果不想看原理,可以直接点击文件 下载连接 本文介绍如何利用MATLAB/SIMUlink完成一个光伏-储能并网系
    发表于 04-14 10:50 9次下载
    利用<b class='flag-5'>MATLAB</b>/<b class='flag-5'>SIMULINK</b>完成光伏-储能并网系统搭建-part1

    如何读取matlab simulink中的通用寄存器?

    大家好,如何读取 matlab simulink 中的通用寄存器?
    发表于 04-06 07:13

    直流有刷电机调速原理Matlab/Simulink仿真

    文章目录 前言 一、直流有刷电机的调速原理 二、Matlab/Simulink仿真分析 2.1.调压调速 2.2.电枢回路串电阻 2.3.弱磁调速 总结 前言 分析直流有刷电机的调速
    发表于 04-03 14:22 4次下载
    直流有刷电机调速原理<b class='flag-5'>Matlab</b>/<b class='flag-5'>Simulink</b>仿真

    无法在MATLAB Simulink的模型设置中找到NXPFS32144板?

    我正在攻读 PHD 并使用 MATLAB 学生版。我在MATLAB中安装了NXPs321XX的MBD工具箱。但是我无法在 MATLAB Simulink 的模型设置中找到该板。我为项目
    发表于 03-30 07:26