|
|
@ -0,0 +1,69 @@ |
|
|
|
import cv2 |
|
|
|
import math |
|
|
|
import numpy as np |
|
|
|
|
|
|
|
kBACKGROUND_NUM = 10 |
|
|
|
kSIZE = 128 |
|
|
|
kEXPONENTAL_VALUE = 0.7 |
|
|
|
|
|
|
|
gSENSOR_FOV = 60.0 / 180.0 * math.pi |
|
|
|
|
|
|
|
|
|
|
|
def exponential(img, value): |
|
|
|
tmp = cv2.pow(img.astype(np.double), value)*(255.0/(255.0**value)) |
|
|
|
return tmp.astype(np.uint8) |
|
|
|
|
|
|
|
|
|
|
|
def mergeFrames(imgs, SIZE, overlap): |
|
|
|
tmp = np.zeros((SIZE, SIZE*2-overlap), dtype=np.uint16) |
|
|
|
tmp[:, :SIZE] = imgs[0] |
|
|
|
tmp[:, -SIZE:] += imgs[1] |
|
|
|
tmp[:, (SIZE-overlap): SIZE] = tmp[:, (SIZE-overlap): SIZE]/2 |
|
|
|
|
|
|
|
tmp2 = np.zeros((SIZE, SIZE*2-overlap), dtype=np.uint16) |
|
|
|
tmp2[:, :SIZE] = imgs[2] |
|
|
|
tmp2[:, -SIZE:] += imgs[3] |
|
|
|
tmp2[:, (SIZE-overlap): SIZE] = tmp2[:, (SIZE-overlap): SIZE]/2 |
|
|
|
|
|
|
|
merge = np.zeros((SIZE*2-overlap, SIZE*2-overlap), dtype=np.uint16) |
|
|
|
merge[:SIZE, :] = tmp |
|
|
|
merge[-SIZE:, :] += tmp2 |
|
|
|
merge[(SIZE-overlap):SIZE, :] = merge[(SIZE-overlap):SIZE, :]/2 |
|
|
|
#merge = exponential(merge, kEXPONENTAL_VALUE) |
|
|
|
|
|
|
|
return merge.astype(np.uint8) |
|
|
|
|
|
|
|
|
|
|
|
class DataFuser(object): |
|
|
|
def __init__(self, sensor_dist): |
|
|
|
self.background_cnt = 0 |
|
|
|
self.background_frame = np.zeros((4, 64)) |
|
|
|
self.sensor_dist = sensor_dist |
|
|
|
|
|
|
|
def mergeFrame(self, frame, dist = None): |
|
|
|
if self.background_cnt < kBACKGROUND_NUM: |
|
|
|
self.background_frame += frame / kBACKGROUND_NUM |
|
|
|
self.background_cnt += 1 |
|
|
|
return False |
|
|
|
|
|
|
|
frame = exponential(cv2.subtract(exponential(frame, kEXPONENTAL_VALUE), |
|
|
|
exponential(self.background_frame, kEXPONENTAL_VALUE)), |
|
|
|
0.3) |
|
|
|
print (([max(x) for x in frame])) |
|
|
|
imgs = [np.reshape(img, (8, 8)) for img in frame] |
|
|
|
imgs = [cv2.resize(img.astype(np.uint8), (kSIZE, kSIZE), |
|
|
|
interpolation = cv2.INTER_LINEAR) for img in imgs] |
|
|
|
try: |
|
|
|
overlap = int(kSIZE - |
|
|
|
kSIZE * (self.sensor_dist / (2 * dist * math.tan(gSENSOR_FOV / 2)))) |
|
|
|
except: |
|
|
|
overlap = 0 |
|
|
|
if overlap < 0: |
|
|
|
overlap = 0 |
|
|
|
overlap = 0 |
|
|
|
|
|
|
|
return mergeFrames(imgs, kSIZE, overlap) |
|
|
|
|
|
|
|
if not dist: |
|
|
|
pass |
|
|
|
|