《鸡你太美,上春山,bad apple,但是空间光调制器》
叫我科大人:
本来很喜欢空间光调制的,这下更喜欢了!
滨松中国:
本视频为基于空间光调制器(SLM)的振幅调制系统投影出来的视频,仅供娱乐,系统具体原理可以参考滨松中国上一个视频https://www.bilibili.com/video/BV1KC4y1C78G/?spm_id_from=333.999.0.0。
基于SLM的振幅调制系统已经有多篇高质量文章发布,欢迎大家学习参考。
1. Ultrafast machine vision with 2D material neural network image sensors. Nature (2020)
2. All-analog photoelectronic chip for high-speed vision tasks. Nature (2023)
3. Geometric deep optical sensing. Science(2023)
在留言区置顶,我们也提供了将MP4视频转化为SLM可以播放的视频播放格式的源代码,方便大家学习参考。
民宣department:
请问贵司有专门做过激光增材制造—选区激光融化SLM光束整形的空间光调制器嘛?有无高斯光转化成平顶光或者贝塞尔光束的专用设备[笑哭]
【回复】平顶直接上DOE,贝塞尔拿轴锥镜干就完了[doge]
【回复】我们基于SLM可以实现您所提到的功能,但是我们没有专门的设备。
电子和空穴:
滨松好不容易整次活,你看人家嘉立创
滨松中国:
下面是视频转换的代码,分为两条评论分享:
%代码主要是把视频转化为SLM可以投屏显示的结果。包括调节分辨率,二值化,然后根据LUT调节灰度值,去除bilibili的标志。
% Step 1: Read and create video files
inputVideo = VideoReader('badapple.mp4');
outputVideo = VideoWriter('new_badapple3.mp4', 'MPEG-4');
outputVideo.FrameRate = inputVideo.FrameRate;
open(outputVideo);
frame_num=0;
% Process each frame
while hasFrame(inputVideo)
frame = readFrame(inputVideo);
% Step 2: Increase resolution,设置为SLM的80%范围进行投影。
if size(frame,1)/size(frame,2)>=0.8
resizedFrame = imresize(frame, 【800 round(800/size(frame,1)*size(frame,2))】);
else
resizedFrame = imresize(frame, 【1024*size(frame,1)/size(frame,2) 1024】);
end
% Step 3: Convert to grayscale
grayFrame = rgb2gray(resizedFrame);
% Step 4: Binarize
binaryFrame = imbinarize(grayFrame);
数理基础扎实的猫:
视频主图左下的弱图像是什么引起的啊
滨松中国:
这个是代码的第二部分:
% Step 5: Add black border,从而让整个视频的尺寸是SLM的分辨率也就是1280*1024.
borderedFrame = padarray(binaryFrame, 【round((1024-size(binaryFrame,1))/2) round((1280-size(binaryFrame,2))/2)】, 0, 'both');
% borderedFrame(:,1024:size(borderedFrame,2))=0;%去除掉边框
% Step 6: Modify specific gray
% levels,下面158是SLM载入158灰度的纯色图片的时候,光经过整个系统输出最弱。而57是SLM载入57灰度得的纯色图片的时候,光经过整个系统输出最强。
modifiedFrame = uint8(borderedFrame); % Copy for modification
modifiedFrame(modifiedFrame == 0) = 158;
modifiedFrame(modifiedFrame == 1) = 57;
% Optional: Convert back to RGB to keep the video in color format
% This step is necessary because VideoWriter expects three channels.
finalFrame = cat(3, modifiedFrame, modifiedFrame, modifiedFrame);
% Write the frame to the new video
writeVideo(outputVideo, finalFrame );
frame_num=frame_num+1
end
% Close the video file
close(outputVideo);