Beispiel #1
0
        void ThermalThreadProc()
        {
            while (!stopThread && thermal != null)
            {
                bool progress = false;
                lastFrame = thermal.GetFrameBlocking();

                if (lastFrame.IsCalibrationFrame)
                {
                    lastCalibrationFrame = lastFrame;
                }
                else
                {
                    if (lastCalibrationFrame != null && lastFrame.IsUsableFrame)
                    {
                        lastUsableFrame = lastFrame.ProcessFrame(lastCalibrationFrame);
                        progress        = true;
                    }
                }


                //System.Diagnostics.Debug.Print("Start of data: " + string.Join(" ", lastFrame.RawData.Take(64).Select(b => b.ToString("x2")).ToArray()));
                //System.Diagnostics.Debug.Print("End of data: " + string.Join(" ", lastFrame.RawData.Reverse().Take(32).Reverse().Select(b => b.ToString("x2")).ToArray()));

                // Do stuff
                frameCount++;
                if (progress)
                {
                    Invalidate();
                }
            }
        }
    public ThermalRenderingData <C> GetThermalData <T, C>(uint level, int time)
        where T : ThermalDataT <C>, new()
        where C : struct
    {
        ThermalDataBase levelData = thermalData[level];

        if (levelData == null || !(levelData is T) ||
            time < levelData.startTime ||
            time >= levelData.endTime)
        {
            LoadThermalData <T, C>(level, time);
            levelData = (ThermalDataT <C>)thermalData[level];

            if (levelData == null || levelData.Cells <C>() == null)
            {
                Debug.LogWarning("No thermal data found for level " + level);
                return(null);
            }
        }

        int          sampleIndex = (time % fileTimeInterval) / sampleInterval;
        ThermalFrame frame       = levelData.frames[sampleIndex + 1];

        ThermalRenderingData <C> renderData = new ThermalRenderingData <C>();

        renderData.cells          = levelData.Cells <C>();
        renderData.cellType       = level < maxLevel ? CellType.GroundQuad : CellType.Billboard;
        renderData.startIndex     = levelData.frames[sampleIndex].offset;
        renderData.endIndex       = frame.offset;
        renderData.minTemperature = frame.minTemperature;
        renderData.maxTemperature = frame.minTemperature + frame.temperatureRange;
        renderData.resolution     = (uint)Math.Pow(2, level);

        return(renderData);
    }
Beispiel #3
0
    public override ThermalRenderingData <C> GetThermalData <T, C>()
    {
        if (thermalData == null || !(thermalData is T))
        {
            LoadThermalData <T, C>();

            if (thermalData == null || thermalData.Cells <C>() == null)
            {
                Debug.LogWarning("No vision data was loaded");
                return(null);
            }
        }

        ThermalFrame frame = thermalData.frames[1];

        ThermalRenderingData <C> data = new ThermalRenderingData <C>();

        data.cells          = thermalData.Cells <C>();
        data.cellType       = CellType.Billboard;
        data.startIndex     = thermalData.frames[0].offset;
        data.endIndex       = frame.offset;
        data.minTemperature = frame.minTemperature;
        data.maxTemperature = frame.minTemperature + frame.temperatureRange;
        data.resolution     = dataHeader.resolution;

        return(data);
    }
Beispiel #4
0
        void ThermalThreadProc()
        {
            while (!stopThread && thermal != null)
            {
                bool progress = false;

                currentFrame = thermal.GetFrameBlocking();

                switch (currentFrame.StatusByte)
                {
                case 4:    //gain calibration
                    frame4stuff();
                    break;

                case 1:    //shutter calibration
                    markBadPixels();
                    if (!usignExternalCal)
                    {
                        frame1stuff();
                    }
                    firstAfterCal = true;
                    break;

                case 3:                        //image frame
                    markBadPixels();
                    if (grabExternalReference) //use this image as reference
                    {
                        grabExternalReference = false;
                        usignExternalCal      = true;
                        frame1stuff();
                    }
                    else
                    {
                        frame3stuff();
                        lastUsableFrame = currentFrame;
                        progress        = true;
                    }
                    break;

                default:
                    break;
                }

                if (progress)
                {
                    Invalidate();//redraw form
                }
            }
        }
Beispiel #5
0
        void ThermalThreadProc()
        {
            BinaryWriter tw;
            DateTime     currentFrameTime  = DateTime.Now;
            DateTime     previousFrameTime = currentFrameTime;
            DateTime     currentTime       = DateTime.Now;
            DateTime     previousTime      = currentTime;
            int          framesToCapture   = 100;

            // Initialize frame (1 based)
            frameCount = 1;

            // Create the output files to save first 20 frames and associated metadata.
            //bw = new BinaryWriter(new FileStream("data.dat", FileMode.Create));
            tw = new BinaryWriter(new FileStream("data.txt", FileMode.Create));

            while (!stopThread && thermal != null)
            {
                bool progress = false;

                // Get frame
                lastFrame = thermal.GetFrameBlocking();

                // Keep the ID4 and ID1 frame
                switch (lastFrame.StatusByte)
                {
                case 1:    //shutter cal
                    frameID1      = lastFrame;
                    firstAfterCal = true;
                    break;

                case 4:    //first frame gain cal
                    frameID4 = lastFrame;
                    break;

                default:
                    break;
                }

                // Time after frame capture
                previousTime = currentTime;
                currentTime  = DateTime.Now;

                // Save data and metadata for the first framesToCapture frames
                if (frameCount <= framesToCapture)
                {
                    tw.Write(Encoding.ASCII.GetBytes(String.Format("Frame {0} ID {1}\n", frameCount, lastFrame.RawDataU16[10])));
                    tw.Write(Encoding.ASCII.GetBytes(String.Format(lastFrame.AvgValue.ToString())));
                    tw.Write(Encoding.ASCII.GetBytes(String.Format("\n")));

                    if (frameCount == framesToCapture)
                    {
                        tw.Close();
                    }
                }

                switch (lastFrame.StatusByte)
                {
                case 4:    //prvi frame za izračuna gaina
                    markBadPixels();
                    getGainCalibration();
                    //konec: prvi frame za izračuna gaina
                    break;

                case 1:    //shutter frame za izračun offseta
                    markBadPixels();
                    applyGainCalibration();
                    if (!usignExternalCal)
                    {
                        getOffsetCalibration();
                    }
                    lastCalibrationFrame = frameID1;
                    saveExternalFrames   = false;
                    //konec: shutter frame
                    break;

                case 3:    //pravi slikovni frame
                    markZeroPixels();
                    applyGainCalibration();

                    if (m_get_extra_cal)    //if this pixel should be used as reference
                    {
                        m_get_extra_cal  = false;
                        usignExternalCal = true;
                        getOffsetCalibration();
                        saveExternalFrames = true;
                    }

                    applyOffsetCalibration();
                    fixBadPixels();
                    lastUsableFrame = lastFrame.ProcessFrameU16(lastReferenceFrame, frameID4);
                    progress        = true;
                    //konec: pravi slikovni frame
                    break;

                default:
                    break;
                }

                // Increase frame count.
                frameCount++;

                if (progress)
                {
                    Invalidate();//ponovno izriši formo...
                }
            }
        }