giovedì 8 agosto 2024

Proiezione isometrica Esercizio GoNum Golang

 Per esercizio ho provato ad implementare la proiezione isometrica in GO partendo dalle istruzioni su Wikipedia


i calcoli matriciali sono i seguenti (in questo caso e' gia' impostata una rotazione di alfa di circa 35 gradi e beta di 45 gradi





package main
import (
"fmt"
"math"
"gonum.org/v1/gonum/mat"
)
func format(matrix mat.Matrix) {
formatted := mat.Formatted(matrix, mat.Prefix(""), mat.Squeeze())
fmt.Println(formatted)
}


func isometrica(x,y,z float64) (float64,float64) {
xs := mat.NewDense(3, 3, []float64{math.Sqrt(3), 0, -math.Sqrt(3),
1, 2, 1,
math.Sqrt(2),  -math.Sqrt(2),  math.Sqrt(2)})
//format(xs)
w := mat.NewDense(3, 3,nil)
w.Scale(1/math.Sqrt(6),xs)
coordinate := mat.NewVecDense(3, []float64{x,y,z}) // e' gia' un vettore colonna
c := mat.NewVecDense(3,  make([]float64, 3))
c.MulVec(w,coordinate)
pr := mat.NewDense(3, 3, []float64{1,0,0,0,1,0,0,0,1})
d := mat.NewVecDense(3,  make([]float64, 3))
d.MulVec(pr,c)
return d.AtVec(1),d.AtVec(2)
}
func main() {
xi,yi := isometrica(0.0,0.0,0.0)
fmt.Printf("data: %f,%f\n", xi,yi)
xi,yi = isometrica(1.0,0.0,0.0)
fmt.Printf("data: %f,%f\n", xi,yi)
xi,yi = isometrica(0.0,1.0,0.0)
fmt.Printf("data: %f,%f\n", xi,yi)
xi,yi = isometrica(1.0,1.0,0.0)
fmt.Printf("data: %f,%f\n", xi,yi)
xi,yi = isometrica(0.0,0.0,2.0)
fmt.Printf("data: %f,%f\n", xi,yi)
xi,yi = isometrica(1.0,0.0,2.0)
fmt.Printf("data: %f,%f\n", xi,yi)
xi,yi = isometrica(0.0,1.0,2.0)
fmt.Printf("data: %f,%f\n", xi,yi)
xi,yi = isometrica(1.0,1.0,2.0)
fmt.Printf("data: %f,%f\n", xi,yi)

}


venerdì 26 luglio 2024

ODMNode

 Un metodo per automatizzare ODM e' quello di utilizzare NodeODM

 


 In estrema sintesi si mette in esecuzione su un server il docker con la seguente sintassi

 

 docker run -p 3000:3000 opendronemap/nodeodm

 In seguito da un client si puo' usare il seguente script Python per effettuare l'upload automatico di tutte le immagini in un folder e per impostare i parametri di lavoro. Al termine del task sul server i dati saranno reinviati in automatico al client

 

import os
import sys
sys.path.append('..')
from pprint import pprint

from pyodm import Node, exceptions

node = Node("192.168.1.125", 3000)

files = []
for dirname, dirnames, filenames in os.walk('./images/'):
for subdirname in dirnames:
files.append(os.path.join(dirname, subdirname))
for filename in filenames:
files.append(os.path.join(dirname, filename))

pprint(files)
try:
# Start a task
print("Uploading images...")
task = node.create_task(files,{'dsm': True, 'orthophoto-resolution': 4})
print(task.info())


try:
# This will block until the task is finished
# or will raise an exception
task.wait_for_completion()

print("Task completed, downloading results...")

# Retrieve results
task.download_assets("./results")

print("Assets saved in ./results (%s)" % os.listdir("./results"))

# Restart task and this time compute dtm
task.restart({'dtm': True})
task.wait_for_completion()

print("Task completed, downloading results...")

task.download_assets("./results_with_dtm")

print("Assets saved in ./results_with_dtm (%s)" % os.listdir("./results_with_dtm"))
except exceptions.TaskFailedError as e:
print("\n".join(task.output()))

except exceptions.NodeConnectionError as e:
print("Cannot connect: %s" % e)
except exceptions.NodeResponseError as e:
print("Error: %s" % e)


 

sabato 20 luglio 2024

Ciclismo antico 2

 Maglia Magniflex, cappello Gemeaz Zor preso alla partenza del Giro Italia Firenze 




giovedì 27 giugno 2024

Led e sensori AS7265x

 Illuminando lo spectralon con tutti i led accesi di AS7265 la risposta in radianza e' la seguente. Come si vede il massimo di illuminazione e' intorno ai 400 nm e deriva da contributo del led UV e del led White

Il picco a 870 nm deriva dal centro di emissione del led IR

Non riesco a giustificare il picco a circa 600 nm

 


 Spettro di emissione dei led da datasheet
White Led (Visibile)

IR Led

UV Led

questo e' il grafico di risposta spettrale dei 18 canali dei sensori



 

 

mercoledì 26 giugno 2024

Primo spettro di riflettanza con SparkFun Triad Spectroscopy Sensor - AS7265x

 Lo spettro di riflettanza e' stato ottenuto dividendo il valore calibrato della foglia per il valore calibrato nel corrispondente canale dello spectralon

 


 


spettro spectralon foglia
410 0.104046939572376 7631.94 794.08
435 0.100663330010594 1916.09 192.88
460 0.0941060471276098 5496.99 517.3
485 0.0846332588803228 2220.64 187.94
510 0.127077186925102 2647.21 336.4
535 0.209306506039295 3170.9 663.69
560 0.204982889816192 1385.14 283.93
585 0.171727663387711 1473.03 252.96
610 0.0880803424432005 4555.5 401.25
645 0.121946929339632 795.92 97.06
680 0.123669783940664 1054.34 130.39
705 0.278338126099833 232.99 64.85
730 0.766924924721724 295.57 226.68
760 0.718044428259286 219.68 157.74
810 0.575862515972518 539.99 310.96
860 1.02470169644788 2543.55 2606.38
900 0.777308820373417 139.79 108.66
940 0.344453330286759 87.53 30.15


Change Detection with structural similarity

L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...