コード例 #1
0
def compute_zernike_basis(num_polynomials, field_res, dtype=torch.float32, wo_piston=False):
    """Computes a set of Zernike basis function with resolution field_res

    num_polynomials: number of Zernike polynomials in this basis
    field_res: [height, width] in px, any list-like object
    dtype: torch dtype for computation at different precision
    """

    # size the zernike basis to avoid circular masking
    zernike_diam = int(np.ceil(np.sqrt(field_res[0]**2 + field_res[1]**2)))

    # create zernike functions

    if not wo_piston:
        zernike = zernikeArray(num_polynomials, zernike_diam)
    else:  # 200427 - exclude pistorn term
        idxs = range(2, 2 + num_polynomials)
        zernike = zernikeArray(idxs, zernike_diam)

    zernike = utils.crop_image(zernike, field_res, pytorch=False)

    # convert to tensor and create phase
    zernike = torch.tensor(zernike, dtype=dtype, requires_grad=False)

    return zernike
コード例 #2
0
def test_zernikeArray_comparison():
    full_zernike_array = functions.zernikeArray(10, 32)
    subset_zernike_array = functions.zernikeArray([2, 3, 4], 32)
    assert (numpy.allclose(full_zernike_array[1:4], subset_zernike_array))
コード例 #3
0
def test_zernikeArray_list():
    zernike_array = functions.zernikeArray([2, 3, 4], 32)
    assert (zernike_array.shape == (3, 32, 32))
コード例 #4
0
def test_zernikeArray_single():
    zernike_array = functions.zernikeArray(10, 32)
    assert (zernike_array.shape == (10, 32, 32))
コード例 #5
0
def test_zernikeArray_comparison():
    full_zernike_array = functions.zernikeArray(10, 32)
    subset_zernike_array = functions.zernikeArray([2, 3, 4], 32)
    assert(numpy.allclose(full_zernike_array[1:4], subset_zernike_array))
コード例 #6
0
def test_zernikeArray_list():
    zernike_array = functions.zernikeArray([2, 3, 4], 32)
    assert(zernike_array.shape == (3, 32, 32))
コード例 #7
0
def test_zernikeArray_single():
    zernike_array = functions.zernikeArray(10, 32)
    assert(zernike_array.shape == (10, 32, 32))