[PYTHON] Flüssigkeitsvisualisierung BOS-Methode, die zu Hause durchgeführt werden kann, um zu sehen, was unsichtbar ist

Einführung

Das klare Gas ist mit bloßem Auge unsichtbar. Trotzdem gibt es Zeiten, in denen ich es sehen möchte. Dort sind Fluidvisualisierungstechnologien wie die Schlieren-Methode und die Shadow-Graph-Methode nützlich. Dieses Mal werde ich versuchen, diese Flüssigkeit mit etwas zu Hause zu visualisieren. Grundsätzlich brauchen Sie nur eine Kamera.

Verweise

Ich habe damit experimentiert. Wir empfehlen, dass Sie hier für detaillierte Theorien lesen. Verbesserung der Dichtegradienten-Visualisierungsmethode basierend auf der BOS-Methode

Einführung der Fluidvisualisierungstechnologie

Schrilen-Methode

Wenn der Dichtegradient groß ist, sehen Sie möglicherweise etwas mit bloßem Auge, z. B. den im Sommer beobachteten Hitzeschleier und das Gas des Feuerzeugs. Die Schattendiagrammmethode visualisiert diese nach dem gleichen Prinzip, dass sie mit bloßem Auge sichtbar sind. Die Schlieren-Methode ist eine Methode, um die Empfindlichkeit dieser Methode weiter zu erhöhen. schlierens_sam13.jpg NOBBY TECH Schlierens Gerät

Dieses optische System hat eine solche Konfiguration.

シュリーレン法原理図.png

Das von der Punktlichtquelle emittierte Licht wird an einem Punkt von der Linse gesammelt. In Wirklichkeit hat der Fokus eine gewisse Breite. Installieren Sie die Messerkante so, dass dieses Licht um etwa die Hälfte blockiert ist. Wenn sich auf dem Strahlengang ein Dichtegradient (Ungleichmäßigkeit der Dichte) befindet, wird das Licht gebrochen und nicht an einem Punkt gesammelt. Wenn es zur Messerkantenseite gebogen wird, wird es blockiert und das Bild auf dem Sensor wird abgedunkelt. Wenn es zur gegenüberliegenden Seite gebogen wird, wird es aufgehellt. Auf diese Weise kann der Dichtegradient als Helligkeitsinformation aufgezeichnet werden.

Diese Methode ist sehr empfindlich und kann schöne Bilder aufnehmen, ist jedoch zu Hause etwas schwierig zu reproduzieren. Schwierig ist, dass es viele Dinge gibt, die zuerst vorbereitet werden müssen.

Als nächstes kommt die Schwierigkeit, das optische System zu installieren. Das Ausrichten der optischen Achse ist sehr aufwändig. Insbesondere muss sich die Messerkante in der exakten Fokusposition befinden. Es wäre schön, wenn es eine feine Bewegungsphase gäbe, aber wenn nicht, wäre ein gewisser Einfallsreichtum erforderlich.

SPBOS-Methode (Streifenmuster-Hintergrund-orientiertes Schlieren)

Diese BOS-Methode ist eine Methode, die den Dichtegradienten auf die gleiche Weise wie die Schlieren-Methode visualisieren kann. Dies erfordert keine Messerschneide.

Das optische System ist auch sehr einfach. BOS法原理図.png

Nehmen Sie zwei Bilder auf, eines nur mit Hintergrund und eines mit einem Dichtegradienten, und berechnen Sie den Dichtegradienten aus der Differenz. Es gibt auch eine BOS-Methode, die ein zufälliges Muster im Hintergrund verwendet, das Programm jedoch umständlich macht, da es die gegenseitige Korrelation berechnet und die Abweichung wie PIV findet. Dieses Mal verwenden wir die SPBOS-Methode, die ein Streifenmuster verwendet, das das Programm einfacher macht.

Experiment

Dinge vorzubereiten

  1. Gestreifter Bildschirm
  2. Kamera
  3. Was Sie messen möchten

Die diesmal verwendeten sind wie folgt.

  1. iphone8
  2. D5100, AF-S DX NIKKOR 55-300mm f/4.5-5.6G ED VR
  3. Monotaro Air Duster

Ich denke, dass der Bildschirm mit einem Smartphone oder einem Drucker auf Papier gedruckt werden kann.

Es ist wünschenswert, dass die Kamera in RAW gespeichert werden kann. Die Bittiefe von D5100 beträgt 14 Bit (16383 Gradation), aber wenn sie als JPG gespeichert wird, beträgt sie je nach Gradation der Anzeige nur 8 Bit (255 Gradation). Außerdem ist die Gammakorrektur effektiv, sodass die Rückkehr zur Linearität die Situation noch verschlimmert. Es wäre schön, ein Stativ zu haben, aber ich denke, es ist in Ordnung, es auf den Boden zu stellen. Achten Sie darauf, die Kamera nicht zu schütteln, wenn Sie den Auslöser drücken.

Schießen

Diesmal habe ich es so installiert. Die Brennweite beträgt 300 mm, die Belichtungszeit 1/60, der F-Wert 20 und die ISO-Empfindlichkeit 400. BOS光学系セットアップ.png

