From 046b79ba9eeef8638ff23ea9001ef5958a08f875 Mon Sep 17 00:00:00 2001 From: turtlebasket Date: Thu, 20 Oct 2022 17:33:15 -0700 Subject: [PATCH] add scaling factor & equation settings --- .gitignore | 2 -- flask_frontend.py | 5 +++-- ratio_pyrometry.py | 31 +++++++++++++++++++------------ static/.gitkeep | 0 static/pyrometry_eqn.png | Bin 0 -> 28090 bytes templates/index.jinja2 | 13 ++++++++++++- 6 files changed, 34 insertions(+), 17 deletions(-) delete mode 100644 static/.gitkeep create mode 100644 static/pyrometry_eqn.png diff --git a/.gitignore b/.gitignore index 36f119f..49ac250 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,6 @@ .vscode/ *.swp -static/* -!static/.gitkeep # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/flask_frontend.py b/flask_frontend.py index 706164c..a7aa269 100644 --- a/flask_frontend.py +++ b/flask_frontend.py @@ -6,7 +6,7 @@ import cv2 as cv app = Flask( __name__, - static_folder='./static', + static_folder='static', static_url_path='/s/' ) @@ -27,7 +27,8 @@ def ratio_pyro(): MAX_TEMP=float(request.form['max_temp']), MIN_TEMP=float(request.form['min_temp']), smoothing_radius=int(request.form['smoothing_radius']), - key_entries=int(request.form['legend_entries']) + key_entries=int(request.form['legend_entries']), + eqn_scaling_factor=float(request.form['equation_scaling_factor']) ) img_orig_b64 = base64.b64encode(cv.imencode('.png', img_orig)[1]).decode(encoding='utf-8') diff --git a/ratio_pyrometry.py b/ratio_pyrometry.py index ab71836..b36311b 100644 --- a/ratio_pyrometry.py +++ b/ratio_pyrometry.py @@ -12,7 +12,8 @@ def rg_ratio_normalize( exposure_time, ISO, MIN_TEMP, - MAX_TEMP + MAX_TEMP, + eqn_scaling_factor ): # copy image into new array & chop off alpha values (if applicable) imgnew = imgarr.copy()[:,:,:3] @@ -26,18 +27,14 @@ def rg_ratio_normalize( r_norm = (px[2] - I_Darkcurrent) * (f_stop ** 2) / (ISO * exposure_time) # apply camera calibration func - temp_C = pyrometry_calibration_formula(g_norm, r_norm, default=MIN_TEMP) + temp_C = pyrometry_calibration_formula(g_norm, r_norm, default=MIN_TEMP) * eqn_scaling_factor # remove pixels outside calibration range if (MIN_TEMP != None and temp_C < MIN_TEMP) or (MAX_TEMP != None and temp_C > MAX_TEMP): temp_C = MIN_TEMP - # min intensity = 0 - # pix_i = temp_C - MIN_TEMP - - temp_new = temp_C - MIN_TEMP - pix_i = temp_new / (MAX_TEMP - MIN_TEMP) * 255 - + # scale light intensity to calculated temperature + pix_i = scale_temp(temp_C, MIN_TEMP, MAX_TEMP) imgnew[i][j] = [pix_i, pix_i, pix_i] return imgnew @@ -59,6 +56,15 @@ def pyrometry_calibration_formula(i_ng, i_nr, default=24.0): except: return default + +@jit(nopython=True) +def scale_temp(t, min, max): + """ + Scale pixel temperature (t) to light intensity given min & max temp. + """ + return (t - min) / (max - min) * 255 + + def ratio_pyrometry_pipeline( file_bytes, # camera settings @@ -70,12 +76,12 @@ def ratio_pyrometry_pipeline( MAX_TEMP: float, MIN_TEMP: float, smoothing_radius: int, - key_entries: int + key_entries: int, + eqn_scaling_factor: float, ): # read image & crop img_orig = cv.imdecode(file_bytes, cv.IMREAD_UNCHANGED) - # img = img[y1:y2, x1:x2] img = rg_ratio_normalize( img_orig, @@ -84,7 +90,8 @@ def ratio_pyrometry_pipeline( exposure_time, ISO, MIN_TEMP, - MAX_TEMP + MAX_TEMP, + eqn_scaling_factor ) # build & apply smoothing conv kernel @@ -107,7 +114,7 @@ def ratio_pyrometry_pipeline( key_img_arr = [[]] for i in range(key_entries): res_temp = MIN_TEMP + (i * step) - res_color = (res_temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP) * 255 + res_color = scale_temp(res_temp, MIN_TEMP, MAX_TEMP) temps.append(math.floor(res_temp)) key_img_arr[0].append([res_color, res_color, res_color]) diff --git a/static/.gitkeep b/static/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/static/pyrometry_eqn.png b/static/pyrometry_eqn.png new file mode 100644 index 0000000000000000000000000000000000000000..fe2c725cbf0c8f3b6154e9ac3bbece1a0fcae7fc GIT binary patch literal 28090 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 Settings - +

+

Pyrometry Equation Settings

+ + pyrometry calibration formula +
+ + +
+

Output Settings

@@ -66,6 +74,9 @@ imgUpload.onchange = event => { #img-preview { width: 18rem; } +#pyro-eqn { + width: 800px; +} {% endblock %}