-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathlabel-counts
More file actions
executable file
·52 lines (44 loc) · 1.46 KB
/
label-counts
File metadata and controls
executable file
·52 lines (44 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env node
var fs = require('fs')
var path = require('path')
var PNG = require('pngjs').PNG
var readSample = require('./lib/read-sample')
var through = require('through2')
var createClassLookup = require('./lib/lookup-class')
var argv = require('minimist')(process.argv.slice(2))
var classes = JSON.parse(fs.readFileSync(argv._[0]))
var getClass = createClassLookup(classes)
var labels = argv._[1]
readSample(argv)
.pipe(through.obj(write))
.pipe(process.stdout)
var first = true
function write (tile, _, next) {
var file = path.join(labels, tile.join('-') + '.png')
if (!fs.existsSync(file)) {
console.error('Missing file: ' + file)
return next()
}
var stream = this
fs.createReadStream(file).pipe(new PNG()
.on('parsed', function () {
var currentImageFrequencies = classes.map((x) => 0).concat([0])
for (var y = 0; y < this.height; y++) {
for (var x = 0; x < this.width; x++) {
var r = (this.width * y + x) << 2
var g = r + 1
var b = r + 2
var index = getClass(this.data[r], this.data[g], this.data[b])
currentImageFrequencies[index] += 1
}
}
if (first) {
first = false
var classNames = classes.map((c) => c.name).concat(['Background'])
stream.push(['#source', 'z', 'x', 'y'].concat(classNames).join(' ') + '\n')
}
stream.push([tile.source].concat(tile, currentImageFrequencies).join(' ') + '\n')
next()
})
)
}