技术文章及资料中心

ARTICLE

文章中心

产品

应用

其他

安装使用 您的位置:首页--文章中心--空间光调制器(SLM)

SLM编程指导

1、应用范围


本文主要是对基于MATLAB进行SLM相位图生成的编程指导。


2、自带软件载入图像格式需求


SLM自带软件LcosControl需要载入的相位图格式是8bit bmp(即256色bmp文件),并且会自动在SLM上进行居中。所以比如x10468型号的SLM,相位图像最大尺寸是600(高度)*800(宽度)。而对于X13138/x13267型号,相位图像最大尺寸则是1024(高度)*1280(宽度)。相位图尺寸如果比这个小,则会自动居中在SLM屏幕中。 如何确认图像是否是8bit bmp,有以下两种方式


2.1使用MATLAB观察

使用imread语句读取图像,例如a=imread('示例.bmp'); 如果图像是正确的8bit bmp格式,则a的结果下图,为二维矩阵,并且为uint8格式 


 


2.2使用imagej观察

使用imagej打开图像,然后可以在分辨率右侧看到为8bit,则为正确格式的bmp,如果为RGB,则为不正确格式,需要转化为8bit bmp(最简单的方式是选择画图打开,然后另存为BMP中,选择256色位图) 


 


3、如何使用MATLAB生成对应格式图像


因为MATLAB是基于矩阵进行运算的编程语言,而图像的源数据本身就是矩阵,因而MATLAB非常适合用于进行生成相位图,相位图处理的运算。直接对矩阵中不同元素进行赋值即可。如下为两个使用MATLAB进行相位图生成以及运算的例子,可供参考。

 

3.1生成一个0-pi的相位图

如下为生成一个0-pi相位(左面一半相位是0,右面一半相位是pi)的示例程序,其余程序可以按照此程序做参考。假设使用的调制器是x13138 (分辨率是1024*1280,有效分辨率是1024*1272)。 %之后是这句话的注释。

a=zeros(1024,1272);%首先生成一个尺寸是1024*1272的纯0矩阵;

a(:,1:636)=0;%将矩阵a左面一半赋值为0

a(:,637:1272)=pi;% 将矩阵a右面一半赋值为pi

a=a*256/2/pi;% 因为我们图像是8bit得到bmp,像素值的范围是0-256; 因而在编辑相位图时,是让0对应着相位0, 像素值256对应着相位2pi;所以本句话是进行相位到灰度的转化

a=uint8(a); %将double格式的矩阵a转化为uint8格式的的矩阵a,如果不转化则无法将a有效的保存为8bit的bmp图像

imwrite(a,'final.bmp')%将矩阵a保存在final.bmp中,因为上句话已经设置了a为uint8的格式,所以用imwrite直接就可以生成8bit的bmp图片。然后可以用LcosControl直接载入final.bmp即可。

 

3.2将相位图叠加闪耀光栅相位

如下图是将计算得到的相位图与闪耀光栅相位图进行叠加的过程,叠加衍射光栅相位,可以分离衍射图像与0级光。

a=imread('raw.bmp'); %读取原始相位图raw.bmp到矩阵a中

b=imread('grating.bmp');%读取光栅的相位图grating.bmp到矩阵b中

a=double(a);

b=double(b);%因为使用imread读取8bit bmp后,矩阵a和b都是uint8型,取值是0-255的整数。因而这种直接进行加减乘除容易出现问题,比如100+200会等于255,而不是300;1/2*3=0,而不是2/3; 100*3会等于255,而不是300;因而当我们需要对矩阵进行操作的时候,需要首先转化为double格式,再进行计算

c=a+b; %将两个相位图进行叠加;

c=mod(c,256); %由于我们最终是要生成8bit的bmp文件,取值范围是0-255,所以需要对结果对256进行取余。对应着相位中x+n*2pi与x相位是等效的。

c=uint8(c);%将c重新转化为uint8格式;

imwrite(c,'final.bmp');%将合并的结果存储在final.bmp中。然后可以用LcosControl直接载入final.bmp即可。

3.3 生成闪耀光栅

slmheight=1024; %使用的SLM高度的分辨率

slmwidth=1272; %使用的SLM宽度的分辨率

period=10; %设置闪耀光栅的周期,就是一个周期内相位从0到2pi

a=zeros(slmheight,slmwidth);

for l=1:slmwidth;

a(:,l)=mod(l,period);

end

a=255*a/max(max(a));

a=uint8(a);%将数据设置为8bit的格式,这样存储就可以存储为8bit bmp格式。

imwrite(a,'a.bmp'); %将闪耀光栅相位存储为a.bmp



# 相关工程师


 

针对以上内容,如您有任何问题,欢迎联系我们



上一个:空间光调制器LCOS-SLM装机手册-X13138系列

下一个: 【FAQ】空间光调制器LCOS-SLM的使用

×
回到顶部