The combination of contrast and binary does not really handle low-light images.
function contrastBinary(data) {
var min = 127 * 3;
var max = 128 * 3;
for (var i = 0, len = Image.width * Image.height * 4; i < len; i += 4) {
var val = data[i] + data[i + 1] + data[i + 2];
if (val < min) {
min = val;
} else if (val > max) {
max = val;
}
}
var threshold = (max + min) / 2;
for (var i = 0, len = Image.width * Image.height * 4; i < len; i += 4) {
ave = (data[i] + data[i + 1] + data[i + 2]);
if (ave < threshold) {
data[i] = data[i + 1] = data[i + 2] = 0;
} else {
data[i] = data[i + 1] = data[i + 2] = 255;
}
data[i + 3] = 255;
}
}