code: public static ComplexImg verticalTransform(ColorImg img, int channel) {
  		sanityCheckForward(img, channel);
  		// make transforms
  		ComplexImg transformed = new ComplexImg(img.getDimension());
  		try(
  				NativeRealArray col = new NativeRealArray(img.getHeight());
  				NativeRealArray fft_r = new NativeRealArray(col.length);
  				NativeRealArray fft_i = new NativeRealArray(col.length);
  		) {
  			ColorPixel px = img.getPixel();
  			ComplexPixel tpx = transformed.getPixel();
  			for(int x = 0; x < img.getWidth(); x++){
  				for(int y = 0; y < img.getHeight(); y++){
  					px.setPosition(x, y);
  					col.set(y, px.getValue(channel));
  				}
  				FFTW_Guru.execute_split_r2c(col, fft_r, fft_i, img.getHeight());
  				for(int y = 0; y < img.getHeight(); y++){
  					tpx.setPosition(x, y);
  					tpx.setComplex(fft_r.get(y), fft_i.get(y));
  				}
  			}
  		}
  		return transformed;
  	}
docs: Executes column wise Fourier transforms of the specified channel of the specified {@link ColorImg}.
  A 1-dimensional Fourier transform is done for each column 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