Más

5.5 Sismic Reflection Jupyter Notebook - Geociencias


Instrucciones

  • Para usar esta página, lea el texto entre cada una de las ventanas de código de Python, luego presione EJECUTAR para ejecutar el código en el cuadro.
  • Es necesario ejecutar cada una de las cajas en orden.
  • No haga clic en reiniciar en las celdas a menos que vuelva a la parte superior de la página y comience de nuevo.
  • Si modifica el código, esta modificación no permanecerá después de que salga o actualice esta página.
  • Debe ejecutar simulaciones / celdas que requieran la participación del usuario hasta su finalización. Asegúrese de ver el mensaje que le informa que una celda está completa antes de continuar con la siguiente celda. He aquí por qué debe hacer esto:
    • Es posible que estas celdas no se vuelvan a ejecutar hasta que se complete la simulación; de lo contrario, no se generarán resultados.
    • Todas las celdas siguientes no se ejecutarán hasta que se complete la celda de entrada del usuario.
  • Para menús desplegables: no es necesario volver a ejecutar las celdas con el menú para cambiar su selección. Sin embargo, debe volver a ejecutar todas las celdas siguientes para implementar el cambio.

Tenga paciencia, algunas veces puede tomar de 1 a 2 minutos para que se inicie el kernel juypter.

Un ejemplo interactivo de reflexión sísmica de una sola capa.

Preguntas clave: Considérelos a medida que avanza en esta página.

  • ¿Las ondas con ángulos de incidencia mayores o menores viajan más lejos?
  • Compare los dos segmentos de las distintas trayectorias de rayos entre sí: ¿en qué se parecen o en qué se diferencian?
  • ¿El espaciado del punto de rebote depende del grosor de la capa? ¿Por qué o por qué no?

Primero, importemos las bibliotecas necesarias.

Ahora creemos nuestro modelo de 1 capa. Esta celda le pedirá que elija un grosor de capa y el espaciado entre receptores, y luego trazará su modelo. Matemáticamente, este modelo se crea seleccionando las ubicaciones del receptor y calculando los ángulos de incidencia requeridos para lograr esas ubicaciones dado el grosor de la capa.

Preguntas clave: Considérelos a medida que avanza en esta página.

  • ¿Las ondas con ángulos de incidencia mayores o menores viajan más lejos?
  • Compare los dos segmentos de las distintas trayectorias de rayos entre sí: ¿en qué se parecen o en qué se diferencian?
  • ¿El espaciado del punto de rebote depende del grosor de la capa? ¿Por qué o por qué no?

MyCarta

Hace entre 2 y 3 años comencé a convertir mi pasión por el procesamiento de imágenes, y particularmente el procesamiento de imágenes morfológicas, en la tarea de la segmentación de fallas.

En ese momento compartí mi código preliminar, del cual estaba muy feliz, en un cuaderno de Jupyter, que puede ejecutar de forma interactiva en este repositorio de GitHub.

Hay dos áreas que necesitan mejoras para acercar ese flujo de trabajo inicial al de producción. El primero está en el lado del procesamiento de imágenes y la morfología que estoy pensando incluir: una mejor manera de limpiar fallas muy cortas, poda para eliminar segmentos espurios en el resultado de esqueletización: la distribución de von Mises en lugar de la distribución estándar para filtrar ángulos de inmersión bajos. Sé cómo mejorar todos esos aspectos y tengo algunos fragmentos de código en varias ubicaciones de mi Mac, pero no estoy listo para presionar por ello.

La segunda área, en el lado sísmico, es la capacidad para trabajar con datos 3D. Este ha sido un punto delicado durante algún tiempo.

Ingrese segyio, una biblioteca rápida de código abierto, desarrollada precisamente para trabajar con archivos SEGY. Para ser justos, segyio ha existido durante algún tiempo, como muy bien sé por ser miembro de la comunidad de Software Underground (balanceo), pero fue hace solo un mes que comencé a retocarlo.

Esta publicación es principalmente para compartir con la comunidad lo que aprendí en mi primera sesión en el patio de recreo (con algunos consejos muy útiles de Jørgen Kvalsvik, un miembro de balanceo, y uno de los creadores de segyio), lo que me permitió crear un volumen de segmentación de fallas en 3D (y divertirme mucho en el proceso) a partir de un volumen de similitud (o discontinuidad).

