Phase Images

Contents

img = imread('Zernike.jpg');
imshow(img);

embed phase image

g1 = rgb2gray(im2double(img));
g2 = fftprep(g1);
mk = 0.1; %% phase modulation
g = exp(j*2*pi*mk*g2);
gshift = fftshift(g);
g_fft = fft2(gshift);
gf = fftshift(g_fft);
out = gf.*conj(gf);
gmax = max(max(out));
gmin = min(min(out));
fprintf('maximum %g minimum %g\n',gmax,gmin);
logim(out/gmax,8);
clear gf;
maximum 4.06996e+009 minimum 0.000164659

inverse transform (no filter)

gt = fftshift(sqrt(g2));
gf = fft2(gt);
gs = ifft2(gf);
ginv = fftshift(gs);
out = ginv.*conj(ginv);
gmax = max(max(out));
gmin = min(min(out));
fprintf('maximum %g minimum %g\n',gmax,gmin);
imshow(out/gmax);
clear gt gf gs ginv
maximum 1 minimum 0

dark-field

gfilt = g_fft;
gfilt(1,1) = 0.0;
gs = ifft2(gfilt);
ginv = fftshift(gs);
out = ginv.*conj(ginv);
gmax = max(max(out));
gmin = min(min(out));
fprintf('maximum %g minimum %g\n',gmax,gmin);
imshow(out/gmax);
maximum 0.179064 minimum 0.000704727

schlieren method

sz = size(g_fft);
N = max(sz);
gfilt = g_fft;
gfilt(N/2:N,1:N) = 0.0;
gs = ifft2(gfilt);
ginv = fftshift(gs);
out = ginv.*conj(ginv);
gmax = max(max(out));
gmin = min(min(out));
fprintf('maximum %g minimum %g\n',gmax,gmin);
imshow(out/gmax);
maximum 2.27131 minimum 0.302775

positive phase contrast

gfilt = g_fft;
gfilt(1,1) = g_fft(1,1)*(0.5j*pi);
gs = ifft2(gfilt);
ginv = fftshift(gs);
out = ginv.*conj(ginv);
gmax = max(max(out));
gmin = min(min(out));
fprintf('maximum %g minimum %g\n',gmax,gmin);
imshow(out/gmax);
maximum 3.79592 minimum 1.77809

negative phase contrast

gfilt = g_fft;
gfilt(1,1) = g_fft(1,1)*(1.5j*pi);
gs = ifft2(gfilt);
ginv = fftshift(gs);
out = ginv.*conj(ginv);
gmax = max(max(out));
gmin = min(min(out));
fprintf('maximum %g minimum %g\n',gmax,gmin);
imshow(out/gmax);
maximum 25.0585 minimum 19.2864
imshow((out-gmin)/(gmax-gmin));