code: public static ComplexImg horizontalTransform(ColorImg img, int channel) {
  		// sanity checks
  		sanityCheckForward(img, channel);
  		// make transforms
  		ComplexImg transformed = new ComplexImg(img.getDimension());
  		try(
  				NativeRealArray row = new NativeRealArray(img.getWidth());
  				NativeRealArray fft_r = new NativeRealArray(row.length);
  				NativeRealArray fft_i = new NativeRealArray(row.length);
  		) {
  			for(int y = 0; y < img.getHeight(); y++){
  				row.set(0, img.getWidth(), y*img.getWidth(), img.getData()[channel]);
  				FFTW_Guru.execute_split_r2c(row, fft_r, fft_i, img.getWidth());
  				fft_r.get(0, img.getWidth(), y*img.getWidth(), transformed.getDataReal());
  				fft_i.get(0, img.getWidth(), y*img.getWidth(), transformed.getDataImag());
  			}
  		}
  		return transformed;
  	}
docs: Executes row wise Fourier transforms of the specified channel of the specified {@link ColorImg}.
  A 1-dimensional Fourier transform is done for each row of the image's channel.
  @param img of which one channel is to be transformed
  @param channel the channel which will be transformed
  @return transform as ComplexImg
  
  @throws IllegalArgumentException if the specified channel is out of range ([0..3]) or is alpha (3)
  but the specified image does not have an alpha channel