summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rwxr-xr-xutils/raspberrypi/ctt/ctt.py9
-rw-r--r--utils/raspberrypi/ctt/ctt_alsc.py7
-rw-r--r--utils/raspberrypi/ctt/ctt_cac.py32
3 files changed, 37 insertions, 11 deletions
diff --git a/utils/raspberrypi/ctt/ctt.py b/utils/raspberrypi/ctt/ctt.py
index 96f1b5e6..186afda5 100755
--- a/utils/raspberrypi/ctt/ctt.py
+++ b/utils/raspberrypi/ctt/ctt.py
@@ -198,9 +198,12 @@ class Camera:
"""
Write output to json
"""
- self.json['rpi.cac']['cac'] = cacs
- self.log += '\nCAC calibration written to json file'
- print('Finished CAC calibration')
+ if cacs:
+ self.json['rpi.cac']['cac'] = cacs
+ self.log += '\nCAC calibration written to json file'
+ print('Finished CAC calibration')
+ else:
+ self.log += "\nCAC calibration failed"
"""
diff --git a/utils/raspberrypi/ctt/ctt_alsc.py b/utils/raspberrypi/ctt/ctt_alsc.py
index 1d94dfa5..f4fd09e3 100644
--- a/utils/raspberrypi/ctt/ctt_alsc.py
+++ b/utils/raspberrypi/ctt/ctt_alsc.py
@@ -127,11 +127,12 @@ def alsc(Cam, Img, do_alsc_colour, plot=False, grid_size=(16, 12), max_gain=8.0)
channels = [Img.channels[i] for i in Img.order]
"""
calculate size of single rectangle.
- -(-(w-1)//32) is a ceiling division. w-1 is to deal robustly with the case
- where w is a multiple of 32.
+ The divisions here must ensure the final row/column of cells has a non-zero number of
+ pixels.
"""
w, h = Img.w/2, Img.h/2
- dx, dy = int(-(-(w-1)//grid_w)), int(-(-(h-1)//grid_h))
+ dx, dy = (w - 1) // (grid_w - 1), (h - 1) // (grid_h - 1)
+
"""
average the green channels into one
"""
diff --git a/utils/raspberrypi/ctt/ctt_cac.py b/utils/raspberrypi/ctt/ctt_cac.py
index 5a4c5101..a1183989 100644
--- a/utils/raspberrypi/ctt/ctt_cac.py
+++ b/utils/raspberrypi/ctt/ctt_cac.py
@@ -108,12 +108,29 @@ def shifts_to_yaml(red_shift, blue_shift, image_dimensions, output_grid_size=9):
ybsgrid[xgridloc][ygridloc].append(blue_shift[3])
# Now calculate the average pixel shift for each square in the grid
+ grid_incomplete = False
for x in range(output_grid_size - 1):
for y in range(output_grid_size - 1):
- xrgrid[x, y] = np.mean(xrsgrid[x][y])
- yrgrid[x, y] = np.mean(yrsgrid[x][y])
- xbgrid[x, y] = np.mean(xbsgrid[x][y])
- ybgrid[x, y] = np.mean(ybsgrid[x][y])
+ if xrsgrid[x][y]:
+ xrgrid[x, y] = np.mean(xrsgrid[x][y])
+ else:
+ grid_incomplete = True
+ if yrsgrid[x][y]:
+ yrgrid[x, y] = np.mean(yrsgrid[x][y])
+ else:
+ grid_incomplete = True
+ if xbsgrid[x][y]:
+ xbgrid[x, y] = np.mean(xbsgrid[x][y])
+ else:
+ grid_incomplete = True
+ if ybsgrid[x][y]:
+ ybgrid[x, y] = np.mean(ybsgrid[x][y])
+ else:
+ grid_incomplete = True
+
+ if grid_incomplete:
+ raise RuntimeError("\nERROR: CAC measurements do not span the image!"
+ "\nConsider using improved CAC images, or remove them entirely.\n")
# Next, we start to interpolate the central points of the grid that gets passed to the tuning file
input_grids = np.array([xrgrid, yrgrid, xbgrid, ybgrid])
@@ -219,7 +236,12 @@ def cac(Cam):
# tuning file
print("\nCreating output grid")
Cam.log += '\nCreating output grid'
- rx, ry, bx, by = shifts_to_yaml(red_shift, blue_shift, image_size)
+ try:
+ rx, ry, bx, by = shifts_to_yaml(red_shift, blue_shift, image_size)
+ except RuntimeError as e:
+ print(str(e))
+ Cam.log += "\nCAC correction failed! CAC will not be enabled."
+ return {}
print("CAC correction complete!")
Cam.log += '\nCAC correction complete!'