资讯专栏INFORMATION COLUMN

COI实验室技能:MATLAB控制PCO相机

不知名网友 / 2559人阅读

摘要:实验室技能控制相机利用程序控制相机采集图片可以实现采集任务的自动化,极大地提高实验效率。安装相机控制软件下载并安装预备资源中的相机控制软件。安装之后会解压控制相机所需要的文件。

COI实验室技能:MATLAB控制PCO相机

  利用程序控制相机采集图片可以实现采集任务的自动化,极大地提高实验效率。本文将系统性地介绍如何掌握这一技能。从环境配置 -> GUI界面使用 -> 脚本编写 -> 项目实践几大方面进行介绍。PCO有三种可支持的matlab控制方法——adaptor、flim package和sdk,本文主要介绍方便实用的adaptor方法(特别感谢课题组袁海明同学的帮助)。本文所介绍的逻辑思路也适用于其它相机的控制(不限于PCO相机)。


PS: 本文篇幅较长,如果只是想简单地实现matlab程序控制相机,只需阅读第三、四节即可。

1. 预备资源和知识点

为了检验你是否掌握了这一技能,可以通过解决以下问题来检验:

  • 配置好环境并通过image acquisition工具箱预览;
  • 利用matlab实现PCO相机的自动曝光;
  • 基于某一模型实时地采集并处理图像。

该技巧的特点:

  • 仅需要USB连接电脑即可,不需要额外的图像采集卡;
  • 方便快捷地的实现控制;

备注:如果已经熟练配置环境,可以直接跳过第二节。

2. 环境配置

  正常工作之前,需要配置好matlab控制PCO所需要的环境,其基本流程如下:

环境配置很简单,下面给出了具体配置时的中间过程,如果能理解其意思可以迅速跳过。

2.1 安装PCO相机控制软件

  下载并安装预备资源中的PCO相机控制软件camware。首先确保能在PCO相机控制软件下正常采集到图片:

2.2安装PCO的matlab配套包

  测试完相机控制软件,就说明相机与电脑之前的串口通信是正常的。接下来下载并安装预备资源中的PCO的matlab配套包。安装之后会解压matlab控制相机所需要的文件。安装后的文件如下:

  该安装包支持三种matlab控制相机的方式,本文主要介绍adaptor的方式。

2.3 配置matlab环境

  打开上一节安装的adaptor文件夹,其中“readme.txt”介绍了配置流程。

整理一下需要配置的内容包括:

  • 安装附加工具包“MinGW-w64”编译器;
  • 安装附加工具包“image acquisition toolbox”;
  • 设置adaptor文件夹为matlab的当前路径;
  • 在matlab命令窗口输入“pco_imaqregister”,它会自动安装所需的dll文件;
  • 在命令行输入“imaqhwinfo”来检验环境是否配置成功;

(1) 安装附加工具包“MinGW-w64”编译器
流程:点击matlab菜单栏主页 -> 点击附加功能 -> 搜索安装“MinGW-w64”(可能需要登录mathwork的账户,没有注册一个即可);

(2) 安装附加工具包“image acquisition toolbox”
流程:点击matlab菜单栏主页 -> 点击附加功能 -> 搜索安装“image acquisition toolbox”;

(3) 在matlab命令窗口输入“pco_imaqregister”,它会自动安装所需的dll文件
设置adaptor文件夹作为当前matlab的路径,然后在命令行窗口运行“pco_imaqregister”;

(4) 在命令行输入“imaqhwinfo”来检验环境是否配置成功
如果运行上述指令后,弹出的结果中InstalledAdaptors:有内容,则说明环境配置成功,接下来就可以实现matlab控制PCO了。

3. matlab控制相机的GUI介绍(★★★)

  在环境配置成功后,打开matlab菜单栏app中“image acquisition”工具包,会弹出matlab的相机控制窗口。熟练掌握这一技能是后面灵活编写代码的关键,往后需要设置的指令都可以直接从GUI的操作中查找。如下图所示,笔者已对关键信息做出标注。

