def computeAveragePhases(camsys, fileName, window=4, cx=0, cy=0):
    """ Computes the average phases for a given file. Uses simple average for getting phase value """
    r = Voxel.FrameStreamReader(fileName, camsys)
    if not cx:
        bool3, cx = r.getStreamParamf("cx")
        if not bool3:
            cx = 0
    if not cy:
        bool4, cy = r.getStreamParamf("cy")
        if not bool4:
            cy = 0

    cx = int(cx)
    cy = int(cy)

    phases, amplitudes, frames, rows, cols = extractPhasesandAmplitudes(
        fileName, camsys)
    if cx == 0:
        cx = rows / 2
    if cy == 0:
        cy = cols / 2
    centerShape = [
        cx - window / 2, cx + window / 2, cy - window / 2, cy + window / 2
    ]
    averagePhases = np.zeros([window, window], dtype='float')
    for val in np.arange(frames):
        phaseWindow = phases[val][centerShape[0]:centerShape[1],
                                  centerShape[2]:centerShape[3]]
        averagePhases += phaseWindow
    averagePhases = averagePhases / frames
    averagePhases = np.mean(averagePhases)

    return averagePhases, rows, cols
Пример #2
0
 def read(vxlFile, cameraInfo):
     reader = Voxel.FrameStreamReader(vxlFile, cameraInfo.system)
     if not reader.isStreamGood():
         raise ValueError("Stream is not good: " + vxlFile)
     frames = list()
     for i in range(reader.size()):
         if not reader.readNext():
             raise ValueError("Failed to read frame number " + str(i))
         rawProcessedFrame = Voxel.ToF1608Frame.typeCast(
             reader.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_PROCESSED])
         depthFrame = Voxel.DepthFrame.typeCast(
             reader.frames[Voxel.DepthCamera.FRAME_DEPTH_FRAME])
         attributes = {
             "ambient":
             np.array(rawProcessedFrame._ambient,
                      copy=True).reshape(cameraInfo.resolution),
             "amplitude":
             np.array(rawProcessedFrame._amplitude,
                      copy=True).reshape(cameraInfo.resolution),
             "phase":
             np.array(rawProcessedFrame._phase,
                      copy=True).reshape(cameraInfo.resolution),
             "depth":
             np.array(depthFrame.depth,
                      copy=True).reshape(cameraInfo.resolution)
         }
         frames.append(VxlFrame(attributes))
     reader.close()
     return VxlVideo(frames)
Пример #3
0
def vxltoPng(filename):
    """Converts VXL file to a PNG using amplitude data. Uses open cv libraries"""
    camsys = Voxel.CameraSystem()
    r = Voxel.FrameStreamReader(filename, camsys)
    bool1, cols = r.getStreamParamu("frameWidth")
    bool2, rows = r.getStreamParamu("frameHeight")
    if not bool1 or not bool2:
        print("Cannot read the stream")
    if not r.isStreamGood():
        print("Stream is not good: " + filename)
    numFrames = r.size()
    meanAmplitudes = np.zeros((rows, cols), dtype='float')
    for i in (range(numFrames)):
        if not r.readNext():
            print("Failed to read frame %d" % i)
            break
        tofFrame = Voxel.ToF1608Frame.typeCast(
            r.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_PROCESSED])
        meanAmplitudes += np.array(tofFrame._amplitude, copy=True).reshape(
            (rows, cols))
    r.close()
    meanAmplitudes = meanAmplitudes / np.max(meanAmplitudes) * 255

    outFileName = os.path.splitext(filename)[0] + '.png'
    cv2.imwrite(outFileName, meanAmplitudes.astype(np.uint8))
    def __init__(self, filename, cameraSystem):
        super(FileStreamSource, self).__init__(os.path.basename(filename))
        self.filename = filename
        self.runThread = None
        self.running = False
        self.cameraSystem = cameraSystem

        self.frameStream = Voxel.FrameStreamReader(str(filename), cameraSystem)
        self.frameStreamHandler = self.frameStream
