本文将介绍一种自动切换显示图片的方法,可以产生不同图像的实验数据;在该方法的基础上,结合控制相机采集图片的程序,即实现采集大量的实验数据。我们可以用这种方法为深度学习提供实验数据集,训练神经网络,实现特定的应用任务。
需求:假如手上有很多张图片(数据集),如何控制这些图片在显示器中自动切换显示呢?并且具有以下显示要求:
● 显示图片时没有窗口的边框;
● 图片可按任意尺寸进行显示;
● 图片可在任意位置进行显示,包括第二屏幕;
具体实现结果,如下图所示,

如图,该方法实现了无边框任意位置自动切换图片的功能,这在一些光学实验上可以作为很好的实验目标。
应用场景:
● 在空间光调制器上加载自己的图片,并实现自动切换图片;
● 将显示器作为光学成像实验的靶标,可以采集大量不同画面的实验数据,比如将它应用到散射成像中,就可以得到退化图像和清晰图像的配对数据,进而可以训练出实现散射成像的神经网络模型。
笔者主要通过matlab的java.swing工具包实现这一功能。其具体实现流程包括四步:

------------------
实现代码如下,自行准备好图片,可以直接复制下面代码到matlab中运行:
% matlab实现画面的自动显示
clc,clear
close all;
n = 50; % 图片集数量
show_in_second_screen = 0; % 是否在第二显示器显示
for i = 1:n
% 读取图片并自动切换下一张图
img = imread([num2str(i),'.png']); % 注意图片的文件路径
% 调用java.swaing工具包实现相关操作
jimg = im2java(img);
frame = javax.swing.JFrame;
frame.setUndecorated(true);
% 导入图片
icon = javax.swing.ImageIcon(jimg);
label = javax.swing.JLabel(icon);
frame.getContentPane.add(label);
% 设置窗口的位置,窗口大小默认为根据图像的尺寸
if show_in_second_screen
screenSize = get(0, 'ScreenSize');
frame.setLocation(screenSize,0); % 平移第一显示器的宽度
else
frame.setLocation(100,100); % 根据自己的意愿设置显示位置
end
% 显示
frame.pack;
frame.repaint;
frame.show;
pause(1);
end
代码和数据可从网盘下载:
链接: https://pan.baidu.com/s/1KYLPijH_hznHk2u_ZcOpSw?pwd=p26k
提取码: p26k
采集大量实验数据
在实现自动切换图片的功能之后,只要在程序执行显示命令之后,添加控制相机采集图片的程序即可完成自动采集数据的任务。matlab控制相机采集图片的方法可参考之前的博文:COI实验室技能:MATLAB控制PCO相机。
笔者利用上述方法进行散射成像的实验测试,将显示器放置在散射介质后面,采集对应的清晰图片和退化图片,训练神经网络,从而得到能实现散射成像的神经网络模型,其结果如下:

自动切换显示画面的效果:

本次实验室技能介绍就到这里啦,后续持续补充,欢迎各位读者交流和指点!