首頁  技術(shù)文章  用液晶空間光調(diào)制器(SLM)產(chǎn)生全息圖的GS算法范例

用液晶空間光調(diào)制器(SLM)產(chǎn)生全息圖的GS算法范例

發(fā)布時間:2020-05-15 11:18:25 瀏覽量:8983 作者:Paul

摘要

GS算法(Gerchberg-Saxton algorithm)是一種迭代方法旋讹,當(dāng)輸入和輸出端的各自光強分布已知時,可以通過光學(xué)傳播函數(shù)离斩,例如

傅里葉變化节吮,來恢復(fù)光束的相位分布抽高。


正文



一束激光可以分為兩部分厨内,一部分是相位祈秕,另一部分是光斑光強分布,他們是相互關(guān)聯(lián)的雏胃,可以通過改變光束的相位部分请毛,對光斑進行

整形。上述GS算法就是其中的一種方法瞭亮。


主要分為四步

1.假設(shè)入射光斑是均勻光強方仿,相位因為是未知的,可以用一個隨機相位替代统翩,或者通過Target Intensity的IFFT變化求得

2.然后經(jīng)過FFT變化后仙蚜,得到的是焦距是的光斑分布,光強與Target Intensity比較近似厂汗,但是不夠理想

3.替換上述步驟的光強分布委粉,保留相位分布,得到新的一束激光

4.經(jīng)過IFFT變化后保留光斑的相位娶桦,作為下一次迭代的初始相位


通過上述步驟的反復(fù)迭代贾节,會不斷改善Approximation to target intensity的光斑。


Matlab代碼參考:

%% 數(shù)據(jù)初始化

pic = 'test.jpg';           % 輸入圖片

file = 'phase.bmp';         % 圖片保存位置

num = 1000;                 % GS迭代次數(shù)


%% 讀取圖片 

im = imread(pic);       

im = rgb2gray(im);

im = im2double(im);


%% GS算法

im = mat2gray(im);

light = gpuArray(im);               % 加入CUDA衷畦,提高計算速度

light = ifft2(light);               % 計算初始相位


for n = 1:num

    phase = angle(light);

    light  = 1.*exp(1i*phase);      % 1. 均勻光強入射光

    light = fft2(light);            % 2. 聚焦面上的光強

    phase = angle(light);    

    light = im.*exp(1i*phase);      % 3. 理想光斑替換

    light = ifft2(light);           % 4. 傅里葉逆運算

end


% 均勻光入射后再做一次傅里葉變化

phase = angle(light);

light  = 1.*exp(1i*phase);

light = fft2(light);

intensity = mat2gray(abs(light));

imshow(intensity);


%% 保存相位圖

phase = gather(phase);              % 將phase返回到內(nèi)存中

imwrite(mat2gray(phase), file)


備注:

1. CUDA可以提高運算的速度栗涂,例如上述過程,當(dāng)上述1000此循環(huán)祈争,沒有CUDA的時候斤程,循環(huán)過程保持在8秒以上,當(dāng)啟用CUDA后菩混,一般在1.1秒左右忿墅。

2. 隨著迭代次數(shù)的增加,恢復(fù)后的光強越來越清晰

3.通過對比原始圖和經(jīng)過迭代后的圖片墨吓,可以判斷觀察后圖片的恢復(fù)程度


您可以通過我們的官方網(wǎng)站了解更多的產(chǎn)品信息球匕,或直接來電咨詢4006-888-532纹磺。

国产福利姬视频在线观看,国产原创激情在线观看网站,亚洲欧美日韩激色国产精品,日韩精品亚洲国产