Dias scannen 4.7.21
Inhaltsverzeichnis
1 Vorwort 2
1.1 Nomenklatur 2
2 Weitere Informationsquellen 2
3 Aufbau 3
3.1 Mechanischer Aufbau 3
3.2 Elektrischer Aufbau 4
4 Das Abfotografieren mit dias.py 5
4.1 Einrichtung des Raspberry 5
4.2 Installation von dias.py /Raspberry 5
4.3 Parameter im dias.py Skript 6
4.4 Spiegel der Kamera 7
4.5 Kameraeinstellung 7
4.6 Kamera- und Projektorspeziefisches 7
4.7 Los gehts 7
4.8 mögliche Probleme 8
4.9 Ergebnis 8
5 Allgemeines zu PostDiaDigit 9
5.1 Installation 9
5.2 Hauptfenster 9
6 Umbenennen mit Bearbeiten/Umbenennen 9
6.1 Verzeichnis wählen/neu laden 10
6.2 Anzahl Dias 10
6.3 Maske 10
6.4 Löschen 10
6.5 Umbenennen 10
6.6 Prüfen und los 10
6.7 Einstellungen sichern 11
7 Schneiden 11
7.1 Grundsätzliches 11
7.2 Schneiden mit Bearbeiten/Schneiden 11
7.3 Problemlösung mit den Kreuzen 12
7.4 Und weiter 13
8 Dubletten 13
8.1 Dubletten finden mit: Bearbeiten/Dubletten 14
9 Diarahmen 14
10 Erfahrungsberichte 15
11 Rechtliches und Quellcode: 15
11.1 Lizenz 15
11.2 Quellcode 15
12 Änderungen 15
Es gibt wenige Alternativen um Dias zu digitalisieren, entweder man lässt es machen, muss dafür alle Dias irgendwo abgeben, und recht viel zahlen, oder man benutzt Diascanner, hier gibt es soweit mir bekannt nur einen bei dem man nicht jedes Dia einzeln irgendwo reinstecken muss. Der ist sehr teuer und vor allem, wie auch z.B. mein Flachbettscanner mit Diaeinsatz, braucht es ewig, je nach Auflösung mehrere Minuten pro Bild. Bei meinen knapp 30000 Dias war das indiskutabel. Die einzige mir akzeptabel vorkommende Methode ist, die Dias abfotografieren, und zwar so, dass auf Knopfdruck eine ganze Schiene automatisch durchläuft und das in etwa der Zeit die o.g. Scanner für ein einzelnes Bild brauchen. Es gibt schon einige Seiten zu diesem Thema, wo beschrieben wird wie man das ganze zusammenbastelt. Allerdings habe ich nirgends etwas zu der Frage gefunden was man mit den Bildern macht nachdem sie auf dem Speicherchip der Kamera sind. Es bringt ja nichts, wenn man pro Bild wenige Sekunden für das Abfotografieren braucht, dann aber mehrere Minuten für die Nachbearbeitung. Deshalb habe ich diesem Thema den größten Teil diese Dokumentes gewidmet und auch ein Programm geschrieben das kostenlos incl. Quellcode verfügbar ist.
In der Anleitung benutze ich einige Ausdrücke die einmal geklärt werden sollten:
Serie: Alle Bilder die am Stück aufgenommen wurden ohne das die Position von Kamera oder Projektor verändert wurden, die also mit der gleichen Schnittmaske geschnitten werden können. Dies können mehrere Schienen sein, wenn man diese halbwegs vorsichtig wechselt.
Reise: Bei mir geht es hauptsächlich um Reisebilder, gemeint sind aber einfach Bilder die zusammen gehören, also eben eine Reise, eine Feier, Ein sonstiges Ereignis,…
jpg: Das primäre Bildformat, das für die Bearbeitung verwendet wird. Dies kann auch ein anderes Format sein, muss dann aber im Hauptfenster von PostDiaDigit eingegeben werden und muss natürlich von der verwendeten QT-Bibliothek unterstützt werden s. hier.
nef: Das zweite Bildformat, es wird beim Umbenennen parallel zum primären behandelt, falls ein gleichnamiges File mit dieser Endung vorhanden ist, sonst aber ignoriert. Es muss im Hauptfenster von PostDiaDigit entsprechend eingegeben werden, kann also auch beliebig eingestellt werden. Es muss noch nicht einmal ein Bildformat sein.
Vor etlichen Jahren hatte ich schon vor meine Dias zu digitalisieren und mir einen Umrüstsatz von fotonovum gekauft. Was mir damals fehlte war die passende Kamera.
Es gibt einige weitere Quellen die ähnliche Aufbauten zeigen und von denen ich mich auch inspirieren lies:
In der Make Zeitschrift wurde es recht ausführlich beschrieben, Hauptunterschied zu meiner Lösung ist die Methode den Projektor zu schalten und der genaue Aufbau.
Für das verwendete Relais von AZ-Delivery gibt es auf deren Seite eine Ausführliche Doku zum Download.
Eine der Seiten mit recht ausführlicher Anleitung zum Hardwareaufbau findet sich hier.
Hier ist mein Aufbau zu sehen, aber es muss nicht genau so sein, wichtig ist nur, dass Kamera und Projektor auf einer Achse angeordnet sind. Die Kamera wird bei mir vom oberen Teil eines Schulterstativs gehalten, da dies aber unter dem Gewicht des Objektivs nachgab habe ich da noch einen beweglichen Holzklotz drunter gestellt. Da durch den Stativkopf die Kamera höher als der Projektor war habe ich beide schräg angeordnet. Dies hatte den Vorteil, dass durch verschieben des Klotzes das Objektiv etwas rauf und runter gelassen werden konnte. Die beiden Winkel (weiß und golden) dienen als Anschlag und definieren eine feste Position des Projektors, dieser kann aber einfach weggenommen werden. Außer der gemeinsamen Achse ist wichtig, dass das Diamagazin Platz hat, also weder gegen das Objektiv noch die Kamera stößt. Daraus ergibt sich je nach Geometrie der Mindestabstand Projektor - Kamera. Und daraus dann die optimale Brennweite. Bei mir kam es mit dem 105mm Macro gut hin. Tests mit einem anderen Objektiv und Nahlinse waren nicht wirklich gut. Der zweite Klotz dient dazu das Diamagazin zu unterstützen, es kam da bei dem Projektor teils zu Blockaden. Das sollte aber bei anderen nicht nötig sein. Wie gesagt habe ich den Umbausatz von fotonovum verwendet, allerdings mit der Original Lampe. Alternativ kann man sich die passende Mattscheibe auch selber zurechtschneiden z.B. aus 0,5-1mm Teflon, s. o.g Artikel in der Make. Dies wurde bei mir auch inzwischen nötig, da die Mattscheibe zerbrach. Insgesamt gilt möglichst aus dem was man schon hat etwas zusammenbauen.
Zum Steuern des ganzen habe ich einen Raspberry 4B verwendet. Ein kleinerer würde es aber auch tun. Und wer sich besser mit Elektronik auskennt kann wohl auch was mit Relais u.ä. basteln. I.w. braucht man etwas das sowohl die Kamera als auch den Projektor steuern kann. Nimmt man wie ich einen Raspberry braucht man trotzdem noch Relais, ich habe eines von AZ-Delivery verwendet.
Legende
A: Fernbedienung des Projektors
B: Relais
C: Raspberry Pi
D: Kamera
rot: neue Kabel
1: Taster
2: vorhandene Anschlüsse am Taster
3: weitere vorhandene Leiterbahnen,…
4: 2 neue Jumper-Kabel in der Fernbedienung
5: weibliche Stecker der Kabel 4
6: männliche Stecker der Kabel 7, diese passen in 5
7: 2 Jumper-Kabel zum Relais (zu „Common Pin“ und „Normaly Opened pin“)
8: 4 Jumper Kabel zwischen Relais und Raspberry.
9: USB-Kabel
Die verwendeten Bezeichnungen bei (7) entsprechen denen der Anleitung zum Relais von AZ Delivery auf der Seite 4, Details zu den Kabeln 8 siehe ebenda auf Seite14.
Um den Diaprojektor zu schalten habe ich die Fernbedienung geöffnet und an den Kontakten des Tasters Kabel angelötet (4), die ich dann über das Relais schalten lasse. Zuerst hatte ich vor direkt an den Stecker der Fernbedienung zu gehen, so wäre keine Änderung an der Fernbedienung nötig gewesen, habe dann aber eher zufällig das Schaltbild der Fernbedienung gesehen. Da werden nicht einfach zwei der Kontakte des Steckers verbunden, da ist noch etwas mehr drin. Also war die Alternative dies nachbauen oder eben in der Fernbedienung löten. Ähnlich könnte man auch mit der Kamera verfahren, das war auch der Grund warum ich ein doppeltes Relais gekauft hatte. Aber dann habe ich die gphoto2 Lib gefunden, damit kann man viele Kameras einfach per USB-Kabel (9) steuern. Dies dürfte risikoloser sein. Wie man das Relais mit dem Raspberry o.ä. verbindet steht gut im dazugehörigen Handbuch beschrieben. Wichtig ist nur, dass die verwendete Pinnummer die gleiche wie im Pythonscript ist. Wie in der Anleitung habe ich GPIO14 = Pin 8 verwendet. Apropos Löten, am Raspberry würde ich nicht löten. Um diesen mit dem Relais zu verbinden bieten sich sog. Jumper Kabel an. Aus zwei weiblichen Jumpersteckern (5) habe ich außerdem die Buchsen in der Fernbedienung des Projektors gemacht: Einfach je ein 3mm Loch gebohrt, den quadratischen Stecker etwas rundgefeilt bis er in das Loch passte und eingeklebt. Dies ist deutlich kleiner als z.B. eine Klinkenbuchse. Innen dann das Kabel an den Taster (1) löten. Jetzt kann man mit zwei weiteren männlichen Jumpersteckern (6) von außen das Relais mit der Fernbedienung verbinden. Ansonsten fallen die zwei kleinen Löcher nicht auf, man kann die Fernbedienung also normal weiter benutzen.
Es gibt viele Informationsquellen zum Raspberry, also werde ich als Anfänger hier nicht eine detaillierte Anleitung schreiben, aber eine generelle Übersicht dürfte denen die noch nie etwas damit gemacht haben helfen. Zuerst einmal es gibt verschiedene Modelle, diese unterscheiden sich ggf. auch was diese Minianleitung angeht. Grundsätzlich ist aber folgendes wichtig:
Welcher Raspberry? Wahrscheinlich klappt es auch mit den kleinsten, ich hatte einen 4B. Will man VNC über WLAN nutzen (s.u.) braucht man einen der das kann, also nicht Modell 2. Wahrscheinlich braucht man ihn für diese Anwendung nur eine Woche oder so. Man sollte sich also beim Kauf auch überlegen was man danach damit anfangen will und auch danach entscheiden.
Hardware: Man braucht zumindest den eigentlichen Raspberry, eine passende SD-Karte für das Betriebssystem und z.B. dias.py und ein passendes Netzteil, ein Gehäuse wäre auch nicht schlecht. Zur Einrichtung braucht man einen PC mit Kartenleser, eine Maus, Tastatur und Monitor (oder TV) mit passenden HDMI-Kabel. Spezialisten kommen ggf auch mit whttps://projects.raspberrypi.org/fr-FR/projects/raspberry-pi-setting-up/1eniger aus, aber die lesen dies eh nicht.
Betriebssystem: dazu gibt es wirklich viele Anleitungen , z.B. von Heise oder von raspberry.org
Am einfachsten ist es wenn man so weiter arbeiten kann, also mit Monitor, Maus und Tastatur. Wenn dies nicht klappt, weil man als Monitor z.B. den Fernseher benutzt hat aber nicht weiterhin im Wohnzimmer arbeiten will gibt es verschiedene Lösungen, z.B. die Fernsteuerung über VNC. Man kann dann über einen PC (oder auch Smartphone, Tablet,…) in einem Fenster den Desktop des Raspberry sehen und mit Maus und Tastatur des PC bedienen. Dazu müssen PC und Raspberry normalerweise im gleichen lokalen Netzwerk sein, also i.A. mit dem gleichen Router verbunden sein, per LAN-Kabel oder WLAN. Theoretisch geht es auch aus der Ferne, aber da man ja vor Ort sein muss um die Diaschienen einzusetzen u.ä. ist dies irrelevant. Zumindest beim Raspberry Pi 4 hatte ich ein Problem. Wenn ich ihn ohne angeschlossenen Monitor startete konnte ich mich nicht per VNC anmelden. Dies liegt daran, dass er standardmäßig nur dann die grafische Oberfläche startet wenn beim Booten ein Monitor angeschlossen ist und er mit diesem z.B. eine Auflösung aushandeln kann. Also wenn es klappt, wie bei meinem Raspberry 3 ist alles OK, sonst mal den Raspberry ohne Monitor starten, dann nach einer Minute oder so einen anschließen. Sieht man jetzt einen leeren Bildschirm mit einem blinkendem Cursor hat man besagtes Problem. Man muss dann dem Raspberry einen festen Bildschirmmodus vorgeben, dies geht über die config.txt Datei, weitere Infos hatte ich hier gefunden.
Das Installationsprogramm von PostDiaDigit s.u. legt im Programmordner, also normalerweise: C:\Programme\PostDiaDigit auch einen Ordner raspberry an in den dias.py kopiert wird. Dies muss natürlich auf den Raspberry verschoben werden. Entweder per USB-Stick, oder per VNC,… Dort ist keine wirkliche Installation nötig, es kann aber sein, dass beim Start eine Fehlermeldung kommt, dass das eine oder andere Paket installiert werden muss. Dann einfach nach dem Namen des angegebenen Paketes per Suchmaschine suchen (also z. B. Wenn gphoto fehlt sucht man nach „install gphoto raspberry pi“).
Meist soll man zuerst
sudo apt-get update
sudo apt-get upgrade
ausführen
und dann ein speziefisches „
sudo
apt-get install …“
Dies war mein zweites Python Skript, es sollte also auch für andere recht leicht sein Änderungen einzubauen, vor allem, da es ja eine reine Textdatei ist also ein Editor reicht. Man kann aber auch die vorinstallierte Programmierumgebung Thonny nutzen, eine Einführung dazu gibt es z.B. hier. Infrage kämen andere Zeiten, andere Pinnummern, andere gphoto2 Befehle…
Nach dem ersten Block mit import Anweisungen u.ä. kommen die Einstellungen:
#Hardware
Druecker=8 #GPIO Pin
#Einzelauslösung oder
Serienbildfunktion
Serie=1 #0: Einzelbild; sonst
Serienbildfunktion
#Zeiten
Wait_t=4 #Gesamtzeit pro
Bild
Wait_1=2 #Wartezeit von Auslösen der Kamera bis Transport
des Projektors
Press=0.3 #Dauer des Drückens für Transport
des Projektors
Denkp=5 #nur bei Serienbild: Anzahl
Wiederholungen am Anfang
suchStr=b'Nehme Bild'
triggerCommand =
["--trigger-capture"]
Hier im einzelnen:
Druecker ist die Nummer des verwendeten GPIO Pin.
TriggerCommand gibt an mit welchem Befehl die Kamera ausgelöst werden soll, Dies wird nicht bei der Serienbildvariante verwendet. Alternativ zu --trigger-capture käme auch --capture-image in Frage. Nicht jede Kamera unterstützt beide.
Press: gibt an wie lange die Kontakte der Fernbedienung des Projektors verbunden werden sollen. Bei meinem hängt von der Dauer ab ob er vorwärts oder rückwärts geht.
Serie: ist dies nicht
0 wird die Serienbildversion verwendet. Abhängig davon haben die
restlichen Variablen leicht unterschiedliche Bedeutung:
Variable |
Bedeutung |
Serie=0 |
Serie !=0 |
Wait_1 |
Wartezeit von Auslösen der Kamera bis Transport des Projektors |
Wartezeit nachdem die Kamera ankündigt, dass sie das nächste Bild macht |
|
Wait_t |
Gesamtdauer pro Bild |
(Wait_t-Wait_1) ist die Wartezeit nach Auslösung des Transports. Die Gesamtwartezeit ist also etwas länger, nämlich: Wait_t+Press+die Dauer von TriggerCommand |
Dies wird der Serienbildfunktion übergeben. Falls die Kamera es schafft sollte es also der Abstand zwischen 2 Fotos sein. |
Denkp |
Gibt an wie viele Bilder vom ersten Dia einer Schiene gemacht werden. Siehe nächster Abschnitt |
Wird ignoriert |
Wird verwendet |
suchStr |
Such String für Serienbildfunktion |
Wird ignoriert |
Teil der Rückmeldung der Kamera nach der zum Synchronisieren gesucht wird |
Da ich nicht glaube, dass es der Kamera gut tut wenn der Spiegel 30000 mal rauf klappt habe ich eine Lösung gesucht um dies zu verhindern. Dies vor allem, da ich eine D850 geliehen bekommen hatte. Diese ist nicht universal für alle Kameras geeignet. Deshalb gibt es zwei Einstellungen des Skripts. Das universelle löst jeweils für jedes Bild einzeln aus. Damit ist die Synchronisierung einfach. Die alternative Version löst eine Serienbildaufnahme aus und versucht den Transport des Projektors damit zu synchronisieren. Dies geht theoretisch relativ einfach, da die Kamera jedes Bild ankündigt, aber dann ist es ja eigentlich schon zu spät. Also warte ich auf die Nachricht und löse 2s später den Bildwechsel aus, in der Hoffnung, dass bis dann das Bild gemacht wurde. Diese Rückmeldung muss das Script natürlich erkennen. Er hängt sicher von der eingestellten Sprache und höchstwahrscheinlich vom Kameratyp ab. Man muss also in das Logfile schauen wie die Rückmeldung ist und einen Teil davon als suchStr dinieren. s.o.
Statt der eingestellten 4s dauert es aber bei den ersten Bildern oft viel länger. Teils eine Minute. Es gab immer wieder Probleme mit der Synchronisation. Irgendwann habe ich es aufgegeben und einfach die ersten 4 Transportbefehle ausgelassen. Das erste Dia jeder Schiene wird also 5 mal aufgenommen. Dies ist über den Parameter Denkp in Dias.py einstellbar, s.o.
Mit allen Automatikfunktionen habe ich schlechte Erfahrungen gemacht. Also Autofokus abschalten und auch manuell belichten. Ich habe mit der normalen Projektorlampe gearbeitet, andere raten zu einer schwächeren. Damit habe ich folgende Einstellung verwendet:
Blende: 22
Zeit: 1/500 s
ISO: 80
bei einer so kleinen Blende besteht, wie man mir zu spät erklärte, die Gefahr der Beugungsunschärfe. Ja als Physiker hätte ich das wissen sollen ;-) Dies habe ich aber nicht beobachtet, kann aber je nach Objektiv vielleicht stärker sein. Der Vorteil ist die hohe Schärfentiefe, man braucht also nicht ganz so genau zu fokussieren und es verzeiht auch z.B. verbeulte Dias. Wegen der Vibrationen im Projektor ist eine kurze Belichtungszeit sicher gut und das die Qualität mit kleinerer ISO-Zahl besser ist sollte auch klar sein.
Das Skript ist nur mit einer Nikon D850 und einem Zett Projektor getestet. Bei anderen Geräten kann es sein, dass man an der Synchronisation etwas anpassen muss. Die entsprechenden Konstanten sind am Anfang des Skripts definiert und können geändert werden, s.o.. Je nachdem was man für Magazine verwendet sollte man auch die angebotenen Werte für die Bilder/Magazin anpassen.
Man führt das Magazin so ein, dass das erste Dia im Projektor ist.
Nach dem Start von dias.py wird gefragt wie viele Bilder aufgenommen werden sollen. Dabei werden einige Standardwerte angeboten. Es gibt aber zwei Sonderfälle:
1: es wird nur ein Bild aufgenommen ohne jeden Transport, ohne Synchronisation,… also nur als Fernbedienung der Kamera
?: Hier kann man dann einen beliebigen Wert eintragen, z.B. bei nicht vollen Magazinen
Nach dem Klick auf den entsprechenden Button, bzw. nach Eingabe der Anzahl (bei ?) geht dann alles automatisch. Der Zyklus wiederholt sich bis man Abbruch wählt.
Das Zuschneiden der Bilder (s.u.) beruht darauf, dass viele Bilder unter gleichen Bedingungen aufgenommen wurden, man sollte also versuchen mindestens etwa 100 Bilder als Serie zu machen ohne Kamera oder Projektor zu bewegen. Ich habe meist 400-500 gemacht. Danach müssen die Bilder zur Weiterbearbeitung auf den PC kopiert werden. Und wie immer empfehle ich ein Backup zu machen. Außerdem empfehle ich in den Ordner in dem man die Bilder kopiert auch eine Textdatei zu schreiben, die Notizen enthält was man da aufgenommen hat, zumindest wenn man nicht vor hat sofort das Umbenennen durchzuführen. Wichtig wären also welche Schienen und wie viele Bilder pro Schiene man aufgenommen hat.
Es kann natürlich passieren, dass der Projektor blockiert, vor allem da ja wohl keiner einen neuen hat. Also bereit sein ggf. einzugreifen. Das Skript abbrechen ist nicht vorgesehen, schneller ist es eh den Projektor abzuschalten. Die Synchronisation funktioniert nicht zu 100% genau. Es kommt also vor, dass ein Dia zweimal und dafür das nächste nicht aufgenommen wird. Wie gesagt sollte dies bei dem Skript mit einzelner Auslösung (Serie=0) nicht passieren. Zum Suchen der Dubletten habe ich ein Programm geschrieben, s.u.
H ier ein altes Bild aus Berlin. Es ist auf dem Kopf und spiegelver- kehrt. Wichtig für das automatische Schneiden ist, dass um das Bild ein schwarzer Rand ist. Die hellen Flecken weiter außen, es sind Reflexe am Tubus des Projektors, stören dagegen nicht. Man könnte meinen, da sei viel vergeudet weil rundherum viel Schwarz ist, aber bei einem Hochkant Bild ist oben und unten nur wenig. Wer also nicht zuerst alle Bilder drehen will muss mit diesem Ausschuss leben. Wer es doch tut sage mir Bescheid, denn dann muss ich das Schneideprogramm anpassen, es sucht derzeit immer das „Kreuz“ s.u.
Das Programm kommt als ein normalen Installationsprogramm: PDD64_setup_0_9.exe o.ä. „64“ da es die 64Bit Variante installiert, und 0_9 da es die Version 0.9 ist
Ursprünglich waren dies 4 Programme, die ich dann zu einem zusammengefasst habe, jedes der ursprünglichen Programme hat dort einen Eintrag im Menü Bearbeiten. Im Hauptfenster kann man einige allgemeine Einstellungen vornehmen:
Variable |
Bedeutung |
Sinnvolle Werte |
Sprache |
Die Sprache des Programms. |
Man hat die Wahl zwischen Deutsch Englisch und Französisch |
Das primäre Bildformat, das für die Bearbeitung verwendet wird. |
Dieses Format muss von der verwendeten QT-Bibliothek unterstützt werden s. hier. |
|
Sekundäres Fileformat |
Das sekundäre Bildformat, das nur beim Umbenennen verwendet wird. |
Beliebiges Format, es muss noch nicht einmal ein Bildformat sein |
Die eigentlichen Funktionen sind über das Menü Bearbeiten erreichbar. Außerdem kann man sich diese Hilfe anzeigen lassen und die Copyrightmeldung.
Die Kamera vergibt ja einfach laufende Nummern mit einem kameraspeziefischen Prefix. Sinnvoller ist es den Bildern Namen zu geben die folgende Informationen erhalten:
Kennung der Serie, z.B. eine Reise
Nummer der Schiene innerhalb der Serie
Nummer des Dias in der Schiene
Anfangs habe ich dies mit dem TotalComander gemacht, doch auch wenn er dazu gut geeignet ist war es noch viel Arbeit, also schrieb ich dias_rename, das später Teil des Programms PostDiaDigit wurde. Neben dem eigentlichen Umbenennen müssen auch noch die mehrfachen Dias am Anfang der Schiene ausgesondert werden. Das Programm benennt nur um, löscht also nicht, kopiert aber auch nichts. Also gibt es nachher die gleichen Dateien wie vorher, aber sortiert in Unterordner und mit neuen Namen. Es geht davon aus, dass man RAW und JPG Bilder aufgenommen hat. Diese werden in 3 automatisch erzeugte Unterordner verschoben:
del: hier landen die Dubletten, kann also vom User gelöscht werden
jpg: hier landen die jpgs
nef: na was wohl
Die Endungen jpg und nef können im Hauptfenster eingestellt werden. Dabei ist die primäre Endung die nach der gesucht wird, z.B. die jpg. Nach dem Verschieben des jpg wird geschaut ob es ein gleichnamiges File mit der sekundären Endung gibt, falls ja wird dies entsprechend verschoben/umbenannt. Dies ist wichtig, falls man zwischendurch per Hand eingreift. Hat man z.B. Müll kann man einfach die jpgs löschen, oder in den del Ordner verschieben, die gleichnamigen nef bleiben dann am Ende übrig. Nach so einer Aktion muss der Ordner aber neu geladen werden, s.u.
Im weiteren schreibe ich also immer jpg, meine aber die primäre Endung, und nef für die sekundäre.
Mit dem Button „…“ kann man ein neues Verzeichnis laden, mit dem anderen „♻“ lädt man das aktuelle Verzeichnis neu, sinnvoll wenn man per Hand etwas gelöscht oder sonst wie geändert hat.
Hinter Rest steht wie viele Bilder noch vorhanden sind, also nur die jpg!
Danach kann man Auswählen wie viele Bilder in der Schiene sind. Einige Standardgrößen kann man einfach auswählen, für alles andere gibt es das „?“ und dahinter eine Eingabemöglichkeit. Ein Sonderfall ist die „1“ hier wird das erste Bild umbenannt und sonst nichts, also nichts gelöscht o.ä. Es werden natürlich höchstens so viele Bilder umbenannt wie noch vorhanden sind. Man muss also bei der letzten Schiene einer Serie nicht die Anzahl verringern. Aber wenn zwischendurch eine Schiene unvollständig ist wohl.
Der Filename wird aus den folgenden Teilen zusammengesetzt:
Prefix: ein beliebiger Text
Nr der Schiene, immer mindestens zweistellig. Ändert man dies wird die Dianummer auf 1 gesetzt. Dies hat sich in der Praxis als sinnvoll gezeigt.
Ein Trennzeichen, ist zwar editierbar sollte aber _ bleiben, vor allem wenn man auch das Rahmenprogramm nutzt.
Die Nummer des Dias in der Schiene. Bei Schienen mit über 99 Dias dreistellig sonst zweistellig. Hier kann man die Startnummer eintragen falls es nicht die 1 sein soll.
. und Endung: s.o.
Wie gesagt es wird nur in den del Ordner verschoben, nicht wirklich gelöscht. Nötig ist dies da es bei der von mir verwendeten Kamera am Anfang einer Schiene Synchronisationsprobleme gab. Voreingestellt ist entsprechend das die Bilder 2 bis 5 gelöscht werden. Der Grund, dass ich nicht 1 bis 4 lösche ist ganz einfach. Das Dia wird warm, kann sich dann eventuell verformen („Springen“) also benutze ich das kälteste. Hat man Serien ohne Dubletten aufgenommen trägt man als ersten Wert 0 ein, dann wird nichts gelöscht. Danach wird angezeigt welche Bilder gelöscht werden, also die Originalfilenamen.
Hier werden die Originalnamen des ersten und letzten Bildes angezeigt die umbenannt werden sollen.
Ich empfehle das Verzeichnis in einem Explorer Fenster geöffnet zu haben, dann kann man leicht überprüfen ob das alles stimmen kann. Um nicht jpg und nef hintereinander zu sehen am besten „Gruppieren nach Typ“ auswählen, dann wird es übersichtlicher. Ein Vorteil der Dubletten ist z.B. dass man einfach den Anfang einer Schiene erkennt. Man schaut also ab die ersten 5 Bilder gleich sind und ob nach dem letzten Bild (laut Umbenennen Box) wieder 5 gleiche kommen. Ist das alles OK klickt man auf „Go!“. Da nur umbenannt wird geht dies recht zügig. Das Programm versucht jetzt zu raten was man als nächstes machen will. Hat man eine Schiene umbenannt kommt wahrscheinlich die nächste, also erhöht es die Schienennummer, und setzt die Startnummer auf 1. Hat man nur ein Bild umbenannt wird die Startnummer um eins erhöht. Im Idealfall kann man also einfach immer wieder auf Go klicken bis das Verzeichnis abgearbeitet ist. Falls in der Serie Bilder verschiedener Reisen waren könnte man auf die Idee kommen diese jetzt zu trennen, das sollte man aber erst nach dem Schneiden.
Hier werden die Einstellungen die für den jeweiligen Nutzer spezifisch sind in der Registry gesichert. Dies sind: die beiden Filetypen (z.B. jpg und nef), welche Bilder gelöscht werden sollen (z.B. 2-5) und die Anzahl Bilder pro Schiene. Diese Einstellungen werden beim Programmstart automatisch geladen.
Man hat jetzt viele Bilder, die viel Schwarz und ggf Reflexionen am Tubus des Projektors enthalten und in der Mitte das Bild, entweder Hoch- oder Breitkant, außerdem sind sie auf dem Kopf und seitenverkehrt. Die Fotos müssen also zurecht geschnitten und gespiegelt werden, dabei muss erkannt werden ob sie Hoch- oder Breitkant sind. Das alles möglichst automatisch, möglichst sicher, also so, dass nichts weggeschnitten wird und das ganze möglichst schnell. Es gibt zwei Möglichkeiten dies anzugehen:
Jedes Bild einzeln analysieren und zurecht schneiden. Dies wird bei Bildern die am Rand dunkel sind scheitern und lange dauern.
Für alle Bilder einer Serie die gleichen zwei Schnittmasken verwenden.
Ich habe mich für letzteres entschieden. I.W. überlager ich zuerst viele Bilder, meist 100, dann erhält man ein helles Kreuz auf schwarzem Grund. Hieraus kann das Programm dann die Schnittmasken bestimmen. Diese werden nicht zu 100% für alle Bilder passen, da nicht alle Bilder genau gleich fotografiert worden. Gründe sind:
unterschiedliche Rahmen
Der Mechanismus des Projektors wird nicht jedes mal auf mm-Bruchteile gleich arbeiten.
Kamera oder Projektor wurden bewegt. Also dies möglichst vermeiden!
Es wird aber eher etwas Schwarzer Rand übrigbleiben als etwas weggeschnitten. Will man die Bilder später z.B. Am TV oder PC ansehen hat man meist einen schwarzen Hintergrund, dann fällt dieser Fehler nicht auf, das Bild ist nur minimal kleiner angezeigt als es sein könnte. Erfahrungsgemäß reichen 100 Bilder um eine möglichst gute Maske zu berechnen, bei meinen 28000 Dias musste ich bei einer Serie die Zahl erhöhen. Je höher, je sicherer aber natürlich auch langsamer.
Mit dem Button „Einstellungen“ kann man einige Einstellungen vornehmen. Dies sollte man zuerst einmal ignorieren und versuchen ob es mit den Voreinstellungen funktioniert. Falls nicht hier die möglichen Einstellungen:
Variable |
Bedeutung |
Sinnvolle Werte |
Anzahl Bilder für Schnittmaske |
Das Berechnen der Schnittmaske ist recht aufwändig, aber benutzt man zu wenige wird die Maske schlecht. |
Ich habe 100 benutzt, dies reichte nur einmal nicht. |
Kleine Winkel ignorieren |
Bei der Bestimmung der Schnittmaske wird auch erkannt, ob Kamera und Projektor gegeneinander verdreht waren. Dies kann das Programm korrigieren, besser ist natürlich den Fehler mechanisch korrigieren. Bei kleinen Fehlern lohnt sich die Korrektur nicht, deshalb kann man hier eine Schwelle eintragen. |
Ich habe 1 Grad verwendet. |
Umrisslänge |
Bei der Suche nach dem „Kreuz“ wird natürlich auch andere Flecken gefunden. Diese sind aber normalerweise deutlich kleiner als das Kreuz. Das wichtigste Kriterium ist deshalb die Länge. Trägt man einen negativen Wert ein wird die Bildbreite verwendet. |
Wenn das Kreuz fast das ganze Bild ausfüllt ist die Voreinstellung -1 ok. Sonst schauen wie breit so ein Kreuz ist und den Wert mit 4 multiplizieren und etwas abrunden. |
Mit dem Button „Speichern“ werden die obigen Einstellungen in der Registry gesichert. Diese Einstellungen werden beim Programmstart automatisch geladen.
Das Programm schneidet alle Bilder des primären Typs in einem Verzeichnis, das man mit dem „Verzeichnis wählen“ Button auswählen kann. Daraufhin werden alle Bilder mit dieser Endung in dem Ordner verarbeitet. Im optimalen Fall findet man einiges später alle Bilder geschnitten im gleichnamigem Ordner. Fast immer landen aber auch einige im Ordner „portrait“. Die Logik dabei ist folgende:
das Bild wird als Hochkant identifiziert → es wird als Hochkant geschnitten und in den „geschnitten“ Ordner geschrieben
das Bild wird als Breitkant identifiziert → es wird als Breitkant geschnitten und in den „geschnitten“ Ordner geschrieben
Das Programm ist sich nicht sicher und erzeugt beide Versionen, die Breitkant schreibt es in den „geschnitten“ Ordner und die andere in den „portrait“
Jetzt ist also natürliche Intelligenz gefragt. Man schaut sich die Bilder in „portrait“ an und macht damit folgendes:
es ist ein Breitkant Bild, durch den falschen Schnitt sieht man also nur den quadratischen Teil in der Mitte → man löscht es
es ist schwarz → man löscht es und schreibt sich die Nummer auf um zu klären was da passiert ist, ob da z.B. eine Lücke im Magazin war oder es Probleme bei der Aufnahme gegeben hatte und man es erneut abfotografieren muss.
Dann verschiebt man alle übriggebliebenen Bilder aus „portrait“ in „geschnitten“, dadurch ersetzen alle nicht automatisch als solche erkannten Hochkantbilder die falschen Breitkantversionen. Damit hat man jetzt alle richtig geschnittenen zusammen, zusätzlich die schwarzen. Sind es Lücken löscht man sie, sonst eben nochmal fotografieren. Wenn bis zu einem bestimmten Punkt wenig Bilder in „portrait“ sind, ab da aber fast alle kann es sein, dass man da irgendwie den Projektor oder die Kamera bewegt hat. Dann bleibt nur die Bilder in zwei Serien zu teilen und beide getrennt zu schneiden.
In seltenen Fällen meldet das Programm, dass es die Schnittmaske für schlecht hält. Dann sollte man sich zuerst mal die erzeugten Bilder mit Namen Kreuz… ansehen. Davon gibt es 3:
Kreuz_Grau.bmp: die überlagerten Bilder, auch bei 100 überlagerten kann man hier teils noch etwas erkennen
Kreuz_m2.bmp: m wie Monochrom und 2 weil die Auflösung verdoppelt ist. Das Bsp unten ist der Idealfall, ein recht scharfes weißes Kreuz auf schwarzem Grund.
Kreuz_u2.bmp: Nur die Umrisse auch wieder mit doppelter Auflösung. So ein Bild hier als ganzes zu zeigen wäre sinnlos, es ist fast ganz schwarz, deshalb nur ein kleiner Ausschnitt (etwa 1/40 der Breite)
Kreuz_Grau Kreuz_M2
Ausschnitt aus Kreuz_u2.bmp (Ecke oben rechts)
Je nachdem was man da sieht hat man zwei Möglichkeiten, entweder man erhöht die Anzahl Bilder aus denen die Maske gebildet wird, und versucht es erneut, oder man passt die Datei cut.csv per Hand an und startet den Prozess bei Schritt 2, dem eigentlichen Schneiden über den Button „cut.csv“ wählen. Hat man die Koordinaten aus den Kreuzen mit einer 2 am Ende muss man sie halbieren!
Steht bei Drehwinkel irgendwas >1 Grad sollte man die Ausrichtung Kamera/Projektor überprüfen. Das Programm dreht die Bilder dann zwar, aber dies dauert und verbessert die Qualität nicht.
Jetzt ist der Zeitpunkt die Bilder so zu sortieren wie man es haben will. Da alle Bilder mit der gleichen Belichtung gemacht wurden, muss da noch nachgebessert werden. Dazu habe ich den Batch Modus von Irfanview verwendet (Auto-Korrektur). Dies ist auch der Grund, dass das Schneideprogramm keine jpg sondern png Dateien erzeugt, jpg ist ja verlustbehaftet, und das sollte man nicht in einer Bearbeitungskette mehrmals haben. Dies würde natürlich auch dafür sprechen am Anfang nicht die jpgs der Kamera sondern die Raw-Bilder zu verwenden. Das wäre aber kompliziert und ich war mit dem Ergebnis zufrieden. Kompliziert, weit die verwendeten QT Bibliotheken kein nef lesen können. Eine Möglichkeit wäre mit einem RAW-Konverter die Bilder in ein unterstütztes verlustfreies Format wie eben png zu wandeln. Der Hauptgrund überhaupt die Raw Bilder zu speichern und umzubenennen ist, das man evtl einige wenige Bilder in besserer Qualität weiterverarbeiten will, also nicht nur für die Diashow.
Wie beschrieben kann es durch Synchronisationsproblemen zu Dubletten kommen, also zwei Aufnahmen des gleichen Dias. Diese zu finden ist vor allem wichtig, da normalerweise zu jeder Dublette ein anderes Dia fehlt. Dieses Problem hatte ich erst recht spät bemerkt. Da ich keine Lust hatte die 28000 Dias durchzusehen habe ich schnell ein Programm geschrieben, dass eine Vorauswahl trifft. Schnell bedeutet, es ist schnell geschrieben aber nicht sehr optimiert. Für ein optimaleres Programm hätte ich sicher Stunden Programmierzeit gebraucht aber nur deutlich weniger als eine Stunde Zeit bei der Nutzung gespart. Ziel war es eine möglichst kleine Zahl an verdächtigen Bildern dem User zu zeigen die aber möglichst alle Dubletten enthalten. Also eher tolerant und schnell beim Vergleich sein. Verglichen wird immer ein Bild mit dem nächsten. Dabei ist ein zweistufiges Verfahren raus gekommen:
fast gleiche Bilder sollten als jpg fast die gleiche Größe haben. Sind es weniger als 2% sind sie verdächtig. Dieser Vergleich geht sehr schnell, da die Bilder dafür nicht geladen werden müssen
Jetzt müssen sie geladen werden. Da 2 Fotos des gleichen Dias nie genau gleich sind verbietet es sich sie einfach pixelweise zu vergleichen, zumindest nicht in ihrer Originalauflösung. Ich reduziere sie auf 3*3 Pixel und vergleiche dann deren Farbwerte.
Mit dem „…“ Button kann man ein Verzeichnis auswählen. Dann startet das Programm. Es durchsucht alle Unterordner nach Bildern des primären Typs, außer Ordner mit dem Namen Doku (die sind für die Rahmen reserviert). Statt beide Schritte durchlaufen zu lassen, was doch einiges dauern würde, wird nach Schritt 1 bereits das erste verdächtige Bildpaar angezeigt. Sind sie gleich merkt man sich den Pfad. Während dessen wird im Hintergrund Schritt 2 auf die nächsten Bilder angewendet. Dann klickt man auf „> > >“ um das nächste Bilderpaar zu sehen. Dies kann etwas dauern. Unter den Bildern wird die Anzahl der restlichen Verdächtigen angezeigt. Aber keinen Schock bekommen, dies sind alle die nach Schritt 1 verdächtig sind. Klickt man auf den „> > >“ Button reduziert sich diese Zahl also meist um mehr als 1. Außerdem wird der Pfad angezeigt. Nach Schritt 1 sind einige Prozent verdächtig, nach Schritt 2 wenige Promille. Also auch bei meiner Menge an Dias war ich recht schnell durch. Ich habe so 10 Dubletten gefunden. Es ist also kein wirklich großes Problem.
So jetzt haben wir also die Dias als Digitalbilder vorliegen, aber da fehlt noch etwas. Viele werden wie ich ihre Dias beschriftet haben. Was macht man jetzt damit? Grundsätzlich gibt es mindestens drei Mög lichkeiten, abtippen, -scannen oder -fotografieren. Leider haben alle drei einen gravierenden Nachteil, man muss doch jedes Dia einzeln in die Hand nehmen, etwas das ich ja eigentlich verhindern wollte. Meine Methode war, die Dias auf ein Diasortierpult legen und abfotografieren. Bei Normalmagazinen geht dies recht schnell, bei LKM oder CS-Magazinen ist es leider recht viel Fummelei. Aber immerhin etwas, dass man z.B. beim TV-sehen o.ä. machen kann. Mein Pult hat Platz für 40 Dias. Man erhält also zunächst ein Bild wie das hier. Außer den Dias ist oben rechts noch der Aufkleber des Kastens zu sehen und ein Zettel mit „1-40“ Es sind also die ersten 40 Dias der Schiene U1. Und dann sind da noch die drei roten und der grüne Punkt. Statt dieses einen Bildes wollte ich 41 haben, also 40 Bilder mit je einem Rahmen und eines mit dem Aufkleber. Man kann natürlich ähnlich wie mit Diaprojektor und Kamera eine statische Anordnung von Pult und Kamera herstellen, Also die Kamera irgendwie mit einem Stativ über dem Pult positionieren, aber das war mir zu kompliziert. Also habe ich mir gedacht ich fotografiere es einfach aus der Hand, mit meinem Handy und versuche dann die Position des Pultes zu ermitteln. Hat man die 4 Ecken des Pultes ist es einfach aus dem einen Bild die 41 zu schneiden. Um die Ecken zu finden dienen die 4 farbigen Punkte. Wenn ich gewusst hätte, wie kompliziert es ist diese eindeutig zu erkennen, auch wenn die Lichtsituation mal anders ist, Ein Dia mit viel Rot da liegt o.ä. hätte ich wahrscheinlich die Stativlösung gewählt, aber da hatte ich schon fast alle Rahmen fotografiert. Ich glaube nicht, dass das Programm in einem Zustand ist für die Allgemeinheit geeignet zu sein. Es funktioniert nur mit meiner Geometrie, mit Punkten dieser Größe und Farbe,… Als Kompromiss habe ich die Routinen in das Programm aufgenommen und die vielen von der speziellen Geometrie abhängigen Konstanten gebündelt. Falls es jemand nutzen will sollte er sich bei mir melden. Dann werde ich mir überlegen wie man das Programm auf die wahrscheinlich andere Geometrie anpasst und diese Anleitung erweitern.
Sinnvoller als die farbigen Punkte wären evtl QR-Codes, wenn man denn eine Bibliothek findet, die die Position dieser in einem Bild findet.
Außerdem habe ich ein Programm, dass ein html erzeugt in dem man durch Eingabe der Zeit sich den passenden Rahmen anzeigen lassen kann, zusätzlich zu Infos die man als Text eingegeben hat. Vorausgesetzt natürlich, dass man eine Diashow hat bei der jedes Bild gleich lang angezeigt wird. Bei mir hat jede Show einen Vorspann von 16 und jedes Bild wird 7s angezeigt. Bin ich also bei 1:30 bin ich bei Bild (90s-16s)/7 =11 (aufgerundet). Also wird der 11. Rahmen angezeigt… Aber auch da wäre noch einiges an Arbeit nötig um es für normale User anzupassen. Dies würde ich nur machen wenn entsprechendes Interesse da ist.
Das Programm PostDiaDigit habe ich erst aus den einzelnen Programmen zusammengebaut nachdem ich schon fertig war, es also nie, außer zu Testzwecken, verwendet. Inzwischen benutzt ein Freund den Aufbau, aber mit dem gleichen Projektor und der gleichen Kamera (es ist seine ;-) ). Das Programm entstand also um mit dieser Konstellation zu funktionieren. Natürlich habe ich wenn immer möglich versucht es variabel zu halten. Ob dies reicht wird sich erst zeigen wenn andere es mit anderer Hardware nutzen. Ich wäre also dankbar für weitere Berichte unter Verwendung anderer Hardware und dafür nötiger Anpassung. Bei vertretbarem Aufwand bin ich gerne bereit auch Anpassungen auszuführen. Mögliche Probleme wären z.B. wenn deutlich mehr (oder weniger) Hochkant oder Breitkant Bilder enthalten sind, oder gar nur eines von beiden.
Dieses Programm steht unter der GPL V3 Lizenz.
Eine Kopie liegt dem Programm bei.
Der Quellcode sollte dort vorhanden sein wo auch das Programm verfügbar ist, zumindest aber auf meiner Homepage.
Wie gesagt wird das Programm und die Doku nur weiterentwickelt wenn es entsprechende Rückmeldungen gibt, denn ich habe meine Bilder fertig bearbeitet.
Dimitri Junker