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

    文章

    2922

    浏览量

    228436
  • Simulink
    +关注

    关注

    22

    文章

    513

    浏览量

    61563
收藏 人收藏

    评论

    相关推荐

    MathWorks宣布推出MATLABSimulink的2024a版本

    MathWorks宣布推出MATLABSimulink的2024a版本
    的头像 发表于 04-07 14:03 146次阅读
    MathWorks宣布推出<b class='flag-5'>MATLAB</b>和<b class='flag-5'>Simulink</b>的2024a版本

    Matlab仿真】单相交交变频器研究与实现Simulink建模

    的交替工作。 最后利用MATLAB R2012a仿真软件搭建单相交-交变频器的仿真模型,并且经过调试,该电路模型能够输出幅值可调、频率可调的正弦波形。 引言 交-交变频器是通过电力电子电路的开关控制,而
    发表于 03-26 17:20

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

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

    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 296次阅读
    <b class='flag-5'>Simulink</b>中如何创建一个Publisher

    讲解MATLAB/Simulink HDL使用入门

    我们将使用实例讲解MATLAB / Simulink HDL 使用入门。
    的头像 发表于 11-06 09:12 616次阅读
    讲解<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 1402次阅读
    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 3371次阅读
    基于<b class='flag-5'>Matlab</b>/<b class='flag-5'>Simulink</b>建立一种Thevenin/RC电池模块仿真模型

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

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

    基于扩展卡尔曼滤波EKF的无感控制+Matlab/Simulink仿真案例

    本章节采用扩展卡尔曼滤波进行永磁同步电机的无传感器控制,首先分析了扩展卡尔曼滤波的原理,然后基于扩展卡尔曼滤波对PMSM进行状态估计,最后通过Matlab/Simulink对该方案进行仿真分析。
    发表于 06-08 14:42 2653次阅读
    基于扩展卡尔曼滤波EKF的无感控制+<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

    永磁同步电机流频比I/F控制原理及Matlab/Simulink仿真分析

    本章节采用流频比I/F控制方法驱动永磁同步电机的转动,首先分析流频比I/F的控制原理,然后在Matlab/Simulink中进行永磁同步电机流频比I/F控制系统的仿真分析,为后续PMSM无感启动做铺垫。
    的头像 发表于 05-24 11:36 1420次阅读
    永磁同步电机流频比I/F控制原理及<b class='flag-5'>Matlab</b>/<b class='flag-5'>Simulink</b>仿真分析

    SVPWM控制技术的基本原理及Matlab/Simulink仿真分析

    本章节首先介绍SVPWM控制技术的原理,然后详细分析SVPWM控制算法的具体实现方式包括7段式SVPWM与5段式SVPWM算法,并通过Matlab/Simulink对SVPWM控制算法进行仿真分析,最后通过永磁同步电机矢量控制的
    的头像 发表于 05-24 11:10 5093次阅读
    SVPWM控制技术的基本原理及<b class='flag-5'>Matlab</b>/<b class='flag-5'>Simulink</b>仿真分析

    simulink和pspice联合仿真问题

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