はじめに
スペックルの説明として”像を劣化させる要因”と説明されることがあります。
本記事は過去に何回かスペックルの計算をしてきましたが、これは無限遠(フラウンフォーファー回折)、若しくは瞳面上でのスペックルに対応します。
今まで、結像へのスペックルの影響を考えていませんでした。
結像光学系の計算をスクラッチで行うのは煩雑になりやすいのですが、前回紹介したTorchOpticsなら比較的容易に計算ができます。
本記事によりスペックルが光学系に対して、どのような影響を与えるか直感的に理解できます。
以前のスペックル記事
問題設定
以下の条件で計算してみます。
波長は、レーザーでよく使われるHe-Neレーザーに対応させました。
・波長 : 632.8nm
・グリッド数 : 1000
・1ピクセルの大きさ : 10 $\mu$m
→画像1辺の大きさ:10cm
・焦点距離:10 cm
NAは0.5と計算できます。
・物面に’YOHAKU’の文字を配置

4f光学系における結像
4f光学系とは
4f光学系は、同じ焦点距離fをもつレンズ2枚を使った光学系です。
モノ-レンズ1-レンズ2-結像位置が順に配置された光学系です。全体で焦点距離fの4倍の距離があります。
同じ大きさで結像され、レンズ2枚の中間位置にフーリエ面(図中でFocal plane)がくる基本的な光学系です。
スペックルなしでの結像
torchopicsを使って計算してみます。
4f光学系もtorchopticsならSystemクラスで比較的簡単に記載できます。
物面からの距離をzとして、z=2f,4f位置を可視してみます。
2fはフーリエ面、4fは像面ですね。
import matplotlib.pyplot as plt
import torch
import numpy as np
import torchoptics
from torchoptics import Field, visualize_tensor, System
from torchoptics.elements import Lens,AmplitudeModulator
from torchoptics.profiles import circle, gaussian
from PIL import Image
shape = 1000 # Grid size
spacing = 10e-6 # Grid spacing (m)
wavelength = 632.8e-9 # HeNe laser (m)
f=0.1#レンズ焦点距離
# Configure torchoptics defaults
torchoptics.set_default_spacing(spacing)
torchoptics.set_default_wavelength(wavelength)
device = "cuda" if torch.cuda.is_available() else "cpu"
# targe画像の読み込み
img = Image.open("YOHAKU.png").convert("L")
img = img.resize((shape, shape))
# numpy配列へ
target = np.array(img)
# 白文字を1、背景を0
target = target / 255.0
# 振幅
target = torch.from_numpy(np.sqrt(target))
# Create Field object
input_field = Field(target ).to(device)
input_field.visualize(title="Input Field")
# 4f光学系の定義
system_4f = System(
Lens(shape,f,z=f),
Lens(shape,f,z=3*f)
)
z=[2,4]
for i in z:
output = system_4f.measure_at_z(input_field, z=i*f)
output.visualize()フーリエ面では物面のフーリエ変換が現れる
z=2fの位置は物面のフーリエ変換に対応します。
左が強度、右が位相であり、左図にて中心が周波数が0位置で、周辺にいくほど高周波に対応します。
図では小さくて、分かりづらいですが、縦方向に広がりが横方向に比べて大きいです。
縦方向は横方向に比べて高周波成分まで含んでいると言えます。
ターゲット文字が横書きだったので、横幅が大きいのに対して縦幅が小さいので、これに対応していると思います。
像面

像が反転しています。高校物理で習った倒立実像です。
よく見ると、両端のYとUが若干にじんでいます。
視野の端なので、4f光学系で光が削られているんでしょうか。
参考記事
スペックルがある場合
スペックルを入れてみます。
コードで以下数行を追加、修正すればよいです。
random_phase = 2 * torch.pi * torch.rand(shape, shape)
input_field = Field(target * torch.exp(1j * random_phase)).to(device)可視化してみます。
フーリエ面(スペックル有)

今まで計算したようなスペックル模様が見えます。
スペックル無だと中心に光が集まっていましたが、スペックルを入れると瞳面上でも広がっています。
像面(スペックル有)

YOHAKUという文字は維持されていますが、輝度のばらつきが大きくなっており、両端が暗くなって見づらいですね。
ただし、カラーバーの値をスペックル無と比べると、スペックル有の方が値が大きいので
輝点があることが分かります。
また、スペックル無だと文字上では位相の値が一定でしたがスペックル有では文字上でも位相がバラバラになっていることが分かります。
まとめ
TorchOpticsを使って、スペックルがある時とない時の4f光学系の像を計算しました。
- 4f光学系では像が倒立する
- 4f光学系が視野端で暗くなるが、光学系で光が遮光される影響と考えられる
- スペックルが入ると像に輝点が入り、輝度ばらつきが大きくなる
参考文献
スペックルの教科書。論文の引用元や海外コードの解説で必ず登場するグッドマンの不朽の名著。今回省略した理論の詳細についても解説されています。
今回はフーリエ面で物面のフーリエ変換が現れる理由についての説明は省略しましたが、この点を押さえたい方は谷田貝先生の光とフーリエ変換をおすすめします。日本語でフーリエ光学を学びたいという方にもおすすめです。
TorchOpticsの公式ページ
https://arxiv.org/abs/2411.18591



コメント