Forum

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - benton

Pages: [1]
1
General / Metashape Height Conversion
« on: October 12, 2020, 05:38:56 AM »
Metashape Version 1.6.5 build 11249 (64 bit)
Camera System Hasselblad A6D

AOI Flown at 6500ft ASL

Exif in image under heading GPS looks like this;
Lattitude 34; 26 ;44.0313...
Longitude 115; 57;19.709 ...
Altitude 2044

I am experiencing the following behaviour for photos imported into Metashape under Model > Add Photos;

Longitude 115.95 ...
Latitude -34.44 ...
Altitude (m) 56.92

I am confused as to how the altitude has been changed from 2044 to 56.92

Regards
Bn

2
Python and Java API / Reference Settings - Measurement Accuracy
« on: February 12, 2020, 02:24:06 AM »
Metashape 1.6.x

Hello,

Is there a way to set a default value in Reference Settings > Measurement Accuracy > Camera Accuracy (m) in python script.

It appears to have a default of 10 and I would like to set it to another value.

Regards
Ben

3
Python and Java API / How to solve Export Raster file size exceeded
« on: February 10, 2020, 06:09:47 AM »
Hello,

Version 1.6.x

I have a script that worked in 1.5 but is throwing an error in 1.6

The working 1.5 script looked like this;

Code: [Select]
v_blockw = 10000
v_blockh = 10000

...

chunk.exportOrthomosaic(output_path +'/ORTHO_TILE/'+ project_name + "_Ortho_EPSG" + v_to_epsg + "_ver_" + version + ".tif", image_format=Metashape.ImageFormatTIFF, projection=v_projection, blockw=v_blockw, blockh=v_blockh)

and the 1.6 script;

Code: [Select]
v_blockw = 10000
v_blockh = 10000

...

chunk.exportRaster(output_path +'/ORTHO_TILE/'+ project_name + "_Ortho_EPSG" + v_to_epsg + "_ver_" + version + ".tif", image_format=Metashape.ImageFormatTIFF, projection=v_projection, block_width=v_blockw, block_height=v_blockh, source_data=Metashape.OrthomosaicData)

Throws the following error
Code: [Select]
ExportRaster: image_format = TIFF, path = h:\SILREC_201912\mtn0618-ii/ORTHO_TILE/mtn0618-ii_Ortho_EPSG28350_ver_i.tif, projection = GDA94 / MGA zone 50
generating 40857 x 40495 raster in 1 x 1 tiles
libtiff error: Maximum TIFF file size exceeded
Traceback (most recent call last):
  File "U:\SCRIPTS\METASHAPE\metashape_A6D_Camera_Feedback_1.6-ver2.py", line 224, in <module>
    chunk.exportRaster(output_path +'/ORTHO_TILE/'+ project_name + "_Ortho_EPSG" + v_to_epsg + "_ver_" + version + ".tif", image_format=Metashape.ImageFormatTIFF, projection=v_projection, block_width=v_blockw, block_height=v_blockh, source_data=Metashape.OrthomosaicData)
RuntimeError: TIFFWriteTile: unexpected error: d:\folder_name/OrhtoName_Ortho_EPSG28350_ver_i.tif

The error indicates that the tiff image is too big 40857 x 40495, but I assume I have directed the script to output 10000 x 10000 tiles.

Can anyone see what the error could be?

Regards
Ben


4
Hello

Metashape Version 1.6

I have a script that I ran in 1.5 but has stopped working.

The problem is related to projection.

Previously I had the following;

Code: [Select]
v_projection=Metashape.CoordinateSystem('EPSG::28350')
and when I wanted to export a component of my project I could do this;

Code: [Select]
chunk.exportRaster(output_path +'/DEM/'+ project_name + "_DEM_EPSG" + v_to_epsg + "_ver_" + version + ".tif",image_format=Metashape.ImageFormatTIFF, [b]projection=v_projection[/b], source_data=Metashape.ElevationData)
or

Code: [Select]
chunk.exportPoints(output_path + "/RGB_POINT_CLOUD/input.laz", [b]projection=v_projection[/b], source_data=Metashape.DenseCloudData, format=Metashape.PointsFormatLAZ)
But it no longer works.

I was advised to look at an example at
https://www.agisoft.com/forum/index.php?topic=11767.msg52733#msg52733

But I donot know how to apply the EPSG to the example;

Code: [Select]
projection = Metashape.OrthoProjection()
projection.type = Metashape.OrthoProjection.Type.Planar
#projection.matrix = proj #the matrix that is calculated based on markers
projection=Metashape.CoordinateSystem('EPSG::28350')

