555
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.9 KiB

  1. import cv2
  2. import math
  3. import numpy as np
  4. kBACKGROUND_NUM = 10
  5. kSIZE = 128
  6. kEXPONENTAL_VALUE = 0.7
  7. gSENSOR_FOV = 60.0 / 180.0 * math.pi
  8. def exponential(img, value):
  9. tmp = cv2.pow(img.astype(np.double), value)*(255.0/(255.0**value))
  10. return tmp.astype(np.uint8)
  11. def mergeFrames(imgs, SIZE, overlap):
  12. tmp = np.zeros((SIZE, SIZE*2-overlap), dtype=np.uint16)
  13. tmp[:, :SIZE] = imgs[0]
  14. tmp[:, -SIZE:] += imgs[1]
  15. tmp[:, (SIZE-overlap): SIZE] = tmp[:, (SIZE-overlap): SIZE]/2
  16. tmp2 = np.zeros((SIZE, SIZE*2-overlap), dtype=np.uint16)
  17. tmp2[:, :SIZE] = imgs[2]
  18. tmp2[:, -SIZE:] += imgs[3]
  19. tmp2[:, (SIZE-overlap): SIZE] = tmp2[:, (SIZE-overlap): SIZE]/2
  20. merge = np.zeros((SIZE*2-overlap, SIZE*2-overlap), dtype=np.uint16)
  21. merge[:SIZE, :] = tmp
  22. merge[-SIZE:, :] += tmp2
  23. merge[(SIZE-overlap):SIZE, :] = merge[(SIZE-overlap):SIZE, :]/2
  24. #merge = exponential(merge, kEXPONENTAL_VALUE)
  25. return merge.astype(np.uint8)
  26. class DataFuser(object):
  27. def __init__(self, sensor_dist):
  28. self.background_cnt = 0
  29. self.background_frame = np.zeros((4, 64))
  30. self.sensor_dist = sensor_dist
  31. def mergeFrame(self, frame, dist = None):
  32. if self.background_cnt < kBACKGROUND_NUM:
  33. self.background_frame += frame / kBACKGROUND_NUM
  34. self.background_cnt += 1
  35. return False
  36. frame = exponential(cv2.subtract(exponential(frame, kEXPONENTAL_VALUE),
  37. exponential(self.background_frame, kEXPONENTAL_VALUE)),
  38. 0.3)
  39. print (([max(x) for x in frame]))
  40. imgs = [np.reshape(img, (8, 8)) for img in frame]
  41. imgs = [cv2.resize(img.astype(np.uint8), (kSIZE, kSIZE),
  42. interpolation = cv2.INTER_LINEAR) for img in imgs]
  43. try:
  44. overlap = int(kSIZE -
  45. kSIZE * (self.sensor_dist / (2 * dist * math.tan(gSENSOR_FOV / 2))))
  46. except:
  47. overlap = 0
  48. if overlap < 0:
  49. overlap = 0
  50. overlap = 0
  51. return mergeFrames(imgs, kSIZE, overlap)
  52. if not dist:
  53. pass