private void rotate_nearest_y(final Image image, final Image rotated) {
		
		// Initialization:
		messenger.log("Nearest-neighbor sampling in x-z");
		progressor.status("Rotating"+component+"...");
		progressor.steps(odims.c*odims.t*odims.z*odims.y);
		
		// Rotate using the inverse of the rotation matrix:
		final Coordinates ci = new Coordinates();
		final Coordinates co = new Coordinates();
		final double[] row = new double[odims.x];
		rotated.axes(Axes.X);
		
		progressor.start();
		for (co.c=ci.c=0; co.c<odims.c; ++co.c, ++ci.c) {
			for (co.t=ci.t=0; co.t<odims.t; ++co.t, ++ci.t) {
				for (co.z=0; co.z<odims.z; ++co.z) {
					final double dz = co.z*ovz - ozc;
					final double xcdzsinay = ixc - dz*sinay;
					final double zcdzcosay = izc + dz*cosay;
					for (co.y=ci.y=0; co.y<odims.y; ++co.y, ++ci.y) {
						for (int x=0; x<odims.x; ++x) {
							final double dx = x*ovx - oxc;
							ci.x = FMath.round((xcdzsinay + dx*cosay)/ivx);
							ci.z = FMath.round((zcdzcosay + dx*sinay)/ivz);
							if (ci.x < 0 || ci.x > imaxx ||
								ci.z < 0 || ci.z > imaxz) {
								row[x] = background;
							} else {
								row[x] = image.get(ci);
							}
						}
						rotated.set(co,row);
						progressor.step();
					}
				}
			}
		}
		progressor.stop();
	}