Previous Version
Code: [Select]
exportPoints(path[, source ], binary=True, precision=6, normals=True, colors=True,
raster_transform=RasterTransformNone, colors_rgb_8bit=True[, comment ][,
format ][, image_format ][, projection][, shift ][, region ][, blockw ][, blockh ][,
classes ][, progress ])

Current Version 1.6
Code: [Select]
exportPoints(path=’‘, source_data=DenseCloudData, binary=True, save_normals=True,
save_colors=True, save_classes=True, save_confidence=True,
raster_transform=RasterTransformNone, colors_rgb_8bit=True, comment=’‘,
save_comment=True, format=PointsFormatNone, image_
format=ImageFormatJPEG[, crs ][, shift ][, region ], block_width=1000,
block_height=1000, split_in_blocks=False[, classes ], save_images=False[, viewpoint
], subdivide_task=True[, progress ])
Regards
Ben

5
Python and Java API / exportRaster Syntax for DEM
« on: February 04, 2020, 05:46:04 AM »
Hello,

I have upgraded my Metashape version to 1.6.

Scripts that I have been using require updating, I have been able to find some of the changes through the change log for 1.6 Python Scripting.

But I am having trouble with the following;

In 1.5 the following ran without error;

Code: [Select]
chunk.exportDem(output_path +'/DEM/'+ project_name + "_DEM_EPSG" + v_to_epsg + "_ver_" + version + ".tif",image_format=Metashape.ImageFormatTIFF, projection=v_projection)

But in 1.6 I have attempted to apply the change as follows;

Code: [Select]
chunk.exportRaster(output_path +'/DEM/'+ project_name + "_DEM_EPSG" + v_to_epsg + "_ver_" + version + ".tif",image_format=Metashape.ImageFormatTIFF, projection=v_projection, source_data=DEMdata)

But the error message returning is;

NameError: name 'DEMdata' is not defined.

The change log says the following on page 33;

source_data (DataSource) – Selects between DEM and orthomosaic.

I have attempted to use the word DEM and get same error.

Does anyone know what the syntax is?

Ben

6
General / Dense Cloud Quality
« on: February 28, 2019, 02:34:13 AM »
Hello,

When I use these settings;

PhotoScan.UltraQuality
PhotoScan.HighQuality
PhotoScan.MediumQuality
PhotoScan.LowQuality
PhotoScan.LowestQuality

My understanding is the source image is used at original size (UltraQuality), down to reduced sizes dependent on setting used.

Is this process for the Dense Cloud production only?

Does the original high res image get used to produce the DEM and Ortho, or is it the reduced quality image used?

Regards
Ben

7
Python and Java API / buildDenseCloud throws error in 1.4
« on: July 02, 2018, 08:58:07 AM »
Hello,

After upgrading to 1.4 from 1.3 the following line in a script does not work;

chunk.buildDenseCloud(quality=PhotoScan.HighQuality, filter=PhotoScan.NoFiltering)

I get the following error;
Traceback (most recent call last):
  File "U:\PhotoScan_Scripts\SANDBOX\photoscan_process_DJI_AND_A6D_p4p_for_orthophoto_1-4.py", line 154, in <module>
    chunk.buildDenseCloud(quality=PhotoScan.HighQuality, filter=PhotoScan.NoFiltering)
TypeError: 'filter' is an invalid keyword argument for this function

Regards
Ben

8
Python and Java API / Export Point Classes
« on: February 15, 2018, 04:48:52 AM »
Hi,

To export only specific point classes is the below the correct method;

Code: [Select]
chunk.exportPoints(mypath, source=PhotoScan.DenseCloudData, format=PhotoScan.PointsFormatLAS, projection=v_projection, blockw=1000, blockh=1000, classes=[1,2])
Ben

9
Python and Java API / Clarification of ModelData and Elevation-Data
« on: September 22, 2017, 06:18:16 AM »
Version 1.3.3 build 4827 (64 bit)
Win 10

Hello,

When using buildOrthomosaic() surface

does modelData use the surface from buildModel()
and does Elevation-Data use the surface from buildDem()

I have also found that Elevation-Data throws an error and ElevationData does not

The manual states;

class PhotoScan.DataSource
Data source in [PointCloudData, DenseCloudData, DepthMapsData, ModelData, TiledModelData, Elevation-Data, OrthomosaicData]

Ben

