163 |
|
{ |
164 |
|
float *earr = calloc(hp->ns*hp->ns, sizeof(float)); |
165 |
|
float *ep; |
166 |
+ |
AMBSAMP *ap; |
167 |
|
double b, d2; |
168 |
|
int i, j; |
169 |
|
|
170 |
|
if (earr == NULL) /* out of memory? */ |
171 |
|
return(NULL); |
172 |
|
/* compute squared neighbor diffs */ |
173 |
< |
for (ep = earr, i = 0; i < hp->ns; i++) |
174 |
< |
for (j = 0; j < hp->ns; j++, ep++) { |
175 |
< |
b = bright(ambsamp(hp,i,j).v); |
173 |
> |
for (ap = hp->sa, ep = earr, i = 0; i < hp->ns; i++) |
174 |
> |
for (j = 0; j < hp->ns; j++, ap++, ep++) { |
175 |
> |
b = bright(ap[0].v); |
176 |
|
if (i) { /* from above */ |
177 |
< |
d2 = b - bright(ambsamp(hp,i-1,j).v); |
177 |
> |
d2 = b - bright(ap[-hp->ns].v); |
178 |
|
d2 *= d2; |
179 |
|
ep[0] += d2; |
180 |
|
ep[-hp->ns] += d2; |
181 |
|
} |
182 |
|
if (j) { /* from behind */ |
183 |
< |
d2 = b - bright(ambsamp(hp,i,j-1).v); |
183 |
> |
d2 = b - bright(ap[-1].v); |
184 |
|
d2 *= d2; |
185 |
|
ep[0] += d2; |
186 |
|
ep[-1] += d2; |