Octave には2次元のフーリエ変換が組み込まれています. これを利用してフーリエ変換ホログラムを生成できます. 下記の例では,画像を読み込んでフーリエ変換ホログラムを計算しています. 画像は png 形式の 8 ビットグレースケールで 256 x 256 ピクセルの場合です. ランダム位相の行列部分はどうすればいいか考えてみてください.
% read file
BMP = imread('moto.png');
% fft
% ランダム位相の行列を計算する
X = (要素がランダムに -1 または 1 の行列);
BMP = sqrt(BMP);
W0 = BMP .* X;
W1 = real(ifftn(fftshift(W0)));
fmax = max(W1(:));
fmin = min(W1(:));
W1 = (W1 - fmin) / (fmax - fmin) * 255.5;
% write file
imwrite(uint8(W1),'cgh.png');
% End of file


CGHの計算結果(cgh.png)
上記のCGHを見てもなんだか分かりません.像再生のシミュレーションをするとどんな画像が再生されるか分かります.
解説
(準備中)