El flujo de trabajo, que puede ejecutar de forma interactiva en este repositorio de GitHub segyio-notebooks (busque el tutorial básico 01 & # 8211) se resume gráficamente en la Figura 1 y comprende los pasos a continuación:

  • use segy-io para importar dos volúmenes sísmicos en formato de archivo SEGY desde el conjunto de datos F3, costa afuera de los Países Bajos, con licencia CC-BY-SA: un volumen de similitud y un volumen de amplitud (con suavizado de filtro mediano dirigido por inmersión aplicado)
  • manipular la similitud para crear una discontinuidad / volumen de fallas
  • crear una máscara de falla y mostrar un par de segmentos de tiempo de amplitud con fallas superpuestas
  • escriba el volumen de falla en el archivo SEGY usando segy-io, reutilizando los encabezados del archivo de entrada

Figura 1. Flujo de trabajo de segmentación de fallas sísmicas 3D ingenuo en Python.

Obtenga los cuadernos en GitHub (busque el tutorial básico 01 y # 8211)

DESCARGO DE RESPONSABILIDAD: Los pasos descritos en el tutorial no están pensados ​​como un flujo de trabajo de segmentación de fallas de calidad de producción. Funcionan razonablemente bien en el volumen de similitud pequeño y limpio, ingeniosamente seleccionado para la ocasión, pero es solo un ejemplo simple.


Notas de la reunión

Notas de las reuniones de Fatiando: decisiones tomadas por el grupo, discusiones, actualizaciones, etc.

Verde

Procesar e interpolar datos espaciales con un toque de aprendizaje automático

Transform2020-rayo

Cuadernos y diapositivas mostrados en las charlas relámpago TRANSFORM2020

Perro

Un amigo para buscar sus archivos de datos.

Datos-rockhound

Un lugar para formatear datos para consumo de RockHound

Harmónica

Reenvío de modelado, inversión y procesamiento de datos magnéticos y de gravedad

Petanca

Elipsoides de referencia para cálculos de geodesia, geofísica y coordenadas

2021-gsh

Charla sobre Fatiando para la Sociedad Geofísica de Houston

Archivos fuente para los logotipos de Fatiando a Terra

Egu2021

Presentación enviada a EGU2021 sobre Boule y Armónica

Transform21

Material para el tutorial de armónica en Transform21

.github

Plantillas para problemas y solicitudes de extracción compartidas entre nuestros proyectos

Erizo

Interpolación elástica multicomponente de desplazamiento de tierra GPS / GNSS.

Sabueso

Descargue modelos / conjuntos de datos geofísicos y cárguelos en Python

Contribuyendo

Directrices e instrucciones para contribuir a Fatiando a Terra, incluidas las políticas de autoría, el mantenimiento y el código de conducta

Fatiando.github.io

Fuentes HTML para fatiando.org. NO HAGA SOLICITUDES DE TRACCIÓN AQUÍ. Los archivos se actualizan manualmente cuando se realiza una nueva versión.

Sitio web

Fuente Sphinx utilizada para generar la página www.fatiando.org

Fatiando

Kit de herramientas de Python para modelado e inversión en geofísica. DEPRECADO a favor de nuestras bibliotecas más nuevas (ver www.fatiando.org)

Integración continua

Scripts para administrar servicios de integración continua: entornos de configuración, implementación de artefactos de construcción, etc.

Mantenimiento

Realizar un seguimiento de las tareas de mantenimiento para los repositorios de Fatiando a través de problemas

Transform2020

Material para el tutorial de Verde en Transform 2020

Wavefd

Propagación de ondas sísmicas de diferencia finita 2D

Paquete-plantilla

Una plantilla de cortador de galletas para crear nuevos paquetes Fatiando

Mirada profunda

Un marco para resolver problemas inversos

Moldeador

Modelado interactivo 2D de gravedad hacia adelante.

Dev Archivado

Aloja la compilación de desarrollo de la documentación. NO EDITAR DIRECTAMENTE. Las confirmaciones son enviadas por TravisCI desde el repositorio fatiando / fatiando.

Pegatina

Archivos fuente para las pegatinas de Fatiando a Terra

Geométrico Archivado

Estudio de caso para eliminar fatiando.mesher en un nuevo paquete

V0.5 Archivado

Documentación para v0.5 construida con sphinx. Aloja los archivos HTML generados.

V0.4 Archivado

Documentación para v0.4 construida con sphinx. Aloja los archivos HTML generados.

Idiomas principales

Temas más utilizados

Gente

No puede realizar esa acción en este momento.

Accediste con otra pestaña o ventana. Vuelva a cargar para actualizar su sesión. Cerró sesión en otra pestaña o ventana. Vuelva a cargar para actualizar su sesión.


Quemando la superficie sobre el subsuelo

Anteriormente, describí algunas de las razones por las que no obtenemos un evento de superficie terrestre limpia en los datos sísmicos terrestres como lo hacemos con el fondo del agua en la sísmica marina. En los datos terrestres, la peor parte de la imagen está justo en la superficie. Pero el nivel del suelo no solo es difícil de ver, es imposible de ver. Dado que el camión de vibraciones está en el suelo, no hay reflejo en esa superficie. Incluso si hubo algún tipo de evento allí, los procesadores aplican un borrador mágico en la parte superior de la sección, el silencio, para borrar las primeras llegadas. Por lo tanto, no es posible ver el suelo en los datos terrestres y no puede elegir lo que no está allí.

Pero todavía quiero saber dónde está el suelo. ¿Por qué no podemos colocar un evento de 'reflexión' sísmica a nivel del suelo en la sección?

Que necesitas

Necesitamos el nivel del suelo, que está en profundidad, por supuesto, en el dominio del tiempo de la sección sísmica. Para calcular esto, llamémoslo (t_ mathrm), necesitamos tres piezas de información en cada ubicación de rastreo: el elevación del suelo (G ), el datum de referencia sísmica (SRD) que llamaré (D ), y el velocidad de reemplazo (V_ mathrm).

Elevación del suelo. Si tiene suerte, podrá encontrar la elevación del suelo correspondiente a cada traza almacenada en los encabezados de trazas. La elevación del suelo puede estar ubicada en los bytes 41-44 o 45-48 del encabezado de seguimiento, que corresponden al elevación del grupo receptor y el elevación de la superficie de la fuente, respectivamente. Estos deberían ser los mismos para un seguimiento apilado, pero al igual que con cualquier metadato relacionado con SEGY, esta información podría estar escondida en otro lugar o faltar por completo. Y si tiene tanta mala suerte, es posible que deba revisar los informes de procesamiento en busca de la información que falta. Si tiene aún más mala suerte (como yo tuve en este ejemplo), no tendrá ningún tipo de informe de procesamiento al que recurrir y tendrá que inventar algo más. En el acompañamiento Cuaderno Jupyter, Recurrí a interpolar un perfil de elevación digitalizado de un gráfico JPEG de la línea sísmica. Entonces, si no tiene opciones, ¡puede encontrar refugio en esas parcelas heredadas!

Este perfil es particularmente inestable, porque el datum de referencia sísmica (rojo) no es el mismo en todo el perfil.

Datum de referencia sísmica. Y para hacer la vida aún más complicada, el datum de referencia sísmica no es plano en todo el perfil. Va cuesta abajo y luego se aplana (línea roja abajo). No me pregunte cuáles son las ventajas de procesar datos a un datum variable, pero sean lo que sean, espero que compensen las desventajas de confundir fácilmente el datum con plano.

La velocidad de reemplazo se proporciona en la etiqueta lateral de la imagen rasterizada en línea (que se muestra a la derecha). Son 10000 pies / seg, o 3048 m / s.

Las ubicaciones de bytes 53-56 y 57-60 son los marcadores de posición de encabezado de seguimiento estándar reservados para elevación del datum en el grupo receptor y el elevación del datum en la fuente. Nuevamente, para un seguimiento apilado, estos deben tener el mismo valor. Si estos campos son ceros, verifique los campos de la extensión de encabezado de seguimiento. Si aparecen vacíos, y si el datum es horizontal, podría aparecer en el encabezado de texto del archivo.

Convertir elevación en tiempo

Por definición, el datum de referencia sísmica es horizontal en el dominio del tiempo (línea roja abajo). Observe cómo la elevación del suelo, en el dominio del tiempo, se traza principalmente como valores negativos (antes) del tiempo cero. En otras palabras, la parte superior de la sección corta la mayor parte del terreno. Entonces, si queremos verlo, debemos cambiar todo hacia el campo de visión. Conceptualmente, esto significa ajustar el datum de referencia sísmica para que flote completamente por encima del nivel del suelo. Computacionalmente, podemos lograr esto fácilmente rellenando la parte superior de los datos con ceros.

Una representación en el dominio del tiempo del nivel del suelo a lo largo del perfil sísmico. La superficie de la tierra se extiende por encima del inicio de los datos sísmicos para la mayoría de las ubicaciones a lo largo del perfil.

Haz del suelo un evento elegible

Como última parte del posprocesamiento, podríamos quemar el nivel del suelo en los datos como una especie de evento sísmico sintético. La razón por la que me gusta este concepto es que alivia la necesidad de desenterrar informes de procesamiento antiguo, resolver dudas sobre los datos de encabezado que faltan o, lo que es peor, mantener y modificar archivos de texto externos que contienen información de elevación. Yo digo, hagámoslo autónomo. Pongámoslo directamente en los datos para que pueda tratarse como cualquier otro reflejo sísmico. ¿Por qué haría esto?

  • Puede ver dónde puede haber pliegues, velocidad u otros problemas relacionados con la topografía.
  • Puede ver inmediatamente la polaridad de los datos.
  • Puede usar el ancho de banda de los datos para hacer el pseudorreflector, dando una pista visual al intérprete.
  • Hacer un seguimiento de los ajustes de amplitud y las rotaciones de fase sería autodocumentado y reversible.
  • podría realizar un seguimiento automático para obtener un mapa topográfico (o simplemente obtenerlo del procesador).
  • ¡Se ve genial!

Perfil sísmico con rasante SINTÉTICAMENTE INCLINADO EN LA PARTE SUPERIOR. Bandlimited, por supuesto, para que pueda realizar un seguimiento automático hasta que se sienta satisfecho.

He construido deliberadamente un reflejo de banda limitada, opuesto a colocar un pico afilado a nivel del suelo. El problema con un pico es que tiene un ancho de banda infinito. Contiene frecuencias más altas que la imagen, por lo que, como comentó Carl Reine en la última publicación, es posible que eso no funcione bien con los atributos sísmicos. Además, existe el problema de seleccionar un valor de amplitud para asignar al pico: no queremos introducir amplitudes que estén ridículamente fuera del rango de los datos existentes.

Toda la imagen

Por la presente propongo que este truco sintético a nivel del suelo se adopte como el nuevo estándar para cualquier procesamiento e interpretación sísmica terrestre. Lo bueno es que lo pueden hacer los intérpretes y los tecnólogos de datos sísmicos con la misma facilidad que las empresas procesadoras que crean el resto de la imagen. Me doy cuenta de que estamos agregando cosas a los datos que en realidad no son señales. Hacemos cosas no reales con las señales todo el tiempo. La pregunta es, ¿los beneficios superan la artificialidad?

Aquí está la vista de toda la sección:

Todo el tramo, a nivel del suelo incluido.

Los detalles de este ejercicio se pueden encontrar en este Jupyter Notebook.

La sísmica es la línea 36_77_PR del depósito de datos del USGS.

Formato de intercambio de datos SEG Y rev 2. Comité de Normas Técnicas de la SEG. Borrador 2.0, enero de 2015.


Una oportunidad para lograr un impacto significativo: ¡únase a nosotros!

Los impactos del cambio climático y la necesidad de una gestión de los recursos basada en datos son algunos de los desafíos más críticos y complejos que enfrenta la sociedad en la actualidad. En los últimos años, hemos experimentado graves sequías en California y nos encontramos en medio de una crisis de gestión del agua en el Valle Central, mientras que devastadores incendios forestales han destruido comunidades enteras. A través de esta asociación entre investigadores y desarrolladores de Jupyter, esperamos contribuir al avance de soluciones basadas en la ciencia a estos desafíos, tanto contribuyendo directamente a la investigación como mejorando el ecosistema abierto de herramientas disponibles para los investigadores y las partes interesadas afectadas por estos problemas. .

Si el desarrollo de tecnología de código abierto para avanzar en la investigación en geociencias y más allá le entusiasma, ¡póngase en contacto! En UC Berkeley, contrataremos en 2 posiciones: una posición de desarrollo de operaciones centrada en JupyterHub y despliegues de infraestructura compartida, y una función orientada a JupyterLab centrada en extensiones, paneles e interactividad. También se abrirá un puesto en NCAR para un ingeniero de software con el objetivo de mejorar la experiencia del usuario de los flujos de trabajo de Xarray y Dask.

Incluso si no está buscando un nuevo trabajo, hay otras formas de involucrarse con las comunidades de Jupyter y Pangeo. Damos la bienvenida a los nuevos participantes a las reuniones semanales de Pangeo (los miércoles alternando entre 4p GMT y 8p GMT) y hay llamadas mensuales a la comunidad de Jupyter, que están abiertas y destinadas a ser accesibles a una amplia audiencia. Fuera de las llamadas, las conversaciones generales de Jupyter ocurren en el discurso de Jupyter y las conversaciones de Pangeo suelen estar en Pangeo GitHub.


Matplotlib.pyplot.imshow¶

Muestra datos como una imagen, es decir, en un ráster regular 2D.

La entrada puede ser datos RGB (A) reales o datos escalares 2D, que se renderizarán como una imagen de pseudocolor. Para mostrar una imagen en escala de grises, configure el mapeo de colores utilizando los parámetros cmap = 'gray', vmin = 0, vmax = 255.

El número de píxeles utilizados para representar una imagen se establece por el tamaño de los ejes y el ppp de la figura. Esto puede dar lugar a artefactos de alias cuando se remuestrea la imagen porque el tamaño de la imagen mostrada generalmente no coincidirá con el tamaño de X (consulte Antialiasing de imagen). El remuestreo se puede controlar mediante el interpolación parámetro y / o rcParams [& quotimage.interpolation & quot] (predeterminado: 'antialiased').

Los datos de la imagen. Las formas de matriz admitidas son:

  • (M, N): una imagen con datos escalares. Los valores se asignan a colores mediante la normalización y un mapa de colores. Ver parámetros norma, cmap, vmin, vmax.
  • (M, N, 3): una imagen con valores RGB (0-1 flotante o 0-255 int).
  • (M, N, 4): una imagen con valores RGBA (0-1 float o 0-255 int), es decir, con transparencia incluida.

Las dos primeras dimensiones (M, N) definen las filas y columnas de la imagen.

Los valores RGB (A) fuera de rango se recortan.

cmap str o mapa de colores, predeterminado: rcParams [& quotimage.cmap & quot] (predeterminado: 'viridis')

La instancia del mapa de colores o el nombre del mapa de colores registrado que se utiliza para asignar datos escalares a colores. Este parámetro se ignora para los datos RGB (A).

norma Normalizar, opcional

La instancia de Normalizar utilizada para escalar datos escalares al rango [0, 1] antes de mapear colores usando cmap. De forma predeterminada, se utiliza una escala lineal que asigna el valor más bajo a 0 y el más alto a 1. Este parámetro se ignora para los datos RGB (A).

La relación de aspecto de los ejes. Este parámetro es particularmente relevante para las imágenes, ya que determina si los píxeles de datos son cuadrados.

Este parámetro es un atajo para llamar explícitamente a Axes.set_aspect. Consulte allí para obtener más detalles.

  • 'igual': garantiza una relación de aspecto de 1. Los píxeles serán cuadrados (a menos que los tamaños de los píxeles se hagan explícitamente no cuadrados en las coordenadas de datos utilizando grado).
  • 'auto': Los ejes se mantienen fijos y el aspecto se ajusta para que los datos quepan en los ejes. En general, esto dará como resultado píxeles no cuadrados.

El método de interpolación utilizado.

Los valores admitidos son 'none', 'antialiased', 'más cercano', 'bilinear', 'bicubic', 'spline16', 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric' , 'catrom', 'gaussiano', 'bessel', 'mitchell', 'sinc', 'lanczos', 'blackman'.

Si interpolación es 'none', entonces no se realiza ninguna interpolación en los backends Agg, ps, pdf y svg. Otros backends retrocederán hasta el "más cercano". Tenga en cuenta que la mayoría de los renderizadores SVG realizan la interpolación en el renderizado y que el método de interpolación predeterminado que implementan puede diferir.

Si interpolación es el 'antialiased' predeterminado, luego se usa la interpolación 'más cercana' si la imagen se muestra en más de un factor de tres (es decir, el número de píxeles de visualización es al menos tres veces el tamaño de la matriz de datos). Si la tasa de muestreo ascendente es menor que 3, o la imagen se muestra de forma reducida, entonces se usa la interpolación 'hanning' para actuar como un filtro anti-aliasing, a menos que la imagen se muestre hacia arriba exactamente en un factor de dos o uno.

Consulte Interpolaciones para imshow para obtener una descripción general de los métodos de interpolación admitidos, y Antialiasing de imagen para una discusión sobre el antialiasing de imagen.

Algunos métodos de interpolación requieren un parámetro de radio adicional, que se puede configurar mediante filterrad. Además, el filtro de cambio de tamaño de la imagen antigrain está controlado por el parámetro filternorm.

alfa flotante o similar a una matriz, opcional

El valor de fusión alfa, entre 0 (transparente) y 1 (opaco). Si alfa es una matriz, los valores de fusión alfa se aplican píxel a píxel, y alfa debe tener la misma forma que X.

vmin, vmax flotador, opcional

Cuando se utilizan datos escalares y no explícitos norma, vmin y vmax definir el rango de datos que cubre el mapa de colores. De forma predeterminada, el mapa de colores cubre el rango de valores completo de los datos proporcionados. Está en desuso para usar vmin/vmax Cuándo norma es dado. Cuando se utilizan datos RGB (A), los parámetros vmin/vmax son ignorados.

Coloque el índice [0, 0] de la matriz en la esquina superior izquierda o inferior izquierda de los ejes. La convención (la predeterminada) 'superior' se usa normalmente para matrices e imágenes.

Tenga en cuenta que el eje vertical apunta hacia arriba para "inferior" pero hacia abajo para "superior".

Consulte el origen y la extensión en el tutorial de imshow para ver ejemplos y una descripción más detallada.

grado flotadores (izquierda, derecha, abajo, arriba), opcional

El cuadro delimitador en coordenadas de datos que llenará la imagen. La imagen se estira individualmente a lo largo de xey para llenar el cuadro.

La extensión predeterminada está determinada por las siguientes condiciones. Los píxeles tienen un tamaño de unidad en coordenadas de datos. Sus centros están en coordenadas enteras, y sus coordenadas centrales van de 0 a columnas-1 horizontalmente y de 0 a filas-1 verticalmente.

Tenga en cuenta que la dirección del eje vertical y, por lo tanto, los valores predeterminados para la parte superior e inferior dependen de origen:

  • Para origen == 'superior' el valor predeterminado es (-0.5, numcols-0.5, numrows-0.5, -0.5).
  • Para origen == 'inferior' el valor predeterminado es (-0.5, numcols-0.5, -0.5, numrows-0.5).

Consulte el origen y la extensión en el tutorial de imshow para ver ejemplos y una descripción más detallada.

filternorm bool, predeterminado: verdadero

Un parámetro para el filtro de cambio de tamaño de la imagen antigrain (consulte la documentación antigrain). Si filternorm está configurado, el filtro normaliza los valores enteros y corrige los errores de redondeo. No hace nada con los valores de punto flotante de origen, solo corrige los números enteros de acuerdo con la regla de 1.0, lo que significa que cualquier suma de pesos de píxeles debe ser igual a 1.0. Entonces, la función de filtro debe producir un gráfico con la forma adecuada.

filterrad float & gt 0, predeterminado: 4.0

El radio de filtro para filtros que tienen un parámetro de radio, es decir, cuando la interpolación es una de: 'sinc', 'lanczos' o 'blackman'.

remuestrear bool, predeterminado: rcParams [& quotimage.resample & quot] (predeterminado: True)

Cuándo Cierto, utilice un método de remuestreo completo. Cuándo Falso, solo vuelva a muestrear cuando la imagen de salida sea más grande que la imagen de entrada.

url str, opcional

Establezca la URL de la AxesImage creada. Consulte Artist.set_url.

Estos parámetros se pasan al constructor del artista AxesImage.

matshow Traza una matriz o una matriz como una imagen.

A no ser que grado se utiliza, los centros de píxeles se ubicarán en coordenadas enteras. En otras palabras: el origen coincidirá con el centro del píxel (0, 0).

Hay dos representaciones comunes para imágenes RGB con un canal alfa:

  • Alfa recto (no asociado): los canales R, G y B representan el color del píxel, sin tener en cuenta su opacidad.
  • Alfa premultiplicado (asociado): los canales R, G y B representan el color del píxel, ajustado para su opacidad por multiplicación.

imshow espera que las imágenes RGB adopten la representación alfa directa (no asociada).

Además de los argumentos descritos anteriormente, esta función puede tomar un datos argumento de palabra clave. Si tal datos Si se da un argumento, cualquier otro argumento también puede ser una cadena s, que se interpreta como datos (a menos que esto genere una excepción).

Objetos pasados ​​como datos debe admitir el acceso a elementos (datos [s]) y pruebas de membresía (s en datos).


El conjunto de datos que usaremos proviene de un ejercicio de clase de la Universidad de Kansas sobre los campos de gas de Hugoton y Panoma. Para obtener más información sobre el origen de los datos, consulte Dubois et al. (2007) y el cuaderno Jupyter que acompaña a este tutorial en http://github.com/seg. & # 911 & # 93

La siguiente parte del código debería darle todo el crédito al autor de este seg wiki http://wiki.seg.org/wiki/Facies_classification_using_machine_learning. Sin embargo, hay dos cambios importantes: en primer lugar, la función sns.pairplot ha cambiado, por lo que el formato correcto debería ser & gt & gt & gt sns.pairplot (feature_vectors, hue = 'Facies'), el segundo es que, dado que usamos redes neuronales, todos los códigos con soporte, la máquina vectorial debe cambiarse a una red neuronal.

El conjunto de datos consta de siete características (cinco mediciones de registros con cable y dos variables indicadoras) y una etiqueta de facies a intervalos de medio pie de profundidad. En terminología de aprendizaje automático, el conjunto de mediciones en cada intervalo de profundidad comprende un vector de característica, cada uno de los cuales está asociado con un clase (el tipo de facies). Usaremos la biblioteca de pandas para cargar los datos en un marco de datos, que proporciona una estructura de datos conveniente para trabajar con datos de registro de pozo.

Podemos usar data.describe () para proporcionar una descripción general rápida de la distribución estadística de los datos de entrenamiento (Tabla 1).

Podemos ver en la fila de conteo en la Tabla 1 que tenemos un total de 3232 vectores de características en el conjunto de datos. Los vectores de características constan de las siguientes variables:

  1. Rayos gamma (GR)
  2. Resistividad (ILD_log10)
  3. Efecto fotoeléctrico (PE)
  4. Diferencia de porosidad de densidad de neutrones (DeltaPHI)
  5. Porosidad media por densidad de neutrones (PHIND)
  6. Indicador no marino / marino (NM_M)
  7. Posición relativa (RELPOS)

Hay nueve clases de facies (numeradas del 1 al 9) identificadas en el conjunto de datos. La Tabla 2 contiene las descripciones asociadas con estas clases. Tenga en cuenta que no todas estas facies son completamente discretas, algunas se mezclan gradualmente entre sí. Se puede esperar que ocurra una clasificación errónea de estas facies vecinas. La columna de facies adyacentes en la Tabla 2 enumera estas clases relacionadas.

Tabla 2. Etiquetas de facies con sus descripciones.
Facies Descripción Etiqueta Facies adyacentes
1 Arenisca no marina SS 2
2 Limolita de curso no marino CSiS 1,3
3 Limolita fina no marina FSiS 2
4 Lutita y lutita marina SiSh 5
5 Mudstone milisegundo 4,6
6 Wackestone WS 5,7,8
7 Dolomita D 6,8
8 Packstone-piedra de grano PD 6,7,9
9 Deflector de algas filoides BS 7,8

Para evaluar la precisión del clasificador, eliminaremos un pozo del conjunto de entrenamiento para poder comparar las etiquetas de facies predichas y reales.

& gt & gt & gt test_well = data [data ['Well Name'] == 'NEWBY']

Extraigamos los vectores de características y las etiquetas de facies asociadas del conjunto de datos de entrenamiento:

& gt & gt & gt features = [‘GR’, ‘ILD_log10’, ‘DeltaPHI’, ‘PHIND’, ‘PE’, ‘NM_M’, ‘RELPOS’]

Los crossplots son una herramienta familiar para visualizar cómo dos propiedades varían con el tipo de roca. Este conjunto de datos contiene cinco mediciones de registros, y podemos emplear la biblioteca seaborn muy útil https://seaborn.pydata.org/ (Waskom et al., 2016) para crear una matriz de diagramas cruzados para visualizar la variación entre las mediciones de registros en el conjunto de datos. & # 912 & # 93

Cada panel de la Figura 1 (página siguiente) muestra la relación entre dos de las variables en los ejes xey, con un diagrama de barras apiladas que muestra la distribución de cada punto a lo largo de la diagonal. Cada punto está coloreado de acuerdo con su facies (consulte el cuaderno de Jupyter asociado con este tutorial para obtener más detalles sobre cómo generar colores para este gráfico). No queda claro a partir de estos diagramas cruzados qué relaciones existen entre las medidas y las etiquetas de facies. Aquí es donde el aprendizaje automático resultará útil.


X líneas de Python: diagrama AVO

El análisis de amplitud frente a desplazamiento (o, más propiamente, ángulo) es un componente central de la interpretación cuantitativa. El método AVO se basa en el hecho de que la reflectividad de una interfaz geológica no depende solo de las propiedades acústicas de la roca (velocidad y densidad) en ambos lados de la interfaz, sino también del ángulo del rayo incidente. Afortunadamente, esta reflectividad angular codifica la información de las propiedades de la roca elástica. En pocas palabras: AVO es increíble.

Como sabrá, soy un gran admirador del modelado avanzado: predecir la respuesta sísmica de un modelo terrestre. Así que modelemos la respuesta de la interfaz entre un modelo muy simple de solo dos capas de roca. Y lo haremos en solo unas pocas líneas de Python. El flujo de trabajo es sencillo:

  1. Defina las propiedades de una lutita modelo, esta será la capa superior.
  2. Defina un modelo de arenisca con salmuera en sus poros, esta será la capa inferior.
  3. Defina una arena saturada de gas para compararla con la arena húmeda.
  4. Defina un rango de ángulos para calcular la respuesta.
  5. Calcule la respuesta de la salmuera en la interfaz, dadas las propiedades de la roca y el rango de ángulos.
  6. A modo de comparación, calcule la respuesta de la arena gaseosa con los mismos parámetros.
  7. Trace el caso de la salmuera.
  8. Traza el caso del gas.
  9. Agrega una leyenda a la trama.

Eso es todo, ¡nueve líneas! Aquí está el resultado:

Una vez que tenemos las propiedades de la roca, la clave está en el medio:

shuey2 es una de las muchas funciones en brujas - aquí proporciona la aproximación de Shuey de dos términos, pero contiene muchas otras ecuaciones útiles. Prácticamente todo lo demás en nuestra rutina de trazado de AVO es solo contabilidad y trazado.

Como en todas estas publicaciones, puede seguir el código en el Cuaderno de Jupyter. Puede ver esto en GitHub, o ejecutarlo usted mismo en el MyBinder cada vez más inestable (que está inactivo en el momento de escribir este artículo. Estoy trabajando en una alternativa).

¿Qué te gustaría ver en x líneas de Python? ¡Solicitudes bienvenidas!


Descripción

El material de este volumen proporciona la teoría básica necesaria para comprender los principios detrás de la obtención de imágenes del subsuelo de la Tierra utilizando sismología de reflexión y refracción. Para la sismología de reflexión, el producto final es una "sección de registro" de una colección de "rastros ondulantes" que se registran en el campo a partir de los cuales se puede derivar información sobre las propiedades de la estructura del subsuelo y la roca. En su mayor parte, los principios de la obtención de imágenes son los mismos independientemente de la profundidad del objetivo, se necesita el mismo trasfondo matemático para apuntar a una capa freática poco profunda que para investigar la base de la corteza continental de la tierra a una profundidad de 30-50 km.


Ver el vídeo: Установка Python и Jupyter Notebook Windows 10 (Septiembre 2021).