特点:

  • 通过GUI可以检测matlab环境是否配置成功;
  • 通过GUI的相机属性设置和右下角的命令指示窗口,可以获取属性设置的代码指令;
  • 指令包括设置曝光时间、每次采集的数量、是否添加时间戳、是否增加delay、触发模式、快门模式等等;

4. 用脚本的形式实现相机控制(★★★)

  在熟练掌握GUI操作的基础上,我们就可以根据指令提示编写自己的相机控制脚本了。其基本流程主要如下:
根据上述流程和GUI的指令提示,我们可以编写出如下最简单的采集程序:

% control camera by matlab codeclc,clearclose all% get sourcevid = videoinput("pcocameraadaptor_r2020a", 0, "USB 3.0");src = getselectedsource(vid);% initialize camera propertiesvid.FramesPerTrigger = 1;   % setting the collecting number in each triggersrc.E1ExposureTime_unit = "us";  src.E2ExposureTime = 10000;% collecting imagesstart(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerendimg = getdata(vid);% save and display imagemkdir("./images");imwrite(img,"./images/test.tif");imshow(img);% close viddelete(vid);

程序的运行结果如下,可以灵活便捷地采集到不同的图像:

  在这个程序中,采集指令其实只有中间的三行代码,其余部分都是属性设置或者保存显示文件。因此,在这个框架下,我们可以非常灵活地编写自己的采集程序,并且可以增加图像处理算法到程序中。下一节将介绍几种应用此框架的编程实例。

5. 实践项目(★★★★★)

5.1 基于matlab程序实现最大的动态范围利用率

  本项目旨在通过算法实现相机的自动曝光,从而适应不同亮度的拍照环境,特别是对于亮度变化迅速的应用场景。以调节镜头的光圈作为场景亮暗的变化模拟,本项目程序的运行结果如下。在改变光圈大小后(模拟场景亮度变化),程序能够自动地调整曝光时间,使得采集图像的强度分布充满相机整个动态范围,从而实现最大动态范围的利用率。

大光圈的结果:
小光圈的结果:

该自动曝光模型具有以下特点:

  • 实现百毫秒量级自动曝光的调整;
  • 面对极大程度地过曝,程序也能快速地调整到合适的曝光时间;
  • 实现了最大动态范围的利用率,并可以通过调整模型参数实现不同程度的自适应。

5.1.1 最大化利用率的模型

  问题核心:如果相机曝光时间不合适,可能会造成图像过暗或者过曝,传统方法是人工调试,其主要缺点就是速度慢。所以核心问题就是如何找到合适的曝光时间,并且能同时解决过暗或者过曝的情况。

  模型思路:

按照伪代码的思路,其程序实现方法如下:

% 编写程序实现PCO相机自动曝光% 流程:设置一个初始曝光时间10ms -> 采集一张图片 -> 计算前2%数值的均值V -> %       e_t=6553/V*e_t -> 重新采集图像 -> 计算前2%数值的均值V ->e_t=65535/V*e_t;clc, clearclose all% get sourcevid = videoinput("pcocameraadaptor_r2020a",0,"USB 3.0");src = getselectedsource(vid);% initializationvid.FramesPerTrigger = 1;exposure_time = 10000;   src.E1ExposureTime_unit = "us";src.E2ExposureTime = exposure_time;fprintf("测试程序实现自动曝光/n");% capture imagestart(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerend     % ensure that vid had capture enough imagesimg1 = getdata(vid);% upgrate the first stage exposure_time[A1,~] = sort(img1(:),"descend");V1 = mean(A1(1:round(numel(A1)/50)));exposure_time1 = 6553./V1.*exposure_time;src.E2ExposureTime = exposure_time1;% disp(["upgrade the first stage exposure_time is: ",...%     num2str(exposure_time1/1000),"ms"]);pause(0.001);start(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerend     % ensure that vid had capture enough imagesimg2 = getdata(vid);% upgrate the second stage exposure_time[A2,~] = sort(img2(:),"descend");V2 = mean(A2(1:round(numel(A2)/50)));exposure_time = 65535./V2.*exposure_time1;src.E2ExposureTime = exposure_time;disp(["upgrade the final exposure_time is: ",...    num2str(exposure_time/1000),"ms"]);pause(0.001);% capture the needing imagesstart(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerend     % ensure that vid had capture enough imagesimg = getdata(vid);figure(1),set(gcf,"Units","Pixel","position",[934 238 985 409]);subplot(121), imshow(img);subplot(122), imhist(img);pause(0.001);% close viddelete(vid)

模型中计算前1%的数值也是可以的,只是其曝光程度有微小的差别。

5.2 基于matlab程序实时演示模型对采集图像的处理结果

  本项目主要演示如何将图像处理算法增加到采集过程中,从而实现实时的处理图像。以图像的热力估计模型(仅道具,非真实)为例,其运行结果为:

如图,左边为相机实时采集到的图像,右边为经过模型处理后实时显示的结果。
程序实现:

% control camera by matlab codeclc,clearclose all% get sourcevid = videoinput("pcocameraadaptor_r2020a", 0, "USB 3.0");src = getselectedsource(vid);% initialize camera propertiesvid.FramesPerTrigger = 1;   % setting the collecting number in each triggersrc.E1ExposureTime_unit = "us";  src.E2ExposureTime = 15000;% collecting imagesn = 0;while n<100    n = n+1;    start(vid);    while get(vid,"FramesAvailable")<vid.FramesPerTrigger    end    img = im2double(getdata(vid));    img_gray = im2uint8(img);    img_tmp = repmat(img_gray,1,1,3);    img_deal = label2rgb(gray2ind(img_gray, 255), jet(255));    figure(1), imshow([img_tmp img_deal]);    pause(0.001);end% close viddelete(vid);

6. 总结

  本文系统性地介绍了如何掌握matlab控制PCO相机这一技能,从环境配置 -> GUI操作介绍 -> 脚本编写 -> 实例演示,相信掌握这项技能的你们一定能实验做得更顺利,哈哈哈~
  在笔者掌握这项技能之后,发现其用处很大,所以专门为它写了这篇指南,也感谢课题组师弟师妹帮忙准备了素材(* ̄︶ ̄)。
  欢迎广大读者们批评指正,学习交流,加油!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125569.html

相关文章

  • matlab是什么?

    摘要:是两个词的组合,意为矩阵工厂矩阵实验室,软件主要面对科学计算可视化以及交互式程序设计的高科技计算环境。MATLAB是矩形实验室(Matrix laboratory)的简称,是由美国MathWorks公司开发的,它是一款出品的商业数学软件,它常常用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。MATLAB是matrix&l...

    3119555200 评论0 收藏0
  • 一百行js代码实现一个校验工具

    摘要:一个不小心,代码里就出现了不少等不可维护的代码。因此,我觉得一个团队或者是一个项目,需要一个校验工具,简化我们的工作。只看这一小段代码我希望我的校验工具也是链式调用,链式调用可以极大的简化代码。 源码:git仓库 欢迎star & fork ~~ 首发于 掘金 做过校验需求的小伙伴们都知道,校验其实是个麻烦事。 规则多,需要校验的字段多,都给我们前端带来巨大的工作量。 一个不小心,代码...

    TZLLOG 评论0 收藏0
  • 加强深度学习能力以简化设计、训练和部署模型

    摘要:此发行版还添加了新的重要的深度学习功能,可简化工程师研究人员及其他领域专家设计训练和部署模型的方式。内部基准测试显示,在部署阶段为深度学习模型产生的代码,比的性能提高倍,比的性能提高倍。 MATLAB Release 2017b (R2017b) 今日正式推出,其中包括 MATLAB 和 Simulink 的若干新功能、六款新产品以及对其他 86 款产品的更新和修复补丁。此发行版还添加了新的...

    pf_miles 评论0 收藏0
  • 一份关于人工智能、机器学习和大数据的报告

    摘要:为了你最好的未来,请不断的学习创始人兼首席执行官人工智能和机器学习的时代已经到来了,这些领域都有可能对印度的行业产生重大的影响。在印度努力重振生产力增长的同时,人工智能和机器学习有望填补这一空白。 showImg(http://upload-images.jianshu.io/upload_images/13825820-702c6873cd07cfc3.jpg?imageMogr2/...

    Carbs 评论0 收藏0

发表评论

0条评论

不知名网友

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<