Next: , Previous: , Up: Internal Routines   [Contents][Index]

#### 15.5.491 regrid

`regrid(x, xgrid, ygrid, sx, sy)`

Maps a 2D image onto a specified grid and returns the mapped image. Uses nearest-neighbor interpolation.

x

the two-dimensional image to be remapped.

xgrid ygrid

the remapping cell grid: the coordinates of the corners of the remapped image in the coordinate system of the old image. Must be 2D arrays.

sx sy

The interpolation grid dimensions within each grid cell. Must be scalars.

If `ngx`, `ngy` are the dimensions of the grid, then the dimensions of the resulting image are equal to `(ngx-1)*sx` and `(ngy-1)*sy`, respectively.

Areas in the remapped image for which there is no equivalent data in the original image are set to zero.

Identity mapping, i.e., mappings that return an exact copy of image `x`, are given by `regrid(x,cx,cy,nx,ny)` with ```nx = dimen(x,0)/ngx```, `ny = dimen(x,1)/ngy`, ```cx = indgen(fltarr(ngx,ngy),0)*dimen(x,0)/(ngx - 1)``` and ```cy = indgen(cx,1)*dimen(x,1)/(ngy - 1)```, with `ngx` and `ngy` integers greater than 1. Some examples of linear remappings, with `nx`, `ny`, `cx`, and `cy` as above for ```ngx = 2``` and `ngy = 2`, are:

change in scale

`regrid(x,cx,cy,nx/2,ny/2)` makes the image half the size.

cropping

`regrid(x,cx/2,cy/2,nx/2,ny/2)` selects the lower half of the image, i.e., `x(0:nx/2-1,0:ny/2-1)`.

translation

`regrid(x,cx+100,cy,nx,ny)` shifts the image over 100 pixels to the left (in the direction of negative x).

rotation around the origin

`regrid(x,cx*cos(phi)+cy*sin(phi),-cx*sin(phi)+cy*cos(phi),nx,ny)` rotates the image counterclockwise over angle `phi`, i.e., the positive x axis rotates over angle `phi` in the direction of the positive y axis.

If you need to combine some of these operations, then perform them on `cx`, `cy`, `nx`, and `ny`, and only then apply them to the image. For example, to rotate the image over 1 radian around point `(100,200)` and expand it by a factor of 3, you could do

``` cx2 = cx - 100                ; translate
cy2 = cy - 200
cx3 = cx2*cos(1)+cy2*sin(1)   ; rotate
cy3 = -cx2*sin(1)+cy2*cos(1)
cx4 = cx3 + 100               ; translate back
cy4 = cx4 + 200
y = regrid(x,cx,cy,nx*3,ny*3)
```