10
Python and Java API / 'PhotoScan' has no attribute 'pointCloudData'
« on: September 22, 2017, 02:29:59 AM »
Version 1.3.3 build 4827 (64 bit)
Win 10

Hello,

Could someone tell me what I have done wrong?

I am getting the following error;

Traceback (most recent call last):
2017-09-22 09:05:35   File "E:/PhotoScan_Scripts/photoscan_process_dji_p4p_ver13.py", line 182, in <module>
2017-09-22 09:05:35     chunk.buildOrthomosaic(surface=PhotoScan.DataSource.PointCloudData, blending=PhotoScan.BlendingMode.MosaicBlending, color_correction=True, fill_holes=True)
2017-09-22 09:05:35 RuntimeError: Unsupported data source


This is the offending line;
Code: [Select]
chunk.buildOrthomosaic(surface=PhotoScan.DataSource.PointCloudData, blending=PhotoScan.BlendingMode.MosaicBlending, color_correction=True, fill_holes=True)
And this is the full script;

Code: [Select]
import PhotoScan
import os

global doc

#Used to loop through folders
#Add comma delimited list of project folders below
collection = ['test_1','test_2']

for project_name in collection:

doc = PhotoScan.app.document

print('project_path')
drive = 'E'
project_path = os.path.normpath(drive + ":/" + project_name + "/" + project_name + ".psx")
path_photos = os.path.normpath(drive + ":/" + project_name + "/JPEG")
output_path = os.path.normpath(drive + ":/" + project_name + "/")

print(project_path)
print(path_photos)
print(output_path)

# Create project file
doc.save(project_path, chunks = doc.chunks )
doc.open(project_path)

# Remove Chunks if they exist (they are in the order 1 and 0 for a reason).
print('Remove chunks if exist')
if len(doc.chunks):
doc.chunk = doc.chunks[1]
chunk = doc.chunk
doc.remove(chunk)

if len(doc.chunks):
doc.chunk = doc.chunks[0]
chunk = doc.chunk
doc.remove(chunk)

print('Name the chunk for dense cloud')
chunk = PhotoScan.app.document.addChunk()
chunk.label = project_name + "_dense_cloud"

print('Add Photos')
image_list = [
os.path.join(path_photos, path)
for path in os.listdir(path_photos)
if path.lower().endswith(("jpg", "jpeg", "tif", "png","JPG","JPEG","TIF",""))
]

print(image_list)
chunk.addPhotos(image_list)

print('Load Exif')
chunk.loadReferenceExif()

print('Set COORD SYS to WGS84')
coord_system = PhotoScan.CoordinateSystem('EPSG::4326')
chunk.crs = coord_system

print('Match Photos')
chunk.matchPhotos(accuracy=PhotoScan.HighAccuracy, preselection=PhotoScan.ReferencePreselection, tiepoint_limit=40000)

print('Align Cameras')
chunk.alignCameras()

print('Optimize Cameras')
chunk.optimizeCameras()

print('Build Dense Point Cloud')
#UltraQuality, HighQuality, MediumQuality, LowQuality, LowestQuality
#NoFiltering, MildFiltering, ModerateFiltering, AggressiveFiltering
chunk.buildDenseCloud(quality=PhotoScan.HighQuality, filter=PhotoScan.NoFiltering)   

print('Copy chunk for sparse cloud processing.')
chunk.copy()
doc.chunk = doc.chunks[1]
chunk = doc.chunk
chunk.label = project_name + "_sparse_cloud"

print('Return to the chunk for dense cloud processing')
doc.chunk = doc.chunks[0]
chunk = doc.chunk

#print('Classify Ground Points')
#chunk.classifyGroundPoints(max_angle=15.0, max_distance=4.0, cell_size=5.0)

#print('Export Point Cloud')
#chunk.exportPoints(output_path + "/POINT_CLOUD/" + project_name + "_pointcloud.txt", source=PhotoScan.DenseCloudData, format=PhotoScan.PointsFormatXYZ, blockw=1000, blockh=1000)

# -------------------------------------------------------------------
# Create Dense Cloud Chunk
# -------------------------------------------------------------------

'''
print('Build Model (Mesh) using dense cloud')
chunk.buildModel(surface=PhotoScan.HeightField, source=PhotoScan.DenseCloudData, face_count=PhotoScan.MediumFaceCount, interpolation=PhotoScan.EnabledInterpolation)

print('Close Holes')
chunk.model.closeHoles(level = 50)

print('Mapping Mode')
chunk.buildUV(mapping=PhotoScan.OrthophotoMapping)

print('Build Texture')
chunk.buildTexture(blending=PhotoScan.MosaicBlending, size=8192)

print('Save project')
doc.save()

#print('Export Report')
chunk.exportReport(output_path + project_name + "_dense_cloud.pdf")
'''

