/** * Predictive Coding System * * Inspired by the brain's predictive processing theory: * - The brain constantly predicts incoming sensory data * - Only "prediction errors" (unexpected changes) are processed fully * - If prediction matches reality, minimal processing is needed * * For AR tracking: * - Predict next frame based on motion model * - Compare prediction to actual frame * - Skip or minimize processing if difference is below threshold * - In static scenes, ~90% of frames can be skipped */ export class PredictiveCoding { /** * @param {number} width - Image width * @param {number} height - Image height * @param {Object} config - Configuration */ constructor(width: number, height: number, config: Object); width: number; height: number; config: Object; frameHistory: any[]; stateHistory: any[]; motionModel: { vx: number; vy: number; vtheta: number; vscale: number; confidence: number; }; blockSize: number; blocksX: number; blocksY: number; blockMeans: Float32Array; prevBlockMeans: Float32Array; consecutiveSkips: number; maxConsecutiveSkips: number; /** * Predict whether current frame can be skipped * * @param {Uint8Array} inputData - Current frame grayscale data * @param {Object} trackingState - Current tracking state * @returns {Object} Prediction result */ predict(inputData: Uint8Array, trackingState: Object): Object; /** * Compute change level between current and previous frame * Uses block-based comparison for efficiency * * @param {Uint8Array} inputData - Current frame * @returns {number} Change level (0-1) */ getChangeLevel(inputData: Uint8Array): number; /** * Compute mean intensity for each block * @private */ private _computeBlockMeans; /** * Predict next tracking state based on motion model * @private */ private _predictState; /** * Store frame for future prediction * * @param {Uint8Array} inputData - Frame data * @param {Object} trackingState - Tracking state */ storeFrame(inputData: Uint8Array, trackingState: Object): void; /** * Update motion model from state history * @private */ private _updateMotionModel; /** * Check if we're in a static scene (good candidate for aggressive skipping) * @returns {boolean} True if scene appears static */ isStaticScene(): boolean; /** * Reset prediction state */ reset(): void; /** * Update configuration */ configure(config: any): void; }