Fokussieren Sie die Kamera auf den Bildschirm.

Sie müssen auf den Abstand zwischen dem Bildschirm und dem zu messenden Objekt achten. Wenn es zu nahe ist, wird die Empfindlichkeit nicht erhalten. Selbst wenn sich in unmittelbarer Nähe des Bildschirms ein Dichtegradient befindet und sich das Licht biegt, wird das gebogene Licht an derselben Position abgebildet, an der es sich nicht gebogen hat. Im Gegenteil, wenn es zu weit ist, wird das gemessene Objekt unscharf. Erhöhen Sie den F-Wert, um die Sichttiefe zu erhöhen.

Das Hintergrundbild wurde mit dem folgenden Programm erstellt.

import numpy as np

#Anzeige
ppi = 326 # 1inch(25.4mm)Anzahl der Pixel pro
x_pix = 750 #Horizontale Auflösung
y_pix = 1334 #Vertikale Auflösung
pix_per_mm = ppi / 25.4
x_mm = x_pix / pix_per_mm
y_mm = y_pix / pix_per_mm
lam = 1.0 # mm

def sin_img(direction="x",bit=8):
    if direction == "x":
        x = np.linspace(0.0,x_mm,x_pix)
        sin = np.sin(2.0*np.pi*x/lam)
        img = np.tile(sin,(y_pix,1)).T
        img = 0.5 * (img + 1.0) * (2**bit-1.0)
    elif direction == "y":
        y = np.linspace(0.0,y_mm,y_pix)
        sin = np.np.sin(2.0*np.pi*y/lam)
        img = np.tile(sin,(x_pix,1))
        img = 0.5 * (img + 1.0) * (2**bit-1.0)
        
    if bit == 8:
        img = img.astype(np.uint8)
    elif bit == 16:
        img = img.astype(np.uint16)
    else:
        print("Die Anzahl der Bits beträgt 8 oder 16")
    return img

Hintergrund genommen ref.png

Es gibt eine Messung jet.png

Analyse

Fügen Sie zunächst das für die Analyse verwendete Programm ein.

RAW-Bilder werden mit rawpy entwickelt. Verwendet lineare Skalenhelligkeitswerte ohne Gammakorrektur.

import rawpy
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import cv2
from pathlib import Path

def postproccesing(path):
    raw = rawpy.imread(str(path))
    return raw.postprocess(gamma=[1.0,1.0],
                               no_auto_bright=True,
                               output_color=rawpy.ColorSpace.raw,
                               use_camera_wb=True,
                               use_auto_wb=False,
                               output_bps=16,
                                no_auto_scale=True
                              )

ref_path = Path("data/ref2.NEF")
jet_path = Path("data/jet2.NEF")

ref_img = postproccesing(ref_path)
jet_img = postproccesing(jet_path)

ref_gray = ref_img[:,:,1] #Graustufen
jet_gray = jet_img[:,:,1]

Die Visualisierung nimmt nur den Unterschied und multipliziert den Raum. Indem Sie die Differenz nehmen, können Sie den Teil sehen, der durch den Dichtegradienten gebrochen wird. Selbst wenn sich das Licht in die gleiche Richtung biegt, wird es je nach Hintergrundmuster dunkler oder heller. Daher muss der Farbverlauf multipliziert werden.

bos = (jet_gray-ref_gray) * np.gradient(0.5*(jet_gray+ref_gray))[1]

Wenden Sie einen Tiefpassfilter an. Bestimmen Sie das Band, während Sie das Erscheinungsbild entsprechend betrachten.

def fft_lpf(img,r):
    #Frequenzraummaske
    mask = np.zeros_like(img)
    X,Y = np.meshgrid(np.arange(img.shape[1])-img.shape[1]/2.0,np.arange(img.shape[0])-img.shape[0]/2.0)
    mask[np.sqrt(X**2 + Y**2) < r] = 1.0
    
    #FFT
    fft_img = np.fft.fftshift(np.fft.fft2(img))
    fft_img *= mask
    return np.abs(np.fft.fft2(np.fft.fftshift(fft_img)))

Speichern Sie nach dem Anwenden des Tiefpassfilters das Bild und beenden Sie den Vorgang. 調整.png

Es gibt viel Lärm, aber der Jet kann gut sichtbar gemacht werden. Es scheint, dass Lärm mit etwas mehr Einfallsreichtum reduziert werden kann.

Nachtrag 2020/04/14 Ich habe die Kamera richtig repariert und erneut ein Bild aufgenommen und die Helligkeit später angepasst, um das Rauschen zu reduzieren. Sie können so ein schönes Bild machen. 論文実装.png

Zusammenfassung

Es wurde gezeigt, dass die Flüssigkeitsvisualisierung so durchgeführt werden kann, wie es nur bei denen zu Hause der Fall ist. Versuch es bitte.

Recommended Posts

Flüssigkeitsvisualisierung BOS-Methode, die zu Hause durchgeführt werden kann, um zu sehen, was unsichtbar ist
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Was ist die Newton-Methode? ?? Ungefähre Lösung der nach der Newton-Methode zu lösenden Gleichung