docs: public boolean process( @Nullable List<AssociatedPair> points2D ,
  							@Nullable List<AssociatedPair3D> points3D ,
  							@Nullable List<AssociatedPairConic> conics ,
  							DMatrixRMaj foundH )
  	{
  		// no sanity check is done to see if the minimum number of points and conics has been provided because
  		// that is actually really complex to determine. Especially for conics
  
  		int num2D = points2D != null ? points2D.size() : 0;
  		int num3D = points3D != null ? points3D.size() : 0;
  		int numConic = conics != null ? conics.size() : 0;
  
  		int numRows = computeTotalRows(num2D,num3D,numConic);
  
  		// only 2D points need to be normalzied because of the implicit z=1
  		// 3D points are homogenous or lines and the vector can be normalized to 1
  		// same goes for the conic equation
  		shouldNormalize = false;//normalize && points2D != null;
  
  		if( shouldNormalize ) {
  			LowLevelMultiViewOps.computeNormalization(points2D, N1, N2);
  		}
  		A.reshape(numRows,9);
  		A.zero();
  
  		int rows = 0;
  		if( points2D != null )
  			rows = addPoints2D(points2D,A,rows);
  		if( points3D != null )
  			rows = addPoints3D(points3D,A,rows);
  		if( conics != null )
  			addConics(conics,A,rows);
  
  		// compute the homograph matrix up to a scale factor
  		if (computeH(A,foundH))
  			return false;
  
  		if( shouldNormalize )
  			undoNormalizationH(foundH,N1,N2);
  
  		// pick a good scale and sign for H
  		if( points2D != null )
  			adjust.adjust(foundH,points2D.get(0));
  
  		return true;
  	}