TU ANUNCIO / YOUR PUBLICITY

AQUÍ PODRÍA ESTAR TU ANUNCIO: / HERE COULD BE YOUR AD E-mail

domingo, 26 de enero de 2014

Special maths used to our programming (Sintegrals and sinderivatives) / Matemáticas especiales usadas para nuestra programación (Sintegrales y siderivadas)

Mucha gente nos ha preguntado cual es la base matemática que hemos aplicado a nuestra programación.
Many people have asked us what is the mathematical basis we have applied to our programming.

Esta a sido muy original y variada. A continuación se expone una de ellas. La hemos denominado Sintegrales
This has been very original and varied. Then one of them is exposed. We have called Sintegrals.

Sintegrales/ siderivadas
Sintegrals / sinderivatives

Para el proceso de caracterización de todos los datos se debe pensar en la resolución de un cuantioso número de cálculos de sumas de términos de una sucesión. En el caso de funciones continuas la resolución de estas está tratado con las conocidas integrales en nuestro caso y dado que los datos de partida son discontinuos, o para entendernos, aplicaciones del conjunto de números naturales a reales, este procedimiento acabaría por darnos datos erróneos.

Procedamos a la siguiente definición:

For the characterization process all data should consider the resolution of a substantial number of calculations of sums of terms of a sequence. In the case of continuous functions solving these integrals is treated known in our case and since the input data are discontinuous, that is applications the set of natural numbers to real, this procedure would eventually give erroneous data.

Proceed to the following definition:

  n=n n=n 
Г(an ) = ∑   an = An 
n=1     n=1 


Por ejemplo. For example:

n=n       n=n 
Г (n)    = ∑ n = (n + 1)·n / 2
n=1       n=1 

de igual manera:
similarly:

Г (1)  = n 
Г (n)  = n²/2 + n/2 
Г (n²) = n³/3 + n²/2 + n/6 
Г (n³) = n⁴/4 + n³/2 + n²/4 
Г (n⁴) = n⁵/5 + n⁴/2 + n³/3 – n/30 
Г (n⁵) = n⁶/6 + n⁵/2 + 5n⁴/12 – n²/12 
etc.
so on.

Si tuviéramos que programar:
If we were to set:

for (i=a to b) {
...
  for (j=c to d) {
...
    for (k=e to f) {
...
      for (n=p to q) {
        s=s+n^2}
      }
...
   }
...
}


El ordenador se vería obligado a realizar ese bucle k veces.

Si este proceso está inmerso en un cálculo de 10 minutos, evitar el bucle tendría una reducción de tiempo de 10/k minutos

The computer would have to make that loop k times. 

If this process is involved in a calculation of 10 minutes, the loop would prevent a reduction of time of 10 / k minutes

for (i=a to b) {
...
  for (j=c to d) {
...
    for (k=e to f) {
...
      s=s0+n^3/3 + n^2/2 + n/6}
      }
...
   }
...
}

Esta última solución, no sólo reduce el código a 1/3 de líneas sino que lo además, y esto es lo importante, reduce el tiempo de cómputo global.

The latter solution not only reduces the code to third line but it also, and this is the most important, this reduces the overall computation time.

Propiedades de las sintegrales:
Properties of sintegrals:

Propiedad distributiva: / Distributive property: Г (α·an+β) = α·Г(an)+β·n 

Si existe el concepto de Sintegral parejo al de integral se presupone que existe el concepto opuesto, la siderivada pareja de la derivada.

If there is even the concept of integral Sintegral assumes that there is the opposite concept, couple siderivative, the derivative.

Si / If  Г(an) = An , entonces / then  Д(An) = an 

Las siderivadas se calculan fácilmente, más aun si se observa que van obteníendose los componentes del triángulo de Tartaglia. 
The siderivatives are easily calculated, even more so if you notice it is collected components Tartaglia triangle.

Д (n) = 1
Д(n²) = 2·n –1
Д (n³) = 3·n² – 3·n + 1
Д (n⁴) = 4·n³ – 6·n² + 4·n – 1
Д(n⁵) = 5·n⁴ – 10·n³ +10·n² – 5·n      + 1
Д(n⁶) = 6·n⁵ – 15·n⁴ + 20·n³ – 15·n²   + 6·n – 1
Д(n⁷) = 7·n⁶ – 21·n⁵ + 35·n⁴– 35·n³   + 21·n²    – 7·n     + 1
Д(n⁸) = 8·n⁷ – 28·n⁶ + 56·n⁵ – 70·n⁴  + 56·n³   – 28·n²  + 8·n     + 1
Д(n⁹) = 9·n⁸ – 36·n⁷ + 84·n⁶– 126·n⁵ + 126·n⁴ – 84·n³  + 36·n²  – 9·n    + 1
Д(n¹⁰) = 10·n⁹– 45·n⁸ +120·n⁷–210·n⁶ +252·n⁵  –210·n⁴ +120·n³ –45·n² +10·n  +1

