computeLuminosityAndContrast static method

Map<String, double> computeLuminosityAndContrast(
  1. Uint8List gray,
  2. int width,
  3. int height
)

Computes average normalized luminosity and RMS contrast score.

Implementation

static Map<String, double> computeLuminosityAndContrast(
  Uint8List gray,
  int width,
  int height,
) {
  if (gray.isEmpty) {
    return {'luminosity': 0.5, 'contrast': 0.0};
  }

  int sum = 0;
  int step = (gray.length ~/ 1000).clamp(1, 100);
  int count = 0;
  for (int i = 0; i < gray.length; i += step) {
    sum += gray[i];
    count++;
  }

  final avgLuma = count > 0 ? (sum / count) / 255.0 : 0.5;

  // Calculate RMS contrast (standard deviation)
  double varSum = 0.0;
  final meanVal = avgLuma * 255.0;
  for (int i = 0; i < gray.length; i += step) {
    final diff = gray[i] - meanVal;
    varSum += diff * diff;
  }
  final contrast = count > 0 ? math.sqrt(varSum / count) / 128.0 : 0.0;

  return {'luminosity': avgLuma, 'contrast': contrast};
}