private void keepGettingFeatures(int count) {
		// If we're done, don't do anything else.
		if (count >= level) {
			return;
		}
		double data[];
		int width = subImage.length;
		int height = subImage[0].length;
		// We're doing the same thing as above, but we're not working with a Raster anymore.
		double[][] firstPhaseOutput = new double[width][height];
		double[][] secondPhaseOutput = new double[height][width];
		double[][] thirdPhaseOutput = new double[width][height];
		double[][] newSubImage = new double[width/2][height/2];
		// Copy the array.
		// I thought java.util.Arrays would handle this, but I guess not...
		for (int x=0; x < width; x++) {
			for (int y=0; y < height; y++) {
				firstPhaseOutput[x][y] = subImage[x][y];
			}
		}

		// First the columns.
		for (int x=0; x < width; x++) {
			data = firstPhaseOutput[x];
			wavelet.daubTrans(data);
			for (int y=0; y < height; y++) {
				secondPhaseOutput[y][x] = data[y];
			}
		}
		for (int y=0; y < height; y++) {
			data = secondPhaseOutput[y];
			wavelet.daubTrans(data);
			for (int x=0; x < width; x++) {
				thirdPhaseOutput[x][y] += data[x];
			}
		}
		subImage = new double[width/2][height/2];
		double feature = 0;
		for (int x=0; x < width/2; x++) {
			for (int y=0; y < height/2; y++) {
				newSubImage[x][y] = thirdPhaseOutput[x][y];
				feature += thirdPhaseOutput[x+(width/2)][y];
				feature += thirdPhaseOutput[x][y+(height/2)];
				feature += thirdPhaseOutput[x+(width/2)][y+(height/2)];
			}
		}
		// Store the average energy level at this level of decomposition.
		feature /= (width * height/12.0);
		features[count] = feature;
		// Store the image to be used if we're going to do more levels of decomposition.
		subImage = newSubImage;
		// Do another level of deomposition if needed.
		keepGettingFeatures(count+1);
	}