# -------------------------------------------------------------------
# Create Sparse Cloud Chunk
# -------------------------------------------------------------------

print('Make new chunk %_sparse_cloud active')
doc.chunk = doc.chunks[1]
chunk = doc.chunk

#print('Build Dense Point Cloud')
#We have copied the Dense Point Cloud from the Chunk above so we dont have to process it again.
#UltraQuality, HighQuality, MediumQuality, LowQuality, LowestQuality
#NoFiltering, MildFiltering, ModerateFiltering, AggressiveFiltering
#chunk.buildDenseCloud(quality=PhotoScan.HighQuality, filter=PhotoScan.NoFiltering)

print('Build Model (Mesh) using sparse cloud (pointCloudData = sparse cloud)')
chunk.buildModel(surface=PhotoScan.HeightField, source=PhotoScan.PointCloudData, face_count=PhotoScan.MediumFaceCount, interpolation=PhotoScan.EnabledInterpolation)

print('Save project')
doc.save()

print('Close Holes')
chunk.model.closeHoles(level = 50)

print('Mapping Mode')
chunk.buildUV(mapping=PhotoScan.OrthophotoMapping)

print('Build Texture')
chunk.buildTexture(blending=PhotoScan.MosaicBlending, size=8192)

print('Save project')
doc.save()

print('Build Dem using sparse cloud (PointCloudData)')
chunk.buildDem(source=PhotoScan.PointCloudData, interpolation=PhotoScan.EnabledInterpolation)

print('Export Dem to GDA94 Zone 50')
chunk.exportDem(output_path +'/DEM/'+ project_name + "_DEM_DenseCloud_NoFiltering.tif",image_format=PhotoScan.ImageFormatTIFF, projection=PhotoScan.CoordinateSystem('EPSG::28350'))

print('Export INPHO file to GDA94 Zone 50 ')
chunk.exportCameras(output_path + project_name + "_inpho_EPSG28350.prj", format=PhotoScan.CamerasFormatInpho, projection=PhotoScan.CoordinateSystem('EPSG::28350'), rotation_order=PhotoScan.RotationOrderXYZ)

print('Build Orthomosaic')
chunk.buildOrthomosaic(surface=PhotoScan.DataSource.PointCloudData, blending=PhotoScan.BlendingMode.MosaicBlending, color_correction=True, fill_holes=True)

print('Export Orthomosaic to GDA94 Zone 50')
chunk.exportOrthomosaic(output_path +'/ORTHO/'+ project_name + "_Ortho_SparseCloud_NoFiltering_EPSG28350.tif", image_format=PhotoScan.ImageFormatTIFF, projection=PhotoScan.CoordinateSystem('EPSG::28350'))

print('Export Report')
chunk.exportReport(output_path + project_name + "_sparse_cloud.pdf")

print('Save project')
doc.save()
   
The PhotoScan Python reference states the following;

class PhotoScan.DataSource
Data source in [PointCloudData, DenseCloudData, DepthMapsData, ModelData, TiledModelData, Elevation-Data, OrthomosaicData]

Regards
Ben

   


11
Python and Java API / Chunk Name
« on: September 18, 2017, 06:18:40 AM »
Hello,

Is it possible to give a chunk a name?

Ben

12
Python and Java API / Sparse Cloud
« on: September 14, 2017, 09:52:39 AM »
Hi,

How do I get this to use the sparse cloud and not the dense cloud;

Code: [Select]
chunk.buildModel(surface=PhotoScan.HeightField, source=PhotoScan.DenseCloudData, face_count=PhotoScan.MediumFaceCount, interpolation=PhotoScan.EnabledInterpolation)
Ben

13
Python and Java API / addPhotos Error
« on: September 14, 2017, 04:31:59 AM »
Hi,

PhotoScan Pro Ver 1.2.6 Build 2834

I have the following code that returns an error, can someone tell me why?


This is the error I get (in red);

