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 - Beggiman

Pages: [1]
1
Python and Java API / Build Orthomosaic - create different projections
« on: October 20, 2020, 10:35:00 PM »
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#msg52733


First, 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?
Code: [Select]
                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:


Code: [Select]
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
Code: [Select]
crs = chunk.world_crs
projection.crs = crs

I am not sure why this was nesassary.
Probably somebody could explain?

Pages: [1]