Hey guys
I'd like to export a orthophoto with e few different perspectives by python script. Like I can do manually with projecton plane " Current View, see atachment. In the end i want that my code can create a custom projection.matrix. so that the view can rotate around the x and y-axis.
I found multiple forumpost but they coudnt help me. for example:
https://www.agisoft.com/forum/index.php?topic=11767.msg52733#msg52733First, I tried to generate a "Planar FrontXZ" Orthomosaic but it resulted intro a "normal TopXY" .
When I manually try it works well. (See attachment with top view (mady with script) and another with frontview (manually created)
Probably you can help me to buildOrthomosaic correctly.
I use : Agisoft Metashape Professional
Version 1.6.4 build 10928 (64bit) Ubuntu 18.04
Here my code:
I guess I make some mistake here but where?
R = Metashape.Matrix( [[-1.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, -1.0, 0.0]] )#FrontXZ
projection= Metashape.OrthoProjection()
projection.type= Metashape.OrthoProjection.Type.Planar
projmatrix= Metashape.Matrix().Rotation(R)
projection.matrix= projmatrix
#build
chunk.buildOrthomosaic(surface_data=Metashape.DataSource.ModelData,blending_mode=Metashape.BlendingMode.MosaicBlending,projection=projection)
If you need the full code:
import Metashape
import os
import math
global doc
import numpy as np
project_name='test1'
def wholeprocess():
doc = Metashape.app.document
print('project_path')
drive = '/home/linux-ben/Desktop/temp'
project_path = os.path.normpath(drive + "/" + project_name + "/" + project_name + ".psx")
output_path = os.path.normpath(drive + "/" + project_name + "/")
#While loop for multiple Orthophotos generation
i=0
while i < 1:
i+=1
doc.chunk = doc.chunks[0] #Use the models in the chunk
chunk = doc.chunk
if chunk.orthomosaic:
chunk.orthomosaic = None #make orthomosaic not active and create a new one
R = Metashape.Matrix( [[-1.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, -1.0, 0.0]] )#FrontXZ
projection= Metashape.OrthoProjection()
projection.type= Metashape.OrthoProjection.Type.Planar
print("projnormal =", projection.matrix )
projmatrix= Metashape.Matrix().Rotation(R)
projection.matrix= projmatrix
##Commented: Automatic change of viewpoint
#x=math.pi/i
#plane = np.array([[1.0, 0.0, 0.0, 0.0],[0.0, 1.0, 0.0, 0.0],[0.0, 0.0, 1.0, 0.0],[0.0, 0.0, 0.0, 1.0]])
#r_x = np.array([[1.0, 0.0, 0.0, 0.0],[0.0, math.cos(x), -math.sin(x), 0.0],[0.0, math.sin(x), math.cos(x), 0.0],[0.0, 0.0, 0.0, 1.0]])
#matrix=np.matmul(plane, r_x)
#projection.matrix= Metashape.Matrix(matrix1)
print("Round{}".format(i))
print("FrontXZ =", projection.matrix )
print('Build Orthomosaic')
#build
chunk.buildOrthomosaic(surface_data=Metashape.DataSource.ModelData,blending_mode=Metashape.BlendingMode.MosaicBlending,projection=projection)
#export
chunk.exportRaster(path=output_path +'/ORTHO/'+ project_name + "_Ortho_NoFiltering_"+str(i)+".png",
format=Metashape.RasterFormat.RasterFormatTiles,
#image_format=Metashape.ImageFormat.ImageFormatNone,
#raster_transform=RasterTransformNone [ ,
projection=projection,
# ][ , region ] , resolution=0,
#resolution_x=0,
#resolution_y=0,
#block_width=10000,
#block_height=10000,
#split_in_blocks=False, width=0, height=0 [ , world_transform ] ,
#nodata_value=32767,
save_kml=True, save_world=True, save_scheme=False, save_alpha=True,
image_description='automated export',
#[ ,image_compression ] ,
network_links=True,
#min_zoom_level=-1,
#max_zoom_level=-1,
white_background=True,
clip_to_boundary=True, title='Orthomosaic', description='Generated by Agisoft Metashape',
source_data=Metashape.DataSource.OrthomosaicData, #north_up=True
#tile_width=256,tile_height=256 [ , progress ]
)
print('Export Report')
chunk.exportReport(output_path + project_name + "_ortho.pdf")
print('Save project')
doc.save()
label = "Custom menu/Exportdifferent Orthophotos"
Metashape.app.addMenuItem(label, wholeprocess)
print("To execute this script press {}".format(label))
Thank you for your help
Ben
Update:
got it run with adding worldcoordinate
crs = chunk.world_crs
projection.crs = crs
I am not sure why this was nesassary.
Probably somebody could explain?