Como resulta bastante tedioso calcular las sintegrales pero por el contrario las siderivadas se calculan fácilmente con lo que el cálculo del término general por ejemplo a partir de Д (n7) se calculará Г(n6): 

As is quite tedious calculating sintegrals but instead the siderivatives are easily calculated so that the calculation of the general term for example from Д (n7) calculating Г(n6):

Д(n⁷) = 7·n⁶ – 21·n⁵ + 35·n⁴– 35·n³   + 21·n²    – 7·n     + 1 

Luego:  
Then:

n⁷ = 7·Г(n⁶)–21·Г(n⁵)+35·Г(n⁴)–35·Г(n³)+21·Г(n²)–7·Г(n)+1 

Substituyendo y despejando, 
Substituting and solving,

Г(n6) = n⁷/7 + n⁶/2 + n⁵/2 – n³/6 + n/42 



SINTEGRALES DE POTENCIAS: 
SINTEGRALS OF POWERS:

Г(1/2n) = 1 – 1/2n 
Г(1/3n) = [1/2]·[1 – 1/3n] 
.  
Г(1/pn) = [(p – 1)/p]·[1 – 1/p(n+1)] 

Si / If   q=1/p ,
Г(qn) = [1/(1 – q)]·[1 – q(n+1)] 

Para el caso común del número e 
For "e" number:

Г(en) = [1/(1 – e)]·[1 – e(n+1)] 

Para las funciones que se pueden descomponer en términos de en, caso del seno, coseno, seno hiperbólico y coseno hiperbólico. La solución que se obtiene es la siguiente: 

For functions that can be decomposed in terms of in case of sine, cosine, hyperbolic sine and hyperbolic cosine. The solution obtained is:

Г(sen(αx)) = sen(αx)/(2 − 2cos(αx)) − cos(α(x + 1/2))/(2sen(αx/2)) 
Г(cos(αx)) = 1⁄2 + sen(α (x+1/2))/(2sen(α x/2)) 
Г(SH(αx)) = SH(αx)/(2 − 2CH(αx)) − CH(α(x + 1/2))/(2SH(αx/2)) 
Г(CH(αx)) = 1⁄2 + SH(α(x+1/2))/(2SH(αx/2)) 

Y para casos más complejos (importante en nuestro caso ya que suelen aparecer modificaciones por giros): 
And, for more cpmplex cases :  (important in our case because changes usually appear by turns):

Г(sen(αx+β))=[sen(β)−cos(αx+ β)]/[2−2cos(αx)]−[cos(α(x+1⁄2)+β)]/(2sen(αx/2)) 

Al repasar nuestro programa debemos fijarnos donde podemos substituir un bucle por una función equivalente. Este hecho aparentemente tan sencillo nos permitirá disminuir en gran medida el tiempo final de cómputo. 

When reviewing our program we must pay attention where we can replace a loop by an equivalent function. This seemingly simple fact will allow us to greatly reduce the final time of computation.
















domingo, 19 de enero de 2014

Photogrammetry and Geotechnics with VisualSFM / Fotogrametría y Geotecnia con VisualSFM

Manual fotogrametría práctica con VisualSFM para su uso en geología:

Descargable desde http://ccwu.me/vsfmSe instala y se abre el programa: (antes hemos hecho unas cuantas fotos de un talud para tener un ejemplo)


Manual practice VisualSFM photogrammetry for use in geology: 


Downloadable from http://ccwu.me/vsfm. It installs and the program opens (before we made a few pictures of a slope for an example)

Se seleccionan las fotos y se le deja trabajar:
We select the photos and let we work at the computer:



A continuación se pica en : después en    y se le deja trabajar:
Then, we clik in:                          then wue click in        and let we work at the computer:




Ahora hay que poner los puntos en sus coordenadas correctas. IMPORTANTÍSISMO, EL PROGRAMA ES MUY BUENO PERO NO HACE MAGIA NO ES ADIVINO. Para ello se pica en
Para seleccionar un punto se busca ese punto y se pica con control+ratón(derecho):

Now we have to put points in their correct coordinates. VERY IMPORTANT, THE PROGRAM IS VERY GOOD BUT IT DOES NOT MAGIC, IT IS NOT SEER. For it, click in
To select a point and that point is looking chop with control + mouse (right):


