diff options
Diffstat (limited to 'utils/raspberrypi/ctt/ctt_image_load.py')
-rw-r--r-- | utils/raspberrypi/ctt/ctt_image_load.py | 116 |
1 files changed, 58 insertions, 58 deletions
diff --git a/utils/raspberrypi/ctt/ctt_image_load.py b/utils/raspberrypi/ctt/ctt_image_load.py index dd7adb16..7d097118 100644 --- a/utils/raspberrypi/ctt/ctt_image_load.py +++ b/utils/raspberrypi/ctt/ctt_image_load.py @@ -18,7 +18,7 @@ Once image is extracted from data, it finds 24 16x16 patches for each channel, centred at the macbeth chart squares """ class Image: - def __init__(self,buf): + def __init__(self, buf): self.buf = buf self.patches = None self.saturated = False @@ -45,11 +45,11 @@ class Image: Channel order depending on bayer pattern """ bayer_case = { - 0 : (0,1,2,3), #red - 1 : (2,0,3,1), #green next to red - 2 : (3,2,1,0), #green next to blue - 3 : (1,0,3,2), #blue - 128 : (0,1,2,3) #arbitrary order for greyscale casw + 0 : (0, 1, 2, 3), #red + 1 : (2, 0, 3, 1), #green next to red + 2 : (3, 2, 1, 0), #green next to blue + 3 : (1, 0, 3, 2), #blue + 128 : (0, 1, 2, 3) #arbitrary order for greyscale casw } self.order = bayer_case[self.pattern] @@ -87,7 +87,7 @@ class Image: """ get image from raw scanline data """ - def get_image(self,raw): + def get_image(self, raw): self.dptr = [] """ check if data is 10 or 12 bits @@ -100,31 +100,31 @@ class Image: """ stack scan lines into matrix """ - raw = np.array(raw).reshape(-1,lin_len).astype(np.int64)[:self.h,...] + raw = np.array(raw).reshape(-1, lin_len).astype(np.int64)[:self.h, ...] """ separate 5 bits in each package, stopping when w is satisfied """ - ba0 = raw[...,0:5*((self.w+3)>>2):5] - ba1 = raw[...,1:5*((self.w+3)>>2):5] - ba2 = raw[...,2:5*((self.w+3)>>2):5] - ba3 = raw[...,3:5*((self.w+3)>>2):5] - ba4 = raw[...,4:5*((self.w+3)>>2):5] + ba0 = raw[..., 0:5*((self.w+3)>>2):5] + ba1 = raw[..., 1:5*((self.w+3)>>2):5] + ba2 = raw[..., 2:5*((self.w+3)>>2):5] + ba3 = raw[..., 3:5*((self.w+3)>>2):5] + ba4 = raw[..., 4:5*((self.w+3)>>2):5] """ assemble 10 bit numbers """ - ch0 = np.left_shift((np.left_shift(ba0,2) + (ba4%4)),6) - ch1 = np.left_shift((np.left_shift(ba1,2) + (np.right_shift(ba4,2)%4)),6) - ch2 = np.left_shift((np.left_shift(ba2,2) + (np.right_shift(ba4,4)%4)),6) - ch3 = np.left_shift((np.left_shift(ba3,2) + (np.right_shift(ba4,6)%4)),6) + ch0 = np.left_shift((np.left_shift(ba0, 2) + (ba4%4)), 6) + ch1 = np.left_shift((np.left_shift(ba1, 2) + (np.right_shift(ba4, 2)%4)), 6) + ch2 = np.left_shift((np.left_shift(ba2, 2) + (np.right_shift(ba4, 4)%4)), 6) + ch3 = np.left_shift((np.left_shift(ba3, 2) + (np.right_shift(ba4, 6)%4)), 6) """ interleave bits """ - mat = np.empty((self.h,self.w),dtype=ch0.dtype) + mat = np.empty((self.h, self.w), dtype=ch0.dtype) - mat[...,0::4] = ch0 - mat[...,1::4] = ch1 - mat[...,2::4] = ch2 - mat[...,3::4] = ch3 + mat[..., 0::4] = ch0 + mat[..., 1::4] = ch1 + mat[..., 2::4] = ch2 + mat[..., 3::4] = ch3 """ There is som eleaking memory somewhere in the code. This code here @@ -132,25 +132,25 @@ class Image: reasonable numbers of images, however this is techincally just a workaround. (sorry) """ - ba0,ba1,ba2,ba3,ba4 = None,None,None,None,None - del ba0,ba1,ba2,ba3,ba4 - ch0,ch1,ch2,ch3 = None,None,None,None - del ch0,ch1,ch2,ch3 + ba0, ba1, ba2, ba3, ba4 = None, None, None, None, None + del ba0, ba1, ba2, ba3, ba4 + ch0, ch1, ch2, ch3 = None, None, None, None + del ch0, ch1, ch2, ch3 """ same as before but 12 bit case """ elif self.sigbits == 12: lin_len = ((((((self.w+self.pad+1)>>1)) * 3)+31)>>5) * 32 - raw = np.array(raw).reshape(-1,lin_len).astype(np.int64)[:self.h,...] - ba0 = raw[...,0:3*((self.w+1)>>1):3] - ba1 = raw[...,1:3*((self.w+1)>>1):3] - ba2 = raw[...,2:3*((self.w+1)>>1):3] - ch0 = np.left_shift((np.left_shift(ba0,4) + ba2%16),4) - ch1 = np.left_shift((np.left_shift(ba1,4) + (np.right_shift(ba2,4))%16),4) - mat = np.empty((self.h,self.w),dtype=ch0.dtype) - mat[...,0::2] = ch0 - mat[...,1::2] = ch1 + raw = np.array(raw).reshape(-1, lin_len).astype(np.int64)[:self.h, ...] + ba0 = raw[..., 0:3*((self.w+1)>>1):3] + ba1 = raw[..., 1:3*((self.w+1)>>1):3] + ba2 = raw[..., 2:3*((self.w+1)>>1):3] + ch0 = np.left_shift((np.left_shift(ba0, 4) + ba2%16), 4) + ch1 = np.left_shift((np.left_shift(ba1, 4) + (np.right_shift(ba2, 4))%16), 4) + mat = np.empty((self.h, self.w), dtype=ch0.dtype) + mat[..., 0::2] = ch0 + mat[..., 1::2] = ch1 else: """ @@ -162,21 +162,21 @@ class Image: """ separate bayer channels """ - c0 = mat[0::2,0::2] - c1 = mat[0::2,1::2] - c2 = mat[1::2,0::2] - c3 = mat[1::2,1::2] - self.channels = [c0,c1,c2,c3] + c0 = mat[0::2, 0::2] + c1 = mat[0::2, 1::2] + c2 = mat[1::2, 0::2] + c3 = mat[1::2, 1::2] + self.channels = [c0, c1, c2, c3] return 1 """ obtain 16x16 patch centred at macbeth square centre for each channel """ - def get_patches(self,cen_coords,size=16): + def get_patches(self, cen_coords, size=16): """ obtain channel widths and heights """ - ch_w,ch_h = self.w,self.h + ch_w, ch_h = self.w, self.h cen_coords = list(np.array((cen_coords[0])).astype(np.int32)) self.cen_coords = cen_coords """ @@ -184,10 +184,10 @@ class Image: left to right. Some useful patch indices: white = 3 black = 23 - 'reds' = 9,10 - 'blues' = 2,5,8,20,22 - 'greens' = 6,12,17 - greyscale = 3,7,11,15,19,23 + 'reds' = 9, 10 + 'blues' = 2, 5, 8, 20, 22 + 'greens' = 6, 12, 17 + greyscale = 3, 7, 11, 15, 19, 23 """ all_patches = [] for ch in self.channels: @@ -199,7 +199,7 @@ class Image: Patch pixels are sorted by pixel brightness so spatial information is lost. ''' - patch = ch[cen[1]-7:cen[1]+9,cen[0]-7:cen[0]+9].flatten() + patch = ch[cen[1]-7:cen[1]+9, cen[0]-7:cen[0]+9].flatten() patch.sort() if patch[-5] == (2**self.sigbits-1)*2**(16-self.sigbits): self.saturated = True @@ -218,7 +218,7 @@ def brcm_load_image(Cam, im_str): """ create byte array """ - with open(im_str,'rb') as image: + with open(im_str, 'rb') as image: f = image.read() b = bytearray(f) """ @@ -249,7 +249,7 @@ def brcm_load_image(Cam, im_str): """ note index is divided by two to go from string to hex """ - indices = [m.start()//2 for m in re.finditer(match_str,b_str)] + indices = [m.start()//2 for m in re.finditer(match_str, b_str)] # print(indices) try: start = indices[0] + 3 @@ -325,10 +325,10 @@ def dng_load_image(Cam, im_str): raw_im = raw.imread(im_str) raw_data = raw_im.raw_image shift = 16 - Img.sigbits - c0 = np.left_shift(raw_data[0::2,0::2].astype(np.int64), shift) - c1 = np.left_shift(raw_data[0::2,1::2].astype(np.int64), shift) - c2 = np.left_shift(raw_data[1::2,0::2].astype(np.int64), shift) - c3 = np.left_shift(raw_data[1::2,1::2].astype(np.int64), shift) + c0 = np.left_shift(raw_data[0::2, 0::2].astype(np.int64), shift) + c1 = np.left_shift(raw_data[0::2, 1::2].astype(np.int64), shift) + c2 = np.left_shift(raw_data[1::2, 0::2].astype(np.int64), shift) + c3 = np.left_shift(raw_data[1::2, 1::2].astype(np.int64), shift) Img.channels = [c0, c1, c2, c3] except: @@ -347,7 +347,7 @@ check correct filetype mac boolean is true if image is expected to contain macbeth chart and false if not (alsc images don't have macbeth charts) ''' -def load_image(Cam,im_str,mac_config=None,show=False,mac=True,show_meta=False): +def load_image(Cam, im_str, mac_config=None, show=False, mac=True, show_meta=False): """ check image is correct filetype """ @@ -363,7 +363,7 @@ def load_image(Cam,im_str,mac_config=None,show=False,mac=True,show_meta=False): """ find macbeth centres, discarding images that are too dark or light """ - av_chan = (np.mean(np.array(Img.channels),axis=0)/(2**16)) + av_chan = (np.mean(np.array(Img.channels), axis=0)/(2**16)) av_val = np.mean(av_chan) # print(av_val) if av_val < Img.blacklevel_16/(2**16)+1/64: @@ -371,7 +371,7 @@ def load_image(Cam,im_str,mac_config=None,show=False,mac=True,show_meta=False): print('\nError: Image too dark!') Cam.log += '\nWARNING: Image too dark!' else: - macbeth = find_macbeth(Cam,av_chan,mac_config) + macbeth = find_macbeth(Cam, av_chan, mac_config) """ if no macbeth found return error @@ -405,8 +405,8 @@ def load_image(Cam,im_str,mac_config=None,show=False,mac=True,show_meta=False): """ if show and __name__ == '__main__': copy = sum(Img.channels)/2**18 - copy = np.reshape(copy,(Img.h//2,Img.w//2)).astype(np.float64) - copy,_ = reshape(copy,800) + copy = np.reshape(copy, (Img.h//2, Img.w//2)).astype(np.float64) + copy, _ = reshape(copy, 800) represent(copy) return Img |