Пример #5
0
def computeAveragePhases(camsys, filename, window=0):
    """Returns the average phases for all pixels for a given file"""
    r = Voxel.FrameStreamReader(filename, camsys)
    bool1, cols = r.getStreamParamu("frameWidth")
    bool2, rows = r.getStreamParamu("frameHeight")
    _, cx = r.getStreamParamf('cx')
    _, cy = r.getStreamParamf('cy')
    _, fx = r.getStreamParamf('fx')
    _, fy = r.getStreamParamf('fy')
    _, k1 = r.getStreamParamf('k1')
    _, k2 = r.getStreamParamf('k2')
    _, k3 = r.getStreamParamf('k3')
    _, p1 = r.getStreamParamf('p1')
    _, p2 = r.getStreamParamf('p2')
    cx = int(cx)
    cy = int(cy)
    if cx == 0:
        cx = rows / 2
    if cy == 0:
        cy = cols / 2
    if window:
        centerShape = [
            cx - window / 2, cx + window / 2, cy - window / 2, cy + window / 2
        ]
    else:
        centerShape = [0, rows, 0, cols]
    if not r.isStreamGood() or not bool1 or not bool2:
        print("Stream is not good: " + filename)
    numFrames = r.size()
    if window:
        averagePhase = np.zeros((window, window), dtype='complex')
    else:
        averagePhase = np.zeros((rows, cols), dtype='complex')

    for i in np.arange(numFrames):
        if not r.readNext():
            print("Failed to read frame %d" % i)
            break
        tofFrame = Voxel.ToF1608Frame.typeCast(
            r.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_PROCESSED])
        phase = np.array(tofFrame._phase, copy=True).reshape((rows, cols))\
        [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]*2*np.pi/4096
        amplitude = np.array(tofFrame._amplitude, copy = True).reshape((rows,cols))\
        [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]
        averagePhase += amplitude * (np.cos(phase) + 1j * np.sin(phase))
    averagePhase /= numFrames
    if window:
        averagePhase = np.sum(averagePhase) / (window * window)
        if averagePhase < 0:
            averagePhase += 4096
    averagePhase = np.angle(averagePhase) * 4096 / (2 * np.pi)

    r.close()
    dist = np.array([k1, k2, k3, p1, p2])
    mtx = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]])
    return averagePhase, rows, cols, mtx, dist
Пример #6
0
def computeAveragePhases(camsys, filename, cx=0, cy=0, window=4):
    """ Computes the average phases for a given file. Uses the complex average for getting phase value """
    r = Voxel.FrameStreamReader(filename, camsys)
    bool1, cols = r.getStreamParamu("frameWidth")
    bool2, rows = r.getStreamParamu("frameHeight")
    if not cx:
        bool3, cx = r.getStreamParamf("cx")
        if not bool3:
            cx = 0
    if not cy:
        bool4, cy = r.getStreamParamf("cy")
        if not bool4:
            cy = 0

    cx = int(cx)
    cy = int(cy)
    if cx == 0:
        cx = rows / 2
    if cy == 0:
        cy = cols / 2
    if window:
        centerShape = [
            cx - window / 2, cx + window / 2, cy - window / 2, cy + window / 2
        ]
    else:
        centerShape = [0, rows, 0, cols]
    if not r.isStreamGood() or not bool1 or not bool2:
        print("Stream is not good: " + filename)
    numFrames = r.size()
    if window:
        averagePhase = np.zeros((window, window), dtype='complex')
    else:
        averagePhase = np.zeros((rows, cols), dtype='complex')

    for i in np.arange(numFrames):
        if not r.readNext():
            print("Failed to read frame %d" % i)
            break
        tofFrame = Voxel.ToF1608Frame.typeCast(
            r.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_PROCESSED])
        phase = np.array(tofFrame._phase, copy=True).reshape((rows, cols))\
        [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]*2*np.pi/4096
        amplitude = np.array(tofFrame._amplitude, copy = True).reshape((rows,cols))\
        [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]
        averagePhase += amplitude * (np.cos(phase) + 1j * np.sin(phase))
    averagePhase /= numFrames
    if window:
        averagePhase = np.sum(averagePhase) / (window * window)
    averagePhase = np.angle(averagePhase) * 4096 / (2 * np.pi)

    r.close()
    return averagePhase, rows, cols
def extractRawdataFromVXL(filename, camsys):
    """Takes raw data from vxl file"""
    r = Voxel.FrameStreamReader(filename, camsys)
    if not r.isStreamGood():
        print("Stream is not good: " + filename)
    bool1, cols = r.getStreamParamu("frameWidth")
    bool2, rows = r.getStreamParamu("frameHeight")
    numFrames = r.size()
    rawFrames = np.zeros((numFrames, rows * cols * 4), dtype='uint8')
    for i in (range(numFrames)):
        if not r.readNext():
            print("Failed to read frame %d" % i)
            break
        rawFrame = Voxel.RawDataFrame.typeCast(
            r.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_UNPROCESSED])
        rawFrames[i] = np.array(rawFrame.data, copy=True)[:-255]
    return rawFrames, rows, cols
Пример #8
0
import numpy as np

