Vor einigen Monaten hat sich ein JMP-Kunde mit dem technischen Support von JMP in Verbindung gesetzt, um Informationen über die Bildfunktionen in zu erhalten JMP 9 . Insbesondere hat der Kunde gefragt, ob es eine Funktion gibt, die zwei Bilder zusammenfügt. Der technische Support hat diese Frage an mich weitergeleitet.
Ich hatte in JMP 9 einige Bildfunktionen hinzugefügt, darunter auch einige Funktionen, mit denen ein einzelnes Bild bearbeitet werden konnte. Ich hatte jedoch keine Funktionen hinzugefügt, die sich auf mehrere Bilder auswirkten. Ich dachte über diese Anfrage nach und stellte fest, dass dies mit der vorhandenen Funktionalität in JSL (JMP Scripting Language) relativ einfach zu bewerkstelligen war.

Ich stellte schnell ein einfaches JSL-Skript zusammen, um zwei Bilder zusammenzufügen. Über die GUI kann der Benutzer zwei Bilder angeben und das Verhältnis von Image1 zu Image2 steuern. Es zeigt dem Benutzer auch das resultierende gemischte Bild an.
Die mit Image1 und Image2 beschrifteten Schaltflächen zeigen eine Dateiauswahl an und ermöglichen dem Benutzer das Navigieren zu den Bildern, die gemischt werden sollen. Sobald ein Bild ausgewählt ist, erhält der Benutzer eine kleine Ansicht des Bildes. Der Schieberegler definiert das Verhältnis von Image1 zu Image2. Wenn sich der Daumen links vom Schieberegler befindet, ist das Ergebnis 100% Image1. Ein zentrierter Daumen auf dem Schieberegler führt zu 50% Image1 und 50% Image2.
Der große Anzeigebereich oben zeigt die Ergebnisse der beiden gemischten Bilder. Das gemischte Bild hat die gleiche Größe wie die Originalbilder und die Größe des Anzeigebereichs wird entsprechend angepasst. Derzeit gehe ich davon aus, dass die beiden zu mischenden Bilder die gleiche Größe haben. Vielleicht füge ich vielleicht eine Logik hinzu, um den Fall zu behandeln, in dem sie unterschiedlich sind. Oder vielleicht lass ich das einfach als Übung für dich!
Die Motivation für diese Funktionalität war ursprünglich der Vergleich von Bildern vor und nach einem Tornado. Ein tödlicher EF5-Tornado hatte Joplin, Missouri, getroffen, und der JMP-Benutzer wollte diese Bilder auf gemischte Weise vergleichen. Ich googelte das Internet und fand einige Bilder, die vor und nach dem Tornado in Joplin aufgenommen wurden. Die Bilder waren nicht genau aufgereiht, aber sie waren nahe genug, um damit zu arbeiten. Ich habe die Bilder außerhalb von JMP ein wenig manipuliert, um sie besser aneinanderreihen zu können, und ich habe sie auf die gleiche Größe zugeschnitten. Hier ist ein Beispiel für einen Satz der Vorher- und Nachherbilder mit einer 50% -Mischung.

Sie können das gesamte JSL-Skript von herunterladen JMP-Dateiaustausch . Das Skript wird aufgerufen ImageBlend.jsl . Der interessanteste Code im Skript ist jedoch die eigentliche Mischfunktion:
doBlend = Ausdruck (
{mat1R, mat1G, mat1B} = img1 << getPixels ( "rgb" );
{mat2R, mat2G, mat2B} = img2 << getPixels ( "rgb" );
mat3R = mat2R * pro + mat1R * ( 1,0 - pro);
mat3G = mat2G * pro + mat1G * ( 1,0 - pro);
mat3B = mat2B * pro + mat1B * ( 1,0 - pro);
img3 << setPixels ( "rgb" {mat3R, mat3G, mat3B});
imgBlendBox << wieder aufführen;
);
Der Befehl getPixels ("rgb") gibt jedes Bild als eine Sammlung von drei Matrizen zurück - eine für jede Farbkomponente, Rot, Grün und Blau. Um die Bilder zu mischen, multiplizieren wir Image2 mit dem Prozentsatz und addieren diesen dann zu Image1, multipliziert mit 1 minus dem Prozentsatz. Wir stellen dann das resultierende Bild Image3 ein. Das ist alles dazu. Weitere Informationen zu getPixels () und anderen Bildfunktionen finden Sie in einem anderen Blogbeitrag von mir. Verbessern Sie Ihr Image mit JMP 9 .
Wenn Sie am JMP teilgenommen haben Discovery Summit 2011 Das kann Ihnen alles bekannt vorkommen. Ich habe es als Teil meiner Präsentation vorgeführt, Bild ist nicht alles, aber es ist sicher etwas in JMP 9 , obwohl Sie vielleicht erkennen, dass ich mich entschieden habe, die Schnittstelle etwas zu ändern.
Wie immer, lassen Sie mich wissen, was Sie denken.