Пример #1
0
def histogram(params, image):
    from dials.array_family import flex
    from matplotlib import pyplot
    from astrotbx.input_output.loader import load_raw_image
    r, g, b = load_raw_image(image, params=params.raw)

    r *= params.scale
    g *= params.scale
    b *= params.scale

    dmax = max(flex.max(r), flex.max(g), flex.max(b))

    if params.colour == 'r':
        data = r
    elif params.colour == 'g':
        data = g
    else:
        data = b

    print("Mean / max r: %6.2f / %6.2f" % (flex.mean(r), flex.max(r)))
    print("Mean / max g: %6.2f / %6.2f" % (flex.mean(g), flex.max(g)))
    print("Mean / max b: %6.2f / %6.2f" % (flex.mean(b), flex.max(b)))

    pixels = flex.histogram(data.as_1d(),
                            data_min=params.min,
                            data_max=params.max,
                            n_slots=params.bins)
    v = pixels.slot_centers().as_double()
    n = pixels.slots().as_double()
    pyplot.bar(v, n, log=params.log_n)
    pyplot.savefig(params.output % params.colour)

    if params.save:
        from astrotbx.input_output.saver import save_image
        save_image(params.save, r, g, b)
Пример #2
0
def run(args):
    from dials.util.options import OptionParser
    import libtbx.load_env
    import json

    usage = "%s [options] DSC03206.jpg" % (libtbx.env.dispatcher_name)

    parser = OptionParser(usage=usage, phil=phil_scope)

    params, options, args = parser.parse_args(show_diff_phil=True,
                                              return_unhandled=True)

    max_image_r = None
    max_image_g = None
    max_image_b = None

    from astrotbx.input_output.loader import load_image
    from astrotbx.input_output.saver import save_image

    for image in args:
        r, g, b = load_image(image)

        if max_image_r is None:
            max_image_r = r
        else:
            max_image_r.as_1d().copy_selected((r > max_image_r).iselection(),
                                              r.as_1d())

        if max_image_g is None:
            max_image_g = g
        else:
            max_image_g.as_1d().copy_selected((g > max_image_g).iselection(),
                                              g.as_1d())

        if max_image_b is None:
            max_image_b = b
        else:
            max_image_b.as_1d().copy_selected((b > max_image_b).iselection(),
                                              b.as_1d())

    # output the image

    max_image_r *= params.scale
    max_image_g *= params.scale
    max_image_b *= params.scale

    save_image(params.output, max_image_r, max_image_g, max_image_b)
Пример #3
0
def run(args):
    from dials.util.options import OptionParser
    import libtbx.load_env
    import json

    usage = "%s [options] DSC03206.jpg" % (libtbx.env.dispatcher_name)

    parser = OptionParser(usage=usage, phil=phil_scope)

    params, options, args = parser.parse_args(show_diff_phil=True,
                                              return_unhandled=True)

    sum_image_r = None
    sum_image_g = None
    sum_image_b = None

    from astrotbx.input_output.loader import load_image
    from astrotbx.input_output.saver import save_image

    for image in args:
        r, g, b = load_image(image)

        if sum_image_r is None:
            sum_image_r = r
        else:
            sum_image_r += r

        if sum_image_g is None:
            sum_image_g = g
        else:
            sum_image_g += g

        if sum_image_b is None:
            sum_image_b = b
        else:
            sum_image_b += b

    # output the image

    sum_image_r *= params.scale / len(args)
    sum_image_g *= params.scale / len(args)
    sum_image_b *= params.scale / len(args)

    save_image(params.output, sum_image_r, sum_image_g, sum_image_b)
Пример #4
0
def run(args):
    from dials.util.options import OptionParser
    import libtbx.load_env
    import json

    usage = "%s [options] DSC03206.jpg" % (
        libtbx.env.dispatcher_name)

    parser = OptionParser(
        usage=usage,
        phil=phil_scope)

    params, options, args = parser.parse_args(show_diff_phil=True,
                                              return_unhandled=True)

    import cPickle as pickle
    from dials.array_family import flex

    with open(params.data) as fin:
        sum_image_r, sum_image_g, sum_image_b = pickle.load(fin)

    if params.data_min:
        sum_image_r -= params.data_min
        sum_image_g -= params.data_min
        sum_image_b -= params.data_min

    sum_image_r *= params.scale
    sum_image_g *= params.scale
    sum_image_b *= params.scale

    # output the image

    from astrotbx.input_output.saver import save_image
    save_image(
        params.output,
        sum_image_r,
        sum_image_g,
        sum_image_b,
        params.png)
