1
load(libdir + "util.js");
3
var SobelX = [[-1.0, 0.0, 1.0],
6
var SobelY = [[ 1.0, 2.0, 1.0],
10
function stripedImage(w, h) {
11
var resultArray = new Array(w * h);
12
for (var y = 0; y < h; y++) {
13
for (var x = 0; x < w; x++) {
14
resultArray[y*w + x] = (Math.abs(x%100-y%100) < 10) ? 32 : 0;
20
function edgesSequentially(data, width, height) {
21
var data1 = new Array(width * height);
22
for (var y = 0; y < height; y++) {
23
for (var x = 0; x < width; x++) {
24
var total = compute(x, y);
25
data1[y*width + x] = total | 0;
30
function compute(x, y) {
34
var offYMin = (y == 0 ? 0 : -1);
35
var offYMax = (y == height - 1 ? 0 : 1);
36
var offXMin = (x == 0 ? 0 : -1);
37
var offXMax = (x == width - 1 ? 0 : 1);
39
for (var offY = offYMin; offY <= offYMax; offY++) {
40
for (var offX = offXMin; offX <= offXMax; offX++) {
41
var e = data[(y + offY) * width + x + offX];
42
totalX += e * SobelX[offY + 1][offX + 1];
43
totalY += e * SobelY[offY + 1][offX + 1];
47
return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
51
function edgesParallel(data) {
52
var pa = new ParallelArray([Height, Width], function (y, x) {
56
var offYMin = (y == 0 ? 0 : -1);
57
var offYMax = (y == Height - 1 ? 0 : 1);
58
var offXMin = (x == 0 ? 0 : -1);
59
var offXMax = (x == Width - 1 ? 0 : 1);
61
for (var offY = offYMin; offY <= offYMax; offY++) {
62
for (var offX = offXMin; offX <= offXMax; offX++) {
63
var e = data.get(y + offY, x + offX);
64
totalX += e * SobelX[offY + 1][offX + 1];
65
totalY += e * SobelY[offY + 1][offX + 1];
69
return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
76
var ArrInput = stripedImage(Width, Height);
77
var ParArrInput2D = new ParallelArray([Height, Width],
78
function (y, x) ArrInput[y*Width + x]);
80
benchmark("EDGES", 2, DEFAULT_MEASURE * 20,
81
function() edgesSequentially(ArrInput, Width, Height),
82
function() edgesParallel(ParArrInput2D));