calcPhash method

String calcPhash(
  1. List pixelList
)

Helper function which computes a binary hash of a List of Pixel

Implementation

String calcPhash(List pixelList) {
  var bitString = '';
  var matrix = List<dynamic>.filled(32, 0);
  var row = List<dynamic>.filled(32, 0);
  var rows = List<dynamic>.filled(32, 0);
  var col = List<dynamic>.filled(32, 0);

  var data = unit8ListToMatrix(pixelList); //returns a matrix used for DCT

  for (var y = 0; y < _size; y++) {
    for (var x = 0; x < _size; x++) {
      var color = data[x][y];

      row[x] = getLuminanceRgb(color._red, color._green, color._blue);
    }

    rows[y] = calculateDCT(row);
  }
  for (var x = 0; x < _size; x++) {
    for (var y = 0; y < _size; y++) {
      col[y] = rows[y][x];
    }

    matrix[x] = calculateDCT(col);
  }

  // Extract the top 8x8 pixels.
  var pixels = [];

  for (var y = 0; y < 8; y++) {
    for (var x = 0; x < 8; x++) {
      pixels.add(matrix[y][x]);
    }
  }

  // Calculate hash.
  var bits = [];
  var compare = average(pixels);

  for (var pixel in pixels) {
    bits.add(pixel > compare ? 1 : 0);
  }

  bits.forEach((element) {
    bitString += (1 * element).toString();
  });

  return BigInt.parse(bitString, radix: 2).toRadixString(16);
}