Пример #5
0
def make_test_image():
    from scitbx import matrix
    from dials.array_family import flex
    import random
    import math

    xmin, xmax = 0, 4272
    ymin, ymax = 0, 2848
    buffer = 100
    n = 30

    # generate n random positions - well within field of view

    x = flex.double(n)
    y = flex.double(n)
    z = flex.double(n, 0.0)

    for j in range(n):
        x[j] = random.uniform(xmin + buffer, xmax - buffer)
        y[j] = random.uniform(ymin + buffer, ymax - buffer)

    r = background(flex.double(flex.grid(ymax, xmax), 0.0), 3)
    g = background(flex.double(flex.grid(ymax, xmax), 0.0), 3)
    b = background(flex.double(flex.grid(ymax, xmax), 0.0), 3)

    # add some stars

    for xy in zip(x, y):
        star_x, star_y = random_positions(1000, 1).parts()
        star_x += xy[0]
        star_y += xy[1]
        for i, j in zip(star_x.iround(), star_y.iround()):
            r[j, i] += 1
            g[j, i] += 1
            b[j, i] += 1

    from astrotbx.input_output.saver import save_image
    save_image('example.png', r, g, b)
Пример #6
0
def run(args):
    from dials.util.options import OptionParser
    import libtbx.load_env
    import json

    usage = "%s [options] DSC03206.jpg" % (libtbx.env.dispatcher_name)

    parser = OptionParser(usage=usage, phil=phil_scope)

    params, options, args = parser.parse_args(show_diff_phil=True,
                                              return_unhandled=True)

    Rtds = json.load(open(params.alignments))
    assert len(Rtds) == len(args)

    sum_image_r = None
    sum_image_g = None
    sum_image_b = None

    from astrotbx.input_output.loader import load_image, load_raw_image
    from astrotbx.input_output.saver import save_image, save_image_gs
    from astrotbx.algorithms.image_align import rotate_translate_array

    raws = ['arw']

    kept = 0

    for image, alignment in zip(args, Rtds):
        if params.dlimit > 0:
            if alignment['d'] > params.dlimit:
                print("Ignoring %s" % image)
                continue
        print("Loading %s" % image)
        kept += 1
        R, t = alignment['R'], alignment['t']
        exten = image.split('.')[-1].lower()
        if exten in raws:
            r, g, b = load_raw_image(image, params.raw)
        else:
            r, g, b = load_image(image)

        _r = rotate_translate_array(r, R, t)
        _g = rotate_translate_array(g, R, t)
        _b = rotate_translate_array(b, R, t)

        if sum_image_r is None:
            sum_image_r = _r
        else:
            sum_image_r += _r

        if sum_image_g is None:
            sum_image_g = _g
        else:
            sum_image_g += _g

        if sum_image_b is None:
            sum_image_b = _b
        else:
            sum_image_b += _b

    # first scale to get the mean image
    sum_image_r *= 1.0 / kept
    sum_image_g *= 1.0 / kept
    sum_image_b *= 1.0 / kept

    # save the data image
    if params.data:
        import cPickle as pickle
        with open(params.data, 'w') as fout:
            pickle.dump((sum_image_r, sum_image_g, sum_image_b),
                        fout,
                        protocol=pickle.HIGHEST_PROTOCOL)

    # output the image scaled however requested (can revisit in
    # astrotbx.develop)
    sum_image_r *= params.scale
    sum_image_g *= params.scale
    sum_image_b *= params.scale

    if params.greyscale:
        save_image_gs(params.output, sum_image_r + sum_image_g + sum_image_b)
    else:
        save_image(params.output, sum_image_r, sum_image_g, sum_image_b)