Beispiel #1
0
def generate_training_data(number_of_samples, num_noise_sample_percentage=0.0):

    number_of_noise_samples = int(number_of_samples *
                                  num_noise_sample_percentage)
    number_of_circles = number_of_samples - number_of_noise_samples
    growth_rate = np.min(GEOMETRY.volume_shape) / number_of_circles / 2

    data = np.empty((number_of_samples, ) + tuple(GEOMETRY.sinogram_shape))
    labels = np.empty((number_of_samples, ) + tuple(GEOMETRY.volume_shape))

    with tf.Session() as sess:

        # build growing circles until volume is filled
        for i in range(number_of_circles):
            pos = GEOMETRY.volume_shape // 2  # middle
            radius = int(growth_rate * (i + 1))
            value = 1.0  #np.random.uniform(0.01, 1.0) # here one could also try random values for each circle
            labels[i] = primitives_2d.circle(GEOMETRY.volume_shape, pos,
                                             radius, value)

            # project it
            data[i] = generate_sinogram_parallel_2d(labels[i], GEOMETRY)

        # add some noise only phantoms
        for i in range(number_of_samples - number_of_noise_samples,
                       number_of_samples):
            labels[i] = np.random.uniform(0.0, 1.0, GEOMETRY.volume_shape)
            data[i] = generate_sinogram_parallel_2d(labels[i], GEOMETRY)

    return data, labels
Beispiel #2
0
def get_test_data(number_of_samples=1):

    data = np.empty((number_of_samples, ) + tuple(GEOMETRY.sinogram_shape))
    labels = np.empty((number_of_samples, ) + tuple(GEOMETRY.volume_shape))

    with tf.Session() as sess:

        # get shepp logan 2d
        if number_of_samples == 1:
            labels[0] = shepp_logan.shepp_logan_enhanced(GEOMETRY.volume_shape)
            data[0] = generate_sinogram_parallel_2d(labels[0], GEOMETRY)

        # every slice of shepp logan 3d with number_of_samples as Z-dimension as own image
        else:
            labels = shepp_logan.shepp_logan_3d((number_of_samples, ) +
                                                tuple(GEOMETRY.sinogram_shape))
            for i in range(number_of_samples):
                data[i] = generate_sinogram_parallel_2d(labels[i], GEOMETRY)

    return data, labels
Beispiel #3
0
def get_test_cupping_data():

    data = np.empty((1, ) + tuple(GEOMETRY.sinogram_shape), dtype=np.float32)
    labels = np.empty((1, ) + tuple(GEOMETRY.volume_shape), dtype=np.float32)

    labels[0] = primitives_2d.circle(GEOMETRY.volume_shape,
                                     GEOMETRY.volume_shape // 2,
                                     np.min(GEOMETRY.volume_shape // 2))
    data[0] = generate_sinogram_parallel_2d(np.expand_dims(labels[0], axis=0),
                                            GEOMETRY)

    return data, labels
Beispiel #4
0
def get_test_cupping_data():

    data = np.empty((1, ) + tuple(GEOMETRY.sinogram_shape))
    labels = np.empty((1, ) + tuple(GEOMETRY.volume_shape))

    with tf.Session() as sess:
        labels[0] = primitives_2d.circle(GEOMETRY.volume_shape,
                                         GEOMETRY.volume_shape // 2,
                                         np.min(GEOMETRY.volume_shape // 2))
        data[0] = generate_sinogram_parallel_2d(labels[0], GEOMETRY)

    return data, labels
Beispiel #5
0
def generate_training_data():
    label_list = []
    input_data_list = []
    max_radius = np.min(GEOMETRY.volume_shape) // 2
    center_pos = [(GEOMETRY.volume_shape[0]-1)//2, (GEOMETRY.volume_shape[1]-1)//2]
    #Compute phantom
    for n in range(9, max_radius, 2):
        #Add batch dimension with dim == 1 for sinogram generation
        phantom = np.expand_dims( primitives_2d.circle(GEOMETRY.volume_shape, center_pos, n), axis = 0)
        label_list.append(phantom)
    #Create sinogram data
    with tf.Session() as sess:
        for phantom in label_list:
            sinogram = generate_sinogram_parallel_2d(phantom, GEOMETRY)
            input_data_list.append(sinogram)
    #Remove batch dimension
    return np.squeeze(np.asarray(input_data_list)), np.squeeze(np.asarray(label_list))
Beispiel #6
0
def generate_validation_data(number_of_samples):

    growth_rate = np.min(GEOMETRY.volume_shape) / number_of_samples / 2

    data   = np.empty((number_of_samples,) + tuple(GEOMETRY.sinogram_shape))
    labels = np.empty((number_of_samples,) + tuple(GEOMETRY.volume_shape))

    with tf.Session() as sess:

        # build growing rectangles
        for i in range(number_of_samples):
            size   = np.array([growth_rate * (i+1), growth_rate * (i+1)], dtype=np.int32)
            pos    = GEOMETRY.volume_shape//2 - size//2 # middle
            value  = np.random.uniform(0.01, 1.0)
            labels[i] = primitives_2d.rect(GEOMETRY.volume_shape, pos, size, value)

            # project it
            data[i] = generate_sinogram_parallel_2d(np.expand_dims(labels[i],axis=0), GEOMETRY)

    return data, labels
Beispiel #7
0
def get_test_data(number_of_samples=1):

    data = np.empty((number_of_samples, ) + tuple(GEOMETRY.sinogram_shape),
                    dtype=np.float32)
    labels = np.empty((number_of_samples, ) + tuple(GEOMETRY.volume_shape),
                      dtype=np.float32)

    # get shepp logan 2d
    if number_of_samples == 1:
        labels[0] = shepp_logan.shepp_logan_enhanced(GEOMETRY.volume_shape)
        data[0] = generate_sinogram(np.expand_dims(labels[0], axis=0),
                                    parallel_projection2d, GEOMETRY)

    # every slice of shepp logan 3d with number_of_samples as Z-dimension as own image
    else:
        labels = shepp_logan.shepp_logan_3d((number_of_samples, ) +
                                            tuple(GEOMETRY.sinogram_shape))
        for i in range(number_of_samples):
            data[i] = generate_sinogram_parallel_2d(
                np.expand_dims(labels[i], axis=0), GEOMETRY)

    return data, labels