parser = argparse.ArgumentParser(
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-f",
                    "--file",
                    type=str,
                    help="Voxel file (.vxl)",
                    required=True)

args = parser.parse_args()

camsys = Voxel.CameraSystem()

r = Voxel.FrameStreamReader(args.file, camsys)

iAverage = None
qAverage = None
frameCount = 0

if not r.isStreamGood():
    print 'Could not open stream'
    sys.exit(1)

print 'Stream contains ', r.size(), ' frames'

count = r.size()

for i in range(0, count):
    if not r.readNext():
Пример #9
0
def computeHDRAveragePhases(camsys,
                            filename,
                            cx=0,
                            cy=0,
                            window=4,
                            chipset='TintinCDKCamera'):
    """ Computes average phases for the HDR frame"""
    r = Voxel.FrameStreamReader(filename, camsys)
    _, cols = r.getStreamParamu("frameWidth")
    _, rows = r.getStreamParamu("frameHeight")
    if not cx:
        _, cx = r.getStreamParamf('cx')
    if not cy:
        _, cy = r.getStreamParamf('cy')
    cx = int(cx)
    cy = int(cy)
    if cx == 0:
        cx = rows / 2
    if cy == 0:
        cy = cols / 2
    if window:
        centerShape = [
            cx - window / 2, cx + window / 2, cy - window / 2, cy + window / 2
        ]
        averagePhase = np.zeros((window, window), dtype='complex')
    else:
        centerShape = [0, rows, 0, cols]
        averagePhase = np.zeros((rows, cols), dtype='complex')
    if not r.isStreamGood():
        print("Stream is not good: " + filename)

    numFrames = r.size()
    if chipset == 'TintinCDKCamera':
        for i in np.arange(numFrames):
            if not r.readNext():
                print("Failed to read frame %d" % i)
                break
            tofFrame = Voxel.ToF1608Frame.typeCast(
                r.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_PROCESSED])
            flag = np.array(tofFrame._flags, copy=True)[0]
            if flag & 0x04 == 0x04:
                phase = np.array(tofFrame._phase, copy=True).reshape((rows, cols))\
                [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]*2*np.pi/4096
                averagePhase += np.array(tofFrame._amplitude, copy = True).reshape((rows,cols))\
                [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]*(np.cos(phase)+ 1j*np.sin(phase))
        if np.sum(np.absolute(averagePhase)) == 0:
            print("no HDR frames received")
            return False, 0, 0, 0
        averagePhase /= numFrames
        if window:
            averagePhase = np.sum(averagePhase) / (window * window)
        averagePhase = np.angle(averagePhase) * 4096 / (2 * np.pi)
        r.close()
    if chipset == 'CalculusCDKCamera':
        tofFrame = Voxel.ToF1608Frame.typeCast(
            r.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_PROCESSED])
        flagFirst = np.array(tofFrame._flags, copy=True)[0]
        amplitudeFirst = np.array(tofFrame._amplitude, copy=True)
        if not r.readNext():
            print("Failed to read frame 2")
        flagSecond = np.array(tofFrame._flags, copy=True)[0]
        amplitudeSecond = np.array(tofFrame._amplitude, copy=True)
        if np.mean(amplitudeFirst) > np.mean(amplitudeSecond):
            flagVal = flagSecond
        else:
            flagVal = flagFirst
        if flagVal == 0x02 or flagVal == 0x03:
            flagVal = flagVal - 2
        for i in np.arange(numFrames):
            if not r.readNext():
                print("Failed to read frame %d" % i)
                break
            tofFrame = Voxel.ToF1608Frame.typeCast(
                r.frames[Voxel.DepthCamera.FRAME_RAW_FRAME_PROCESSED])
            flag = np.array(tofFrame._flags, copy=True)[0]
            if flag == flagVal or flag == flagVal + 2:
                phase = np.array(tofFrame._phase, copy=True).reshape((rows, cols))\
                [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]*2*np.pi/4096
                averagePhase += np.array(tofFrame._amplitude, copy = True).reshape((rows,cols))\
                [centerShape[0]:centerShape[1], centerShape[2]:centerShape[3]]*(np.cos(phase)+ 1j*np.sin(phase))
        if np.sum(np.absolute(averagePhase)) == 0:
            print("no HDR frames received")
            return False, 0, 0, 0
        averagePhase /= numFrames
        if window:
            averagePhase = np.sum(averagePhase) / (window * window)
        averagePhase = np.angle(averagePhase) * 4096 / (2 * np.pi)
        r.close()
    return True, averagePhase, rows, cols