calcPhash method
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);
}