2017-09-14 09:27:38 Saving project...
2017-09-14 09:27:38 saved project in 0.016 sec
2017-09-14 09:27:38 Finished processing in 0.016 sec (exit code 1)
2017-09-14 09:27:38 Loading project...
2017-09-14 09:27:38 loaded project in 0 sec
2017-09-14 09:27:39 Finished processing in 0 sec (exit code 1)
2017-09-14 09:27:39 E:\python_dev\py_test101.psz
2017-09-14 09:27:39 ['E:\\python_dev\\JPEG\\DJI_0416.JPG', 'E:\\python_dev\\JPEG\\DJI_0417.JPG', 'E:\\python_dev\\JPEG\\DJI_0418.JPG', 'E:\\python_dev\\JPEG\\DJI_0419.JPG', 'E:\\python_dev\\JPEG\\DJI_0420.JPG', 'E:\\python_dev\\JPEG\\DJI_0421.JPG', 'E:\\python_dev\\JPEG\\DJI_0422.JPG', 'E:\\python_dev\\JPEG\\DJI_0433.JPG', 'E:\\python_dev\\JPEG\\DJI_0434.JPG', 'E:\\python_dev\\JPEG\\DJI_0435.JPG', 'E:\\python_dev\\JPEG\\DJI_0436.JPG', 'E:\\python_dev\\JPEG\\DJI_0437.JPG', 'E:\\python_dev\\JPEG\\DJI_0438.JPG', 'E:\\python_dev\\JPEG\\DJI_0439.JPG', 'E:\\python_dev\\JPEG\\DJI_0446.JPG', 'E:\\python_dev\\JPEG\\DJI_0447.JPG', 'E:\\python_dev\\JPEG\\DJI_0448.JPG', 'E:\\python_dev\\JPEG\\DJI_0449.JPG', 'E:\\python_dev\\JPEG\\DJI_0450.JPG', 'E:\\python_dev\\JPEG\\DJI_0451.JPG', 'E:\\python_dev\\JPEG\\DJI_0452.JPG', 'E:\\python_dev\\JPEG\\DJI_0462.JPG', 'E:\\python_dev\\JPEG\\DJI_0463.JPG', 'E:\\python_dev\\JPEG\\DJI_0464.JPG', 'E:\\python_dev\\JPEG\\DJI_0465.JPG', 'E:\\python_dev\\JPEG\\DJI_0466.JPG', 'E:\\python_dev\\JPEG\\DJI_0467.JPG']
2017-09-14 09:27:39 Traceback (most recent call last):
2017-09-14 09:27:39   File "E:/python_dev/create_project_ver2.py", line 28, in <module>
2017-09-14 09:27:39     chunk.addPhotos(image_list)
2017-09-14 09:27:39 AttributeError: 'NoneType' object has no attribute 'addPhotos'

>>>

This is the code;

Code: [Select]
import PhotoScan
import os

global doc
doc = PhotoScan.app.document

project_path = r'E:\python_dev\py_test101.psz'
path_photos = r'E:\python_dev\JPEG'

# Create project file
doc.save(project_path, chunks = doc.chunks)
doc.open(project_path)
chunk = doc.chunk

# Add Photos
image_list = [
    os.path.join(path_photos, path)
    for path in os.listdir(path_photos)
    if path.lower().endswith(("jpg", "jpeg", "tif", "png"))
    ]

print(project_path)
print(image_list)

chunk.addPhotos(image_list)

# Save project
doc.save()

Ben

14
Python and Java API / How to use optimizeCamera
« on: September 14, 2017, 02:37:21 AM »
Hi,

I want to use optimizeCamera but it has thrown the following error;

2017-09-13 16:15:10 Traceback (most recent call last):
2017-09-13 16:15:10   File "E:/python_dev/create_project.py", line 44, in <module>
2017-09-13 16:15:10     chunk.optimizeCameras(fit_b1=True, fit_k1=True, fit_k2=True, fit_k3=True, fit_p1=True, fit_p2=True)
2017-09-13 16:15:10 TypeError: 'fit_p1' is an invalid keyword argument for this function

And this is the line of code that I used in my script;

Code: [Select]
chunk.optimizeCameras(fit_b1=True, fit_k1=True, fit_k2=True, fit_k3=True, fit_p1=True, fit_p2=True)
What have I done wrong?

Ben

15
Python and Java API / Write path into script
« on: September 13, 2017, 06:39:50 AM »
Hi,

Is there a way to hardcode a path for addPhotos into a script this line of code;

Code: [Select]
path_photos = PhotoScan.app.getExistingDirectory("Specify folder with input photos:")

prompts the user during the running of the script but I would like to write the path directly into the script, so no prompt appears

I have attempted to use this;

Code: [Select]
path_photos = r'C:\folder_name\jpeg'

Ben

Pages: [1]