2012-12-20 5 views
7

Ich arbeite an einem Bild-Stitching-Projekt, und ich verstehe, dass es verschiedene Ansätze gibt, mit Kontrast und Helligkeit eines Bildes umzugehen. Ich könnte natürlich mit diesem Thema fertig werden, bevor ich das Bild sogar genäht habe, aber dennoch ist das Ergebnis nicht so konsequent, wie ich es mir erhofft habe. Meine Frage ist also, ob es nach dem Sticken möglich ist, den Kontrast und die Helligkeit in Farbbildern "auszubalancieren" oder eher "auszugleichen"?Ausgleich von Kontrast und Helligkeit zwischen zusammengenähten Bildern

Antwort

4

Sie möchten die Histogrammausgleichsfunktion nicht für die gesamten Bilder, sondern für die Zone festlegen, in der sie sich berühren oder überlappen. Sie möchten offensichtlich identische Histogramme im Überlappungsbereich haben, daher berechnen Sie hier die Funktionen. Sie wenden dann die Entzerrungsfunktionen an, die dies auf die gesamten Bilder anwenden. Wenn Sie mehr als zwei Stiche haben, möchten Sie immer noch eine globale Entzerrung durchführen und dann eine gewichtete Anwendung der Überlappungsentzerrungsfunktionen verwenden, die die Auswirkung verringert, wenn Sie sich von der genähten Kante entfernen.

Entschuldigung, wenn dies alles für Sie bereits offensichtlich ist, aber Ihre allgemeine Frage führt mich zu einer allgemeinen Antwort.

+0

Können Sie mir vielleicht ein praktisches Beispiel zeigen? Ich verstehe die Konzepte, aber in OpenCV Implementierung ist es ein bisschen verloren. – JavaCake

4

Sie können sich die von OpenCV zur Verfügung gestellte Exposure Compensator class ansehen.

Belichtungskorrektur erfolgt in 3 Schritten:

  1. Erstellen Sie Ihren Belichtungs Kompensator

    Ptr<ExposureCompensator> compensator = ExposureCompensator::createDefault(expos_comp_type);

  2. Sie geben alle Ihre Bilder zusammen mit den linken oberen Ecken eines jeden von ihnen. Sie können die Masken standardmäßig vollständig weiß lassen, es sei denn, Sie möchten bestimmte Teile des Bilds angeben, an denen Sie arbeiten möchten.

    compensator->feed(corners, images, masks);

  3. Jetzt ist es alle Informationen hat, wie die Bilder überlappen, können Sie jedes Bild einzeln

    compensator->apply(image_index, corners[image_index], image, mask);

    in image

Das kompensierte Bild gespeichert wird kompensieren

+0

Haben Sie diesen Code funktioniert? – user65721

+0

Können Sie den Code teilen? Ich habe das versucht und konnte es nicht zum Funktionieren bringen! – user65721

+0

Ich versuche auch, das zu schaffen. Für weitere Informationen wird es im 'stepping_detailed.cpp' Beispiel aus den cpp Beispielprojekten implementiert. –

Verwandte Themen