mihirmithani
Add Kernel Convolution Visualizer - Phase 1 complete
80bcac8
Raw History Blame
2.17 kB
export type PaddingMode = 'zero' | 'reflect' | 'replicate' | 'wrap'
export type KernelCategory = 'blur' | 'sharpen' | 'edge' | 'emboss' | 'custom' | 'other'
export interface Kernel {
id: string
name: string
category: KernelCategory
matrix: number[][]
size: number
normalize: boolean
description: string
formula?: string
reference?: string
}
export interface ImageDataExtended {
data: Uint8ClampedArray
width: number
height: number
channels: number
}
export interface ConvolutionStep {
x: number
y: number
channel: number
inputPatch: number[][]
kernel: number[][]
multiplications: number[][]
sum: number
outputValue: number
normalizedValue: number
progress: number
}
export interface ConvolutionProgress {
currentStep: ConvolutionStep | null
progress: number
processedPixels: number
totalPixels: number
elapsedTime: number
estimatedTimeRemaining: number
}
export interface ConvolutionState {
status: 'idle' | 'running' | 'paused' | 'completed' | 'error'
currentStep: ConvolutionStep | null
progress: number
startTime: number
elapsedTime: number
processedPixels: number
totalPixels: number
outputImageData: ImageData | null
error: string | null
}
export interface AppSettings {
animationSpeed: number
showOverlay: {
kernelBoundary: boolean
pixelValues: boolean
multiplications: boolean
summation: boolean
}
padding: PaddingMode
zoomLevel: number
panOffset: { x: number; y: number }
comparisonMode: 'side-by-side' | 'split' | 'overlay'
stepMode: boolean
}
export interface ComparisonState {
mode: 'side-by-side' | 'split' | 'overlay'
splitPosition: number
synchronizedZoom: boolean
synchronizedPan: boolean
activeTab: string
}
export interface KernelComparisonResult {
kernelId: string
kernelName: string
imageData: ImageData
processingTime: number
timestamp: number
}
export interface ExportOptions {
format: 'png' | 'jpeg' | 'webp'
quality: number
includeOriginal: boolean
includeComparison: boolean
}
export interface AnimationExportOptions {
format: 'gif' | 'webm'
fps: number
duration: number
showOverlays: boolean
}