Thanks.
In response to @0x906: as far as I can tell, ODM is parsing the GCP file, because the orthophoto and the point cloud fit roughly in the area of interest, but with ODM master, horizontal errors can reach 10 meters or more, and in the vertical direction they are hundred of meters.
Returning to the problem of the wrong Z-values, I think that this issue has something to do with the undistorted versions of my images, or maybe it is because of their “little” overlap (60%). Since I’m using historical photos, I think that the software is expecting short focal length and narrow CCD width.
In order to improve the process, I transformed (again) the images using higher accuracy strategy which ensures that the principal point of photo one is located on the central pixel. With the new transformed images, ODM latest stable release (LSR, version 0.3.1) produces acceptable outputs, and those generated with the master are poor.
The following image shows an animation of the orthophoto and the point cloud (1.8 million points) generated with ODM master (Google Satellite in the background):

The animation shows that there are significant shifts between the orthophoto and the background. Also the point cloud is noisy and locally sparse.
To generate these outputs, I used the following sentence to run the toolchain:
./run.sh FOLDER --project-path PATHTOPROJECT --resize-to -1 --force-focal 152.929 --force-ccd 226.5 --orthophoto-resolution 1 --min-num-features 30000 --matcher-neighbor 14 --mesh-octree-depth 12 --texturing-keep-unseen-faces --texturing-skip-visibility-test --texturing-data-term area
I also edited the /SuperBuild/src/opensfm/opensfm/config.py
file with these settings:
depthmap_method: BRUTE_FORCE
depthmap_resolution: 1280
depthmap_num_neighbors: 14
depthmap_num_matching_views: 2
depthmap_patchmatch_iterations: 3
depthmap_min_patch_sd: 1
depthmap_min_correlation_score: 0.7
depthmap_same_depth_threshold: 0.005
depthmap_min_consistent_views: 2
depthmap_save_debug_files: no
On the other hand, the following image shows the results from ODM LSR:

To generate these outputs, I used the same config.py
configuration, the same images and the same gcp_list.txt
file as in the master. I ran the toolchain with the following sentence:
./run.sh FOLDER --project-path PATHTOPROJECT --resize-to 5351 --force-focal 152.929 --force-ccd 226.5 --orthophoto-resolution 1 --min-num-features 30000 --matcher-neighbor 14 --mesh-octree-depth 12 --texturing-keep-unseen-faces --texturing-skip-visibility-test --texturing-data-term area
It is noticeable that in the LSR outputs, there are no accuracy issues between the orthophoto and the background. Also, the Z-values of the point cloud (>7 million points!) match pretty well with the heights of the reference source (the topo 50K). A scarce noise is present in some places (e.g. over the town), due to the printed information on the frames. In order to clean these outliers, I tested a workflow with PCL that worked efficiently.
I am still curious to know why ODM LSR outputs are better than those generated with the master?