mirror of
https://github.com/cdtools-developers/cdtools.git
synced 2026-11-09 15:54:02 +01:00
Update the initialization for near field to work better with oversampling
This commit is contained in:
1 parent
148b9f9865
commit
1dd389d08a
2 files changed
+14
-15
No files matched your search
@@ -321,19 +321,23 @@ def convolve_1d(image, kernel, dim=0, fftshift_kernel=True):
|
||||
return conv_im
|
||||
|
||||
|
||||
def fourier_upsample(ims, preserve_mean=False):
|
||||
def fourier_upsample(ims, upsample_factor=2, preserve_mean=False):
|
||||
# If preserve_mean is true, it preserves the mean pixel intensity
|
||||
# otherwise, it preserves the total summed intensity
|
||||
upsampled = t.zeros(ims.shape[:-2]+(2*ims.shape[-2],2*ims.shape[-1]),
|
||||
|
||||
upsampled = t.zeros(ims.shape[:-2]+(upsample_factor*ims.shape[-2],
|
||||
upsample_factor*ims.shape[-1]),
|
||||
dtype=ims.dtype,
|
||||
device=ims.device)
|
||||
left = [ims.shape[-2]//2,ims.shape[-1]//2]
|
||||
right = [ims.shape[-2]//2+ims.shape[-2],
|
||||
ims.shape[-1]//2+ims.shape[-1]]
|
||||
|
||||
left = [((upsample_factor-1)*ims.shape[-2])//2,
|
||||
((upsample_factor-1)*ims.shape[-1])//2]
|
||||
right = [left[0]+ims.shape[-2],
|
||||
left[1]+ims.shape[-1]]
|
||||
|
||||
upsampled[...,left[0]:right[0],left[1]:right[1]] = propagators.far_field(ims)
|
||||
if preserve_mean:
|
||||
upsampled *= 2
|
||||
upsampled *= upsample_factor
|
||||
return propagators.inverse_far_field(upsampled)
|
||||
|
||||
|
||||
|
||||
@@ -419,15 +419,10 @@ def SHARP_style_near_field_probe(dataset, backward_propagator, oversampling=1):
|
||||
probe_guess = backward_propagator(probe_guess_det_plane)
|
||||
|
||||
if oversampling != 1:
|
||||
probe_guess_real = t.nn.functional.interpolate(
|
||||
t.real(probe_guess).unsqueeze(0).unsqueeze(0),
|
||||
scale_factor=oversampling, mode='bilinear')[0,0]
|
||||
probe_guess_imag = t.nn.functional.interpolate(
|
||||
t.imag(probe_guess).unsqueeze(0).unsqueeze(0),
|
||||
scale_factor=oversampling, mode='bilinear')[0,0]
|
||||
|
||||
probe_guess = ( t.complex(probe_guess_real, probe_guess_imag)
|
||||
/ oversampling**2 )
|
||||
probe_guess = image_processing.fourier_upsample(
|
||||
probe_guess,
|
||||
upsample_factor=oversampling, preserve_mean=False
|
||||
)
|
||||
|
||||
return probe_guess
|
||||
|
||||
|
||||
Reference in new issue
Block a user