COI实验室技能:MATLAB控制PCO相机
COI实验室技能:MATLAB控制PCO相机
利用程序控制相机采集图片可以实现采集任务的自动化,极大地提高实验效率。本文将系统性地介绍如何掌握这一技能。从环境配置 -> GUI界面使用 -> 脚本编写 -> 项目实践几大方面进行介绍。PCO有三种可支持的matlab控制方法——adaptor、flim package和sdk,本文主要介绍方便实用的adaptor方法(特别感谢课题组袁海明同学的帮助)。本文所介绍的逻辑思路也适用于其它相机的控制(不限于PCO相机)。
目录
- 1. 预备资源和知识点
- 2. 环境配置
- 2.1 安装PCO相机控制软件
- 2.2安装PCO的matlab配套包
- 2.3 配置matlab环境
- 3. matlab控制相机的GUI介绍(★★★)
- 4. 用脚本的形式实现相机控制(★★★)
- 5. 实践项目(★★★★★)
- 5.1 基于matlab程序实现最大的动态范围利用率
- 5.1.1 最大化利用率的模型
- 5.2 基于matlab程序实时演示模型对采集图像的处理结果
- 6. 总结
PS: 本文篇幅较长,如果只是想简单地实现matlab程序控制相机,只需阅读第三、四节即可。
1. 预备资源和知识点
- matlab资源:微信“软件管家” -> 回复“matlab” -> 按指引安装,po’jie版资源建议仅供个人学习使用;
- PCO相机控制软件: https://www.pco.cn/software/camera-control-software/pcocamware/
- PCO官网提供的matlab配套包及说明书: https://www.pco.cn/software/third-party-software/matlab/
- 有一台PCO相机或其他能连接电脑的相机;
为了检验你是否掌握了这一技能,可以通过解决以下问题来检验:
- 配置好环境并通过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 code
clc,clear
close all% get source
vid = videoinput('pcocameraadaptor_r2020a', 0, 'USB 3.0');
src = getselectedsource(vid);% initialize camera properties
vid.FramesPerTrigger = 1; % setting the collecting number in each trigger
src.E1ExposureTime_unit = 'us'; src.E2ExposureTime = 10000;% collecting images
start(vid);
while get(vid,'FramesAvailable')<vid.FramesPerTrigger
end
img = getdata(vid);% save and display image
mkdir('./images');
imwrite(img,'./images/test.tif');
imshow(img);% close vid
delete(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, clear
close all% get source
vid = videoinput('pcocameraadaptor_r2020a',0,'USB 3.0');
src = getselectedsource(vid);% initialization
vid.FramesPerTrigger = 1;
exposure_time = 10000;
src.E1ExposureTime_unit = 'us';
src.E2ExposureTime = exposure_time;
fprintf('测试程序实现自动曝光\n');% capture image
start(vid);
while get(vid,'FramesAvailable')<vid.FramesPerTrigger
end % ensure that vid had capture enough images
img1 = 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.FramesPerTrigger
end % ensure that vid had capture enough images
img2 = 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 images
start(vid);
while get(vid,'FramesAvailable')<vid.FramesPerTrigger
end % ensure that vid had capture enough images
img = 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 vid
delete(vid)
模型中计算前1%的数值也是可以的,只是其曝光程度有微小的差别。
5.2 基于matlab程序实时演示模型对采集图像的处理结果
本项目主要演示如何将图像处理算法增加到采集过程中,从而实现实时的处理图像。以图像的热力估计模型(仅道具,非真实)为例,其运行结果为:
如图,左边为相机实时采集到的图像,右边为经过模型处理后实时显示的结果。
程序实现:
% control camera by matlab code
clc,clear
close all% get source
vid = videoinput('pcocameraadaptor_r2020a', 0, 'USB 3.0');
src = getselectedsource(vid);% initialize camera properties
vid.FramesPerTrigger = 1; % setting the collecting number in each trigger
src.E1ExposureTime_unit = 'us'; src.E2ExposureTime = 15000;% collecting images
n = 0;
while n<100n = n+1;start(vid);while get(vid,'FramesAvailable')<vid.FramesPerTriggerendimg = 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 vid
delete(vid);
6. 总结
本文系统性地介绍了如何掌握matlab控制PCO相机这一技能,从环境配置 -> GUI操作介绍 -> 脚本编写 -> 实例演示,相信掌握这项技能的你们一定能实验做得更顺利,哈哈哈~
在笔者掌握这项技能之后,发现其用处很大,所以专门为它写了这篇指南,也感谢课题组师弟师妹帮忙准备了素材(* ̄︶ ̄)。
欢迎广大读者们批评指正,学习交流,加油!
COI实验室技能:MATLAB控制PCO相机相关推荐
- 计算光学成像(COI)实验室技能——matlab控制thorlabs位移平台(ActiveX控件)
计算光学成像(COI)实验室技能--matlab控制thorlabs位移平台 本文将介绍如何用matlab代码控制thorlabs位移平台(其他支持ActiveX控件的硬件实现方法类似).通过代码 ...
- COI实验室技能:python控制相机的方法——采集、处理、显示、实时
COI实验室技能:python控制相机的方法--采集.处理.显示.实时 本文介绍如何利用python控制办公摄像头.工业相机和科研相机.将数据采集和处理统一到python代码中. 主要围绕解决 ...
- COI实验室技能——自动切换显示器画面以及实现采集大量实验数据的方法(采集数据可供深度学习训练)
COI实验室技能--自动切换显示器画面以及实现采集大量实验数据的方法 (可供深度学习训练) 本文将介绍一种自动切换显示图片的方法,可以产生不同图像的实验数据:在该方法的基础上,结合控制相机采集图片 ...
- COI实验室技能:常见的图像增强算法(含MATLAB代码)
COI实验室技能:常见的图像增强算法(含MATLAB代码) 成像系统采集到的图片有时不一定具有很好的图像质量,往往需要进行一些图像增强的操作.本文主要整理了几种常见的图像增强算法,包括:同态滤波. ...
- MATLAB控制运算精度
先来看一段MATLAB代码 clear; theta = 264.3783; t1 = [cos(theta); cos(2*theta);cos(3*theta); cos(4*theta); ...
- matlab ltiview应用例子,Matlab控制工具箱(网络软件)
Matlab控制工具箱的应用 --基于Matlab R2010a(7.10.0) 1.线性时不变系统浏览器LTI Viewer 在Matlab的command Window中,建立LTI对象,之后使用 ...
- 基于Matlab的双目相机标定
第一步,打开matlab 输入stereoCameraCalibrator ,进入工具箱 第二步:点击add images 第三步:添加图片路径,并且修改尺寸(根据格子边长) 工具箱会弹窗告诉你一共识 ...
- matlab怎么控制采集卡,用MATLAB控制NI采集卡实现高精度数据采集与分析功能-l采.pdf...
您所在位置:网站首页 > 海量文档  > 计算机 > matlab 用MATLAB控制NI采集卡实现高精度数据采集与分 ...
- matlab 0106,MATLAB控制系统仿真与实例详解.pdf
您所在位置:网站首页 > 海量文档  > 计算机 > matlab MATLAB控制系统仿真与实例详解.pdf6页 本 ...
最新文章
- 按键驱动的恩恩怨怨之概述
- 星际迷航3 -- 父亲的纪念
- 机器学习-数据科学库(第五天)
- MySQL:硬盘在24 * 7工作中罢工了,我该怎么办?
- XML学习第三节 Schema介绍
- 如何在Eclipse里显示BPMN格式的流程图
- c# 多线程 调用带参数函数
- 计算机软件应用控制程序,一种计算机应用程序实时控制软件的制作方法
- 26日直播预告丨 经典知识库:ASM元数据简介及案例分享
- python 第13天作业
- 关于人生的十句经典的话! .
- 火山PC加载DLL窗口案例教程
- c语言- I Love GPLT
- RGBLCD显示实验————复习到这
- java代码下划线是啥意思_java类名加下划线
- BMW Standard Tools 宝马FSC工具套装下载
- selenium工具启动Chrome浏览器时配置选项详解
- 关于信息系统监理师考试怎么备考?
- Cms资源论坛网站模板
- 关于积化和差,和差化积的记忆方法