HELP SQUARED_GRADIENTS David Young February 1995 LIB * squared_gradients provides a procedure to calculate the squared total gradient at each point in an image. For straightforward use, the procedure can be called thus: squared_gradients(arrin, sigma, false, false) -> arrout arrin is a 2-D array containing numbers. The procedure is fastest if arrin is created using *newsfloatarray. sigma is a positive number giving the standard deviation of the Gaussian mask used for smoothing. arrout is an arrout containing estimates of total squared gradient. That is, arrout(x, y) is an estimate of 2 2 (d/dx arrin(x,y)) + (d/dy arrin(x, y)) The estimates are formed by convolving arrin with the first derivatives of Gaussian functions, using *convolve_gauss_2d. arrout will be smaller than arrin by a few pixels on each side; the size of the margin omitted depends on sigma, and is chosen such that arrout only contains data where a proper estimate can be made. The size of the margin may be obtained using diffgaussmask_limit(sigma) (see *gaussmask). It is possible to control the region of the array for which the calculation is performed, and to supply an output array to reduce garbage creation, as follows: squared_gradients(arrin, sigma, arrout, region) -> arrout arrin and sigma are as above. If not , arrout may be an array, preferably created using *newsfloatarray, which will receive the results and which will be returned. Alternatively, arrout may be a 4-element list, in which case a new array with this boundslist is created and returned. Finally, arrout may be a 5-element list, in which case its head is used to initialise the new array and its tail becomes the boundslist. If not , region must be a boundslist-type specification of the region of arrout in which results are to be stored. If arrout is non-false and region is , then region is set to the boundslist of arrout. If arrout is and region is non-false, then a new array whose boundslist is region is created and returned. If both region and arrout are , then region is set to the largest region that will receive valid data given arrin and sigma, as above. If arrout and region are both non-false, then region must lie within the bounds of arrout. Any part of arrout that is outside region is left unchanged (or if arrout was specified as a list, will have the initialisation value). In all cases, if part of region is outside the region which can receive valid data given arrin and sigma, that part is set to zero. For example, to make a new output array which is the same size as the input array, but which will have zeros in the margin where there are no valid results, do squared_gradients(arrin, sigma, boundslist(arrin), false) -> arrout To fill as much as possible of an existing array array2 with results, without affecting any of its elements for which there are no results available, it is necessary to do squared_gradients(arrin, sigma, array2, region_intersect(array2, region_expand(arrin, -diffgaussmask_limit(sigma)) ) ) -> array2; The boundlist manipulation routines used here are from * BOUNDSLIST_UTILS. The result of the call to region_expand gives the valid output data region, and this is intersected with the output array bounds to give the region in which to store data. --- $popvision/help/squared_gradients --- Copyright University of Sussex 1995. All rights reserved.