nfv
Version:
[Updated to use ndv package instead dv] FormVision is a node.js library for extracting data from scanned forms
41 lines (38 loc) • 1.28 kB
JavaScript
// Generated by CoffeeScript 1.12.7
var dv;
dv = require('ndv');
module.exports = function(image) {
var curve, darkValueMask, deltaV, desaturatedMask, h, hsv, i, j, k, l, len, protectionMask, rect, ref, results, s, v, vOrig, x;
hsv = image.toColor().toHSV();
desaturatedMask = hsv.inRange(0, 0, 0, 239, 0.1 * 255, 255);
darkValueMask = hsv.inRange(0, 0, 0, 239, 255, 0.5 * 255).invert();
h = hsv.toGray(1, 0, 0);
s = hsv.toGray(0, 1, 0);
v = hsv.toGray(0, 0, 1);
vOrig = new dv.Image(v);
curve = (function() {
results = [];
for (i = 0; i <= 255; i++){ results.push(i); }
return results;
}).apply(this);
for (x = j = 0; j <= 199; x = ++j) {
curve[x] = 0;
}
for (x = k = 0; k <= 54; x = ++k) {
curve[x + 200] = x / 54 * 220;
}
protectionMask = desaturatedMask.and(darkValueMask.erode(5, 5));
v.applyCurve(curve, protectionMask);
deltaV = vOrig.subtract(v);
deltaV = deltaV.invert();
ref = deltaV.threshold(254).dilate(5, 5).connectedComponents(8);
for (l = 0, len = ref.length; l < len; l++) {
rect = ref[l];
if (rect.height > 100 || rect.width < 5 || rect.height < 5) {
deltaV.clearBox(rect);
}
}
deltaV = deltaV.invert();
v = vOrig.subtract(deltaV);
return new dv.Image(h, s, v).toRGB();
};