Relaunch unserer neuen Website mit dem hauseigenen "BINARY cms" Mehr erfahren →
← Referenzen

Focus Stack App — Schärfe aus der Vielschicht.

Eine App, die aus vielen unterschiedlich fokussierten Mikroskop-Aufnahmen ein einziges, durchgehend scharfes Bild rechnet.

Focus Stack App — Schärfe aus der Vielschicht.
CSEM
Kunde
Forschung · Mikroskopie
Branche
2024
Realisiert
Flutter
Kerntechnologie
1 Bild
aus N Fokusebenen
reproduzierbar
statt Handarbeit

Ausgangslage

In der Mikroskopie ist pro Aufnahme nur eine dünne Ebene scharf. Für ein durchgehend scharfes Bild braucht es eine Serie von Aufnahmen in verschiedenen Fokusebenen — sauber und verwacklungsfrei aufgenommen.

Lösung

Für das CSEM haben wir eine mobile App (Flutter) gebaut, die die Aufnahme der Focus-Stack-Serie führt: Ein Gyroskop erkennt, wann das Gerät ruhig genug ist, und gibt erst dann die nächste Aufnahme frei — die Basis für ein gestochen scharfes Komposit.

Ergebnis

Reproduzierbare, scharfe Aufnahmen direkt vom Gerät — ohne aufwändiges Spezial-Setup.

Projekt-Profil

Wie wir dieses Projekt einordnen.

Komplexität 5/5

Sensorfusion (Gyroskop) und Bildverarbeitung direkt auf dem Gerät, robust unter realen Aufnahmebedingungen.

Automatisierungsgrad 4/5

Der gesamte Stacking-Prozess läuft automatisch; der Anwender lädt nur den Stapel und erhält das Resultat.

Einzigartigkeit 5/5

Spezialisierte wissenschaftliche Bildverarbeitung als bedienbare App — weit weg von Standard-Software.

Techstack & Technologien
FlutterDartKamera-APIGyroskop-SensorikBildverarbeitung
Beteiligte Randsysteme
  • Geräte-KameraBildaufnahme der Fokus-Serie
  • Gyroskop-SensorStabilitätserkennung
Aus dem Code

Ein Blick auf ein kniffliges Detail.

Dart lib/helpers/gyro.dart — Gyroskop-Auswertung: die nächste Aufnahme der Focus-Stack-Serie wird erst freigegeben, wenn das Gerät ruhig genug ist.
void initialize() {
    SensorsPlatform.instance.gyroscopeEvents.listen((GyroscopeEvent event) {
        if (_isCapturingNotifier.value) {
            _gyroData['x'] = _gyroData['x']! + event.x;
            _gyroData['y'] = _gyroData['y']! + event.y;
            _gyroData['z'] = _gyroData['z']! + event.z;

            double totalMovement = sqrt(pow(_gyroData['x']!, 2) +
                pow(_gyroData['y']!, 2) +
                pow(_gyroData['z']!, 2));

            if (totalMovement < 0.5) {
                if (!_isBalancedNotifier.value) {
                    _borderColorNotifier.value = Colors.green;
                    _isBalancedNotifier.value = true;
                    _balanceCompleter?.complete();
                    _balanceCompleter = null;
                }
            } else {
                _borderColorNotifier.value = Colors.red;
                _isBalancedNotifier.value = false;
            }
        }
    });
}
Einblicke
Ähnliches Vorhaben?

Lass uns über dein Projekt reden.

Erzähl uns kurz von deinem Vorhaben — wir kommen schnell auf den Punkt.

„Die richtige Frage am Anfang spart die Hälfte der Arbeit am Ende."
JH Jacques Hanhart Beratung