En este caso les pondremos valores sencillitos a tres puntos. Posteriormente se pica de nuevo en  para decirle al programa que reacalcule de nuevo todos los puntos. Se pica con el botón de mayúsculas pulsado. (si no se pica con Mayúsculas pulsado no hace nada y hay que repetir el proceso.

Ahora lo que queda es guardar lo cambiado. No lo anterior.

Si se pulsa: SFM > SaveNViewMatch:

In this case we will put simple values ​​to three points. Then you click again to tell the program that reacalcule again all points. you click the button with shift pressed. (if you click with Shift pressed does nothing and have to repeat the process. 

Now need to save what changed. Not before. 

Pressing: SFM> SaveNViewMatch:


Lo guardamos como cosa.ply (EXTENSIÓN PLY)
Save it with the extension ply.


Otra forma de guardar en con CMVS: 
Another way is to save it with CMVS:



Y guardará todo como lo estamos dejando:
 Guardará el proyecto como archivo cantos.nvm y directorio cantos.nvm.cmvs:
All will be saved as file .nvm and .nvm.cmvs



Si se desea se puede abrir con MeshLab:
You can open it with MeshLab:


Queda chulo:
That's OK:


Ya en nuestra aplicación se le cambia de .ply a .las:
With our application, we can change format .ply to .las.



Y ya se puede leer:
Then we can read it:



Y el resto es ya trabajar con nuestro programa.
Now, we can work with our program.















domingo, 12 de enero de 2014

Geotechnics, fractals and laser scanner. Can these three concepts have something in common? / Geotécnia, fractales y láser escáner. ¿Pueden estos tres conceptos tener algo en común?

Hace unos días, cuando empezamos a investigar si sería posible la complementación de conceptos como el láser escáner y la geotecnia, descubrimos que sí sería posible tal concomitancia. Al profundizar en cual sería el sistema de cálculo más adecuado, más cercano al sistema utilizado en campo, fuimos elaborando diversos procedimientos de cálculo con la ayuda de nuestro programa. 
A few days ago, when we began to investigate whether supplementation of concepts such as laser scanners and geotechnics be possible, such conjunction discovered that yes it would be possible. By delving into the system which would be more appropriate computer closer to the system used in the field, we were developing various computational procedures with the help of our program.

Al cartearnos con algunos de nuestros habituales seguidores de nuestro blog, en particular con R.R., surgieron varias dudas en torno a la forma de realizar estas mediciones. La duda era debida a que el sistema habitual era el de trepar físicamente por el talud y elegir planos característicos para la definición de los parámetros de buzamiento y rumbo. Estos planos característicos tienen estructura fractal y esta estructura es la que decidimos intentar reproducir con nuestro programa.
Some of our regular followers of our blog, in particular RR, several questions about how to perform these measurements arose. The doubt was due to the usual system was to physically climb the slope and choose characteristic to define the parameters of dip and direction planes. These planes are characteristic fractal structure and this structure is that we decided to try to play with our program.

El proceso definido anteriormente es bastante difícil de entender sin ejemplos claros y una detallada explicación. A continuación expondremos los avances que fuimos alcanzando en orden cronológico e intentaremos explicarlos con la mayor claridad posible.
The process defined above is quite difficult to understand without clear examples and a detailed explanation. Then we will present the progress that we were reaching in chronological order and we will try to explain as clearly as possible.

El ejemplo:
Hemos escaneado el siguiente talud:
We've scanned the following slope:



Y, por tanto, obtenido la nube de puntos:
And, therefore, obtained the point cloud:


Triangulamos en malla con nuestro programa:
Triangulated mesh with our program:


Una vez triangulado lo podemos ver en 3D:
Once triangulated, we can see it in 3D:


El cálculo de planos sería:
The calculation of planes would be this:


Y con la opción de sombras:
And with the option of shadows:


Si en lugar de dar estos pasos acometemos la dimensión fractal:
If instead of taking these steps we tackle the fractal dimension:


La selección fractal es un subconjuto (mayor cuanto mayor es el número de puntos) de aquellos planos claros que hubiera elegido un geólogo para la valoración de los diversos planos de definición.
The fractal is a subset selection (higher the greater the number of points) of those clear shots that had chosen a geologist for assessing various levels of definition.


Y de este subconjunto se hace la estadística de las familias de planos. Por polos:
And with this subset, the statistics of the families of planes are made. For poles:


Y por sombras:
And for shadows:


Si hubíeramos ido a tomar los datos de campo habríamos tomados los siguiente rumbos y buzamientos:
If we had gone to take the field data we had taken the following courses and dips:

155 48
122 35
126 48
282 66
325 88

Con los que hubiéramos obtenidos los siguientes diagramas:
With that we had obtained the following diagrams:



Se puede concluir que es más fiable el método fractal que la triangulación completa. Parece lógico. no todos los planos que aparecen en la triangulación tienen que ser planos de fractura característicos de las rocas. Un geólogo también preselecciona que pano tiene que medir antes de hacerlo.

La otra opción es seguir el procedimiento de la anterior entrada y decidir que puntos nos valen desde el 3D.


It can be concluded that it is more reliable to complete the triangulation fractal method. It seems logical. Not all levels shown in the triangulation must be flat characteristic fractured rock. A geologist also preselected to have to measure cloth before doing so.

The other option is to follow the procedure of the previous post and decide that we are worth points from the 3D.




Programming for LIDAR / Programando para LIDAR

Creación de un programa de escritorio para datos LIDAR

Creating a desktop program for LIDAR data

Después de realizar varios programas con la temática LIDAR, hemos empezado a crear el programa definitivo. Para ello hemos empezado a modular el programa. Hemos dividido el problema en varios problemas diferentes. La resolución de cada problema es un módulo distinto.

Soluciones a buscar:

1ª Lectura de archivos LIDAR en su formato .las
2ª Visualización de la planta y diálogo con ella. Debemos poder colocar escalado un resumen de la planta y además poder extraer coordenadas de este objeto.
3ª Visualización de las proyecciones y/o 3D. Extracción de datos de ésta.

La lectura de archivos LIDAR se hace siguiendo las instrucciones de las especificaciones publicadas en http://www.asprs.org/a/society/committees/lidar/LAS_1-4_R6.pdf.

Es complejo, pero no imposible. Hemos utilizado para nuestro proyecto Visual Basic 6 por varios motivos. Somos poseedores de una licencia, se conecta muy bien en güindous y cierra el programa. Cada módulo será un archivo .ocx que se incorpora fácilmente en programas más grandes.

After making several programs with the theme LIDAR, we started to create the final program. So we've begun to modulate the program. We have divided the problem in several different problems. The resolution of each problem is a different module.

Solutions to search:

1st Reading LIDAR file format. .las
Display 2nd floor and dialogue with it. We climbed to place a summary of the ground and also to extract coordinates of this object.
Viewing 3rd projections and / or 3D. Extracting data from it.

LIDAR File reading is done following the instructions of the published specifications http://www.asprs.org/a/society/committees/lidar/LAS_1-4_R6.pdf.

It's complicated, but not impossible. We have used for our project Visual Basic 6 for several reasons. We are holders of a license, it connects fine in "Güindous" and closes the program. Each module is a file. OCX that is readily incorporated into larger programs.

El primer módulo, P_LIDAR.ocx. Visualizando la Planta General.

The first module, P_LIDAR.ocx. Viewing General Plant.

El aspecto externo es este:
The external appearance is this:



Con las funciones y subrutinas siguientes:
With the  following functions and subroutines:

Sub DameDir(Directorio)  → Lee y pinta todos los archivos las de un directorio completo.
Sub DameArchivo(Archivo)  → Lee y pinta un Archivo
Sub ColorFondo(Color)  → asigna un color de fondo. Por defecto es amarillo pálido.

La nueva versión la subiremos en breve

.... Continuará

Funciones Val_x(), Val_y()
         → Nos devenven los valores donde se pinchara por última vez en el objeto.

Funciones Max_x(), Max_y(), Max_z(), Min_x(), Min_y(), Min_z() 
         → devuelven los valores máximos y mínimos de contorno.

Función MaxN(NumMax)
         → asigna el maimo valor de puntos representados. Por defecto este número es de 20.000.

Con el evento siguiente:
DondePincha (Boton, Mayus, X, Y, UTMx, UTMy)  → Al hacer click en el objeto tendremos acceso a conocer que botón fue pinchado, si lo fue con las mayúsculas y la posición relativa (x,y) o absoluta (UTMx, UTMy). Esto último nos permitirá vincularlo a otros objetos.

Sub DameDir (Directory) → Lee and paint all .las files in an entire directory.
Sub DameArchivo (Archive) → Lee and paints a File
Sub backgroundColor (Color) → assigns a background color. Default is pale yellow.

Val_x functions () Val_y ()
          → We return the values ​​which punctured last in the object.

Max_X Functions (), y_max (), max_z (), x_min (), y_min (), MIN_Z ()
          → return the maximum and minimum values ​​of contour.

MaxN Function (maxnum)
          → maimo assigned point value represented. By default this number is 20,000.

With the next event:
DondePincha (Button, Shift, X, Y, utmx, UTMY) → By clicking on the object will have access to know which button was tapped, if it was with .las case and the relative position (x, y) or absolute (utmx, UTMY). The latter will allow us to link it to other objects.

Descargable desde aqui.
Download here.

Mi amigo Miguel E. me pidió que modificara el código para que el Norte estuviera siempre arriba (perdón por el error) y que además no parara de leer un archivo al sobrepasar los 2GB. El problema del segundo caso es la utilización por el entorno directo de programación de Windows que limita en el valor del entero máximo (tipo Long) como Int32. Es decir 2³¹ = 2.1471483.648 = 2GB. Al cambiar el sistema a la lectura utilizando las dlls directas del kernel es posible es utilizar el siguiente tipo de entero Int64 que eleva al utimo byte leible a 2⁶³ = 183446.7442073.7091551.616. Siguiendo los sufigos disponibles 181446.744TB ó 18.446PB (petabyte) ó 18EB (exabyte). Si tiene curiosidad por saber cómo se hace contacte con nosotros.

Si bien algunos archivos LIDAR sobrepasan los 2 GB no se nos van a dar casos tan exagerados. Por tanto la solución cierra el problemas del tamaño.

My friend Miguel E. asked me to modify the code so that the North was always up (sorry for the error) and also do not stop to read a file to exceed 2GB. The second problem is the use case for the direct environment of Windows programming that limits the maximum integer value (type Long) as Int32. That is 2 ³ ¹ = 2.1471483.648 = 2GB. By changing the reading system using kernel direct dlls is possible is to use the following integer type Int64 that elevates the latter one byte readable to 2 ⁶ ³ = 183446.7442073.7091551.616. Following the sufigos available 181446.744TB or 18.446PB (petabyte) or 18EB (exabyte). If you're curious about how to make contact with us.

While some LIDAR files exceed 2GB not going to give us so exaggerated cases. The solution thus closes the size problems.

Una nueva versión:

A new version:

El nuevo módulo OCX para LIDAR contiene las siguientes propiedades y métodos

.SeaDir "Diectorio de lectura" Sólo establece el directorio de trabajo. Serán leídos todos los archivos .las contenidos

.CentroX_ = valor de la coordenada X. Establece en centro de visualización del archivo
.CentroY_ = valor de la coordenada Y. Ídem.
cota = .CentroZ_ Devuelve el valor más probable de la cota en las coordenadas (X,Y). SÓLO DISPONIBLE DESPUÉS DE REALIZAR EL DIBUJO.

.LadoCorto = Establece uno de los lados del paralepípedo de selección (10m. por defecto)
.LadoLargo = El otro lado (30m. por defecto)
.Avance = Distancia siguiente en la dirección del ratón. (10m. por defecto)

.PintaSeccion = Empieza a trabajar.
.Para = true/false establece la interrupción de la lectura

Con estos datos el aspecto es éste:

The new LIDAR OCX module contains the following properties and methods

. SeaDir "Diectorio reading" only sets the working directory. Will read all .las Content

. CentroX_ = X coordinate value Set file display center
. CentroY_ = Y coordinate value Ditto.
height =. CentroZ_ Returns the most probable value of the elevation at the coordinates (X, Y). AVAILABLE ONLY AFTER MAKING THE DRAWING.

. LadoCorto = Set one side of the parallelepiped selection (10m. default)
. LadoLargo = The other side (default 30m.)
. Avance = Distance next in the direction of the mouse. (10m. default)

. PintaSeccion = starts working.
. Para = true / false establishes interrupt reading

With these data, the issue is this:



Datos de partida:

.LadoCorto = 20
.LadoLargo = 14 -> Recuadro azul.
.Avance = 10 -> línea amarilla.


A partir de aquí podemos hacer peticiones al módulo OCX.

Uno de sus métodos es:

_DondePincha (ByVal Button as IntegerByVal Shift as IntegerByVal x as SingleByVal y as SingleByVal UTMx as DoubleByVal UTMy as DoubleByVal PROPx as DoubleByVal PROPy as Double)

Button: botón derecho/izquierdo
Shift: Pulsado al tiempo control/mayúsculas/nada
x,y : coordenadas relativas
UTMx, UTMy: coordenadas absolutas del puntero (ratón)
PROPx, PROPy: coordenadas del punto rojo (a la distancia definida en .Avance, en nuestro caso 10m.)

Dentro de esta subrutina se puede, por ejemplo, modificar el centro de forma sencilla de la siguiente manera:

.CentroX_ = UTMx ó PROPx
.CentroY_ UTMy ó PROPy
.PintaSeccion

.GuardaRecuadroExterior "nombre del archivo de destino"
Guarda en coordenadas absolutas en un archivo ascii .xyz con el orden xyziRGB el conjunto del borde exterior.

Input data:

. LadoCorto = 20
. LadoLargo = 14 -> Blue Box.
. Avancet = 10 -> yellow line.


From here we can make queries to the module OCX.

One of his methods is:

_DondePincha (ByVal Button as IntegerByVal Shift as IntegerByVal x as SingleByVal y as SingleByVal UTMx as DoubleByVal UTMy as DoubleByVal PROPx as DoubleByVal PROPy as Double)


Button: Right / left
Shift: Pulsed time control / shift / no
x, y: coordinates relative
Utmx, UTMY: absolute coordinate of the pointer (mouse)
Propx, PROPy: red point coordinates (a defined distance. Avance 10m in our case.)

This subroutine can, for example, modifying the center simple way as follows:

. CentroX_ = utmx or propx
. CentroY_ = UTMY or PROPy
. PintaSeccion

. GuardaRecuadroExterior "destination filename"
Save in absolute coordinates in ascii file. Xyz with xyziRGB order the entire outer edge.


Visualización del extracto con FrugoViewer
Viewing the extract with FrugoViewer

.GuardaRecuadroInterior "nombre del archivo de destino"
Idem pero relativo al trozo comprendido en el recuadro azul. En coordenadas absolutas.

. GuardaRecuadroInterior "destination filename"
Idem but on the piece within the blue box. In absolute coordinates.


Visualización del extracto con FrugoViewer
Viewing the extract with FrugoViewer

.GuardaRecuadroInteriorRel "nombre del archivo de destino"
Idem pero relativo al trozo comprendido en el recuadro azul. En coordenadas relativas.

. GuardaRecuadroInteriorRel "destination filename"
Idem but on the piece within the blue box. In relative coordinates.

Visualización del extracto con FrugoViewer
Viewing the extract with FrugoViewer
El fichero tiene esta forma:
The file is:

            4.41710 6.98247 59.83 27 70 57 66 
            4.39831 6.95703 59.83 27 72 59 68 
            4.36560 6.93402 59.83 31 65 52 61 
            4.45072 6.96944 59.83 28 68 55 64 
            4.43193 6.94400 59.83 29 71 58 67 
            4.39921 6.92099 59.83 36 69 56 65 
            4.38043 6.89555 59.83 27 67 54 63 
            [...]

A partir de aquí seguir con las proyecciones, crear el fichero eje es lógicamente trabajoso, son muy grandes los ficheros pero es totalmente factible.

Es recomendable tener los grandes ficheros partidos en cuadraditos (véase apartadohttp://carreteras-laser-escaner.blogspot.com.es/p/dividir-en-cuadritos-un-archivo-las.html)

También conviene ver el apartado: http://carreteras-laser-escaner.blogspot.com.es/ 2012/ 12/ division en perfiles transversales.html

From here continue to projections, create the file is logically laborious axis, are very large files but it's totally doable.

It is advisable to have large files into small squares parties (see section http://carreteras-laser-escaner.blogspot.com.es/p/dividir-en-cuadritos-un-archivo-las.html)

It should also see: http://carreteras-laser-escaner.blogspot.com.es/ 2012/ 12/ division en perfiles transversales.html

Resultado final de la proyecciones.
Final outcome of the projections.

Más datos. Si hacemos ,

cota = PGeneral.CentroZ_, tendremos en cota la cota más probable del punto central.

a = PGeneral.RinconX_, b = PGeneral.RinconY_,
          obtendremos las parejas {(a(0),b(0))..(a(3),b(3))} coordenadas absolutas de lasesquinas de cuadrilátero interno.

MX = PGeneral.X_, MY = PGeneral.Y_, MZ = PGeneral.RinconZ_,
            obtendremos las coordenadas de los puntos del recuadro exterior {(MX(0), MY(0), MZ(0))..(MX(n), MY(n), MZ(n))}

donde n = PGeneral.NumeroPuntos.

Otras matrices son Color=PGeneral.C_ donde Color(j) corresponderá al color del punto (MX(j), MY(j), MZ(j))

Otras matrices son Intensidad=PGeneral.I_ donde Intensidad(j) corresponderá la intensidad del punto (MX(j), MY(j), MZ(j))

Módulo descargable desde aquí

Con esta herramientas hemos creado el siguiente programa:

More details. If we do,


cota = PGeneral.CentroZ_, we will most likely bound the dimension of the center point.

a = PGeneral.RinconX_, b = PGeneral.RinconY_,
           couples obtain {(a (0), b (0)) .. (a (3), b (3))} lasesquinas absolute coordinates of inner ring.

MX=PGeneral.X_, MX = MY = PGeneral.Y_, MZ = PGeneral.Z_,
             obtain the coordinates of the points of the outer box {(MX (0), MY (0), MZ (0)) .. (MX (n), MY (n), MZ (n))}

where n = PGeneral.NumeroPuntos.

Other matrices are Color=PGeneral.C_ where Color = Color (j) corresponds to the color point (MX (j), MY (j), MZ (j))
Intensida=PGeneral.I_ where Intensidad = Intensity (j) correspond intensity point (MX (j), MY (j), MZ (j))

Module downloaded from here

With this tool we have created the following program:


Con un módulo PGeneral creamos un visión general de la carretera y nos posicionamos en un punto.
With a module PGeneral create an overview of the road and positioned ourselves at one point.

Después de posicionarnos pasamos al detalle en donde exportaremos la selección interna
After we position ourselves to detail where internal selection will export
Dicha selección interna podremos proyectarla en planta, frontal y laterales
Such internal selection can project it on top, front and side

Con nuestro otro programa ANPE podremos rescatar el fichero exportado y visualizarlo en 3D
With our other program ANPE can rescue the exported file and view it in 3D






domingo, 5 de enero de 2014

Can you do something with the study of slopes and the laser scanner? / ¿Se puede hacer algo con el estudio de taludes y el láser escáner?

Esta fue una de las preguntas que nos hicimos en ENMACOSA. Por un lado tenemos un equipo especialista cualificado y con experiencia en la técnicas del láser escáner (véase noticia en: DRON.html). Por otro lado contamos con un equipo de geología y geotecnia, también, con una amplia experiencia. Resultaba lógico plantearse si ambos equipos podrían trabajar juntos teniendo el láser escáner como nexo de unión.

La siguiente pregunta duda sería ¿Cómo hacerlo?. Nos pusimos manos a la obra y decidimos partir del escaneado de un talud real. La idea era dividir el problema en dos. La primera parte del problema sería la realización de un programa del que, partiendo de los datos del láser escáner, se pudieran obtener las entidades geotécnicas necesarias para un posterior estudio. La segunda parte sería comprobar la bondad del sistema partiendo del sistema tradicional. Después se compararían resultados, se depuraría y optimizaría el programa. Por último, la sempiterna pelea económica, se compararían costes y se evaluaría en qué condiciones se debería realizar el estudio tradicional y en qué casos se debería utilizar el láser escáner.

This was one of the questions we asked ourselves in Enmacosa. On the one hand we have a qualified and experienced in the techniques of laser scanner specialist team (please, see: DRON.html). On the other hand we have too a team of geology and geotechnics with extensive experience. It was logical to ask whether both teams could work together taking the laser scanner as a link.

The next question would certainly be How to do it. We got to work and decided to scan from a real slope. The idea was to divide the problem into two. The first part of the problem would be the performing a program that, starting from laser scanner data, we could obtain the necessary geotechnical entities for further study. The second part would be to check the goodness of the system from the traditional system. After results would be compared, it would debug and optimize the program. Finally, the eternal economic fight, costs would be compared and assessed in what conditions should make the traditional study and in what cases should use the laser scanner.

Primera parte: la realización del programa / First part: implementing the program

- Buscando un plano con tres puntos / Looking for one plane with three points

Tomado un talud recuperamos su información con nuestro programa del proyecto SITEGI. Tras su primera lectura nos pusimos a pensar qué es lo que podríamos hacer:

Taken a slope recover your information with our program SITEGI project. After its first reading we started to think about what we could do:

Aquí buscamos puntos en una zona de 10 x 10 metros
Were we here seek points in an area of 10 x 10 meters

Tenemos que buscar la manera de seleccionar un plano. Para ello la primera opción fue la de elegir tres puntos y ver que plano formará desde la sección de detalle:

We have to find a way to select a plane. To do the first option was to choose three points and see that plane formed from the detail section:

Aquí creamos una forma de seleccionar 3 puntos
Selecting 3 points
En 3D se verá de esta manera:
3D will look like this:

Y aquí tenemos el triángulo visto por la sección de nuestro programa de visualización 3D
And here we have seen the triangle section of our 3D visualization software
También pensamos en usar la parte de nuestra aplicación dedicada a la proyección diédrica:
We also believe in using part of our application dedicated to the dihedral projection:

Seleccionando 3 puntos desde las proyecciones en diédrica
Selecting 3 points
Bién, hasta aquí, hemos podido escoger 3 puntos para ver planos en lugar de subirnos al monte. Pero..., con todos los puntos ¿no se puede hacer más?

Esta idea de los tres puntos tenía sólo la ventaja de la facilidad de identificar sólo tres puntos característicos y tratar sólo con un dato. El problema que vimos es que no tenemos estadísticas, depende de la habilidad en acertar y desaprovechamos los miles o millones de puntos de que disponemos con el láser escáner

Also, so far, we could choose 3 items to see planes rather than climb the mountain. But ... with all the right points you can do more?

This idea of the three points was only the advantage of ease of identifying only three characteristic points and deal only with data. The problem I saw is that there are no statistics, depends on the ability to match and we miss the thousands or millions of points that we have with the laser scanner

- Buscando una colección de planos partiendo de un conjunto de puntos
- Looking for a collection of planes based on a set of points

La siguiente idea fue la de seleccionar un punto y un número de puntos cercanos. Con ellos hacer una triangulación (Delaunay, ver: http://en.wikipedia.org/wiki/Delaunay_triangulation)  y con esa triangulación  realizar el estudio geológico:

The next idea was to select a point and a number of nearby points. With them make a triangulation (Delaunay, see: http://en.wikipedia.org/wiki/Delaunay_triangulation)  and with that triangulation perform Geological Survey:

Escogidos 100 puntos se realiza la triangulación.
Chosen 100 points, the triangulation is performed
En 3D, la veríamos así:
In 3D, we would see this:



Pero ¿se puede hacer un estudio geológico de rumbos y buzamientos? Pues.. sí:
Con líneas de buzamiento, polos y todo en un diagrama de Schmith:

But Can you make a geological survey of directions and dips? Well .. yes:
With dip lines, poles and all in a diagram Schmith:



Y promedios. Todo listo para la realización de informes:
And averages. All set for the completion of reports:


Para saber más, a propósito de Schmidt :
http://mathematical-drifts.blogspot.com.es/2014/07/dip-direction-and-schmidts.html
To learn more about Schmidt:
http://mathematical-drifts.blogspot.com.es/2014/07/dip-direction-and-schmidts.html

Buscando los puntos directamente en el 3D / Looking for straight points in 3D

El siguiente paso, claro está es conseguir la colección de puntos directamente desde el dibujo 3D. Los pasos son:
-Marcar los puntos:

The next step, of course is to get the collection of points directly from the 3D drawing. The steps are:
-Mark points:



Los puntos marcados quedan en color blanco. El siguiente paso es:
- Trasponer los puntos seleccionados a la zona de estudio geotécnico.

The points are marked in white. The next step is:
- Transposing the selected points to the area of geotechnical study.



Se puede comprobar que tal triangulación se corresponde con una zona seleccionada del talud:
One can check that such triangulation corresponds to a selected area of the slope:


A partir de aquí las opciones son las mismas para cualquiera de las formas de obtener la triangulación.
1.- Se puede exportar a obj (entidad compatible con 3dStudio)
From here the options are the same for any of the ways to get the triangulation.
. 1 - You can export to obj (entity support 3dStudio)


Extracto del talud en formato OBJ visto con MeshLab
Extracto del talud en formato OBJ visto con MeshLab
2.- Se puede exportar a dxf (compatible con AutoCad)
3.- El más importante. Se pueden calcular los buzamientos y rumbos de cada triángulo y asignarle el peso (si se quiere) correspondiente al área de cada triángulo:

. 2 - You can export to dxf (compatible with AutoCad)
. 3 - The most important. Can be calculated dips and directions of each triangle and assign the weight (if you will) of the area of ​​each triangle:


También podemos asignarle las zonas de probabilidad según los rumbos y buzamientos calculados:
We can also assign probability areas calculated according to the directions and dips:




Por supuesto, ya que tenemos realizado un sistema de caracterización de color falso en el apartado de termografías aplicamos las mismas técnicas de programación de falso color para las ponderaciones de probabilidad.

También podemos insertarle buzamientos y rumbos fijos para delimitar el promedio y sistemas de futuros cálculos:

Of course, since I have done a characterization system false color in the thermal images section, we apply the same programming techniques for false color probability weights.

We can also insert you dips and fixed paths to define the average estimates of future systems:




Después de todo esto la respuesta a la pregunta: ¿Se puede hacer algo con el estudio de taludes y el láser escáner? la respuesta es sí.

After all this, the answer to the question: Can you do something with the study of slopes and the laser scanner? It is yes.