Esempio n. 1
0
def canvas():
    form = CanvasForm()
    form2 = NoiseForm()

    # If post request with form1, tracks the star selected
    if form.validate_on_submit() and form.submit.data:
        x = form.data['x']
        y = form.data['y']
        # outFolder = form.data['outputFolder']
        '''This accounts for cases where x and y are close to edges
        Note: Done, but can probably be made more pythonic. I have left it as is because stars
        are rarely, if ever, near edges of images
        TODO: Unhardcode the image size parameters here if I decide to improve this section
        TODO: Account for edges without reducing the template size (to avoid reducing accuracy)'''
        # This part makes the template bounds so that the star is in the center
        template_rect = {'x': x - 100, 'y': y - 100, 'h': 200, 'w': 200}
        if x < 100 or x > 1948:  # I hard coded a width bound here, change in the future
            template_rect['x'] = x
            template_rect['w'] = 2 * x
            if x > 1948:
                template_rect['x'] = 2048 - x
        if y < 100 or y > 1948:  # I hard coded a height bound here, change in the future
            template_rect['y'] = y
            template_rect['h'] = 2 * y
            if y > 1948:
                template_rect['y'] = 2048 - y

        '''TODO: I'm leaving previous code, which makes a dictionary, as is for now. Potentially hange this in the future'''
        x = template_rect['x']
        y = template_rect['y']
        height = template_rect['h']
        width = template_rect['w']
        img = cv2.imread('app/static/images/Initial_Image.jpg', cv2.IMREAD_GRAYSCALE)
        template = img[y:y+height, x:x+width]

        # print('Warning: The tracking parameters are currently in testing mode (no rotation, 200 pixel translation steps)')  # Warns user
        # track_matrix_fast('Testing', 'Data/Testing/Denoised', template, img.shape, 360, 200)  # This is just for testing, very large steps=fast but inaccurate
        track_matrix_fast('Testing', 'Data/Testing/Denoised', template, img.shape)  # This is for real tracking
        aperture_photometry(np.load('Data/Testing/positions.npy'))
        # track_matrix('Testing', 'Data/Testing/Denoised', template_rect)
        # track('Testing', 'Data/Testing/Denoised', template_rect)
        return redirect('/lightcurve')

    # If post request with form2, adjusts the denoising parameter
    elif form2.validate_on_submit() and form2.submit.data:
        response = make_response(render_template('canvas.html', form=form, form2=form2))

        if form2.data['adjust'] == 'reset':
            response.set_cookie('threshold', '.35')  # If user chooses reset, resets threshold to .35
            denoise(.35)  # Denoises with .35 as threshold
        else:
            # Otherwise, increases/decreases threshold by amount specified by user
            threshold = round(float(request.cookies.get('threshold')) + float(form2.data['adjust']), 2)  # Rounds to 2 decimals
            print(str(threshold))  # Just for testing
            denoise(threshold)  # Denoises with new threshold
            response.set_cookie('threshold', str(threshold))  # Sets new threshold

        return response

    response = make_response(render_template('canvas.html', form=form, form2=form2))
    if 'threshold' not in request.cookies:  # Sets cookie holding threshold if it hasn't been set
        response.set_cookie('threshold', '.35')  # Note: Threshold has to be a string, can't use a float
    return response