Ich habe die folgende Gleichung, die ich versuche zu implementieren. Die anstehende Frage nicht unbedingt zu dieser Gleichung ist, sondern ganz allgemein auf, wie man mit einer Division durch Null in der Bildverarbeitung zu tun:Handle "Division durch Null" in der Bildverarbeitung (oder PRNU Schätzung)
Hier I
ein Bild ist, W
ist der Unterschied zwischen dem Bild und seine denoised-Version (so, W
drückt das Rauschen in dem Bild aus) und K
ist ein geschätzter Fingerabdruck, der aus d
Bilder der gleichen Kamera gewonnen wurde. Alle Berechnungen erfolgen pixelweise; also die Gleichungen nicht beinhalten eine Matrixmultiplikation. Für mehr über die Idee der Schätzung digitaler Fingerabdrücke konsultieren Sie entsprechende Literatur wie die allgemeinen wikipedia article oder scientificpapers.
Mein Problem tritt jedoch auf, wenn ein Bild ein Pixel mit dem Wert Null hat, z. perfektes Schwarz (nehmen wir an, wir haben nur ein Bild, k=1
, so wird die Zero nicht zufällig durch den Pixelwert des nächsten Bildes überschrieben, wenn der nächste Pixelwert ungleich Null ist). Dann habe ich eine Division durch Null, die anscheinend nicht definiert ist.
Wie kann ich dieses Problem lösen? Eine Option, die ich mir ausgedacht habe, war das Hinzufügen von +1
zu allen Pixeln, kurz bevor ich mit den Berechnungen beginne. Dies verschiebt jedoch den Bereich der Pixelwerte von [0|255]
zu [1|256]
, was es dann unmöglich macht, mit dem Datentyp uint8
zu arbeiten.
Andere Autoren in den Arbeiten, die ich zu diesem Thema gelesen habe, berücksichtigen oft nicht, dass Werte die Bereichsgrenzen schließen. Zum Beispiel berechnen sie nur die Gleichung für Pixelwerte [5|250]
. Sie begründen dies, nicht wegen des numerischen Problems, aber sie sagen, wenn ein Bild vollständig gesättigt oder völlig schwarz ist, kann der Fingerabdruck in diesem Bereich nicht einmal richtig geschätzt werden.
Aber wieder, mein Hauptanliegen ist nicht, wie dieser Algorithmus am besten funktioniert, sondern eher im Allgemeinen: Wie mit Divisionen durch 0 in der Bildverarbeitung umzugehen?
Kannst du bitte klarstellen, was meinst du mit "I_k ist ein Bild"? Was ist das mathematische Modell eines Bildes? – Matsmath
Es ist eine 2D Matrix. Z.B. jeder Eintrag in der Matrix entspricht einem Pixel im Bild; also sind die Matrix-Dimensionen gleich der Auflösung des Bildes. Bedenken Sie jedoch, dass die Mathematik nicht den regulären "Matrix-Berechnungsregeln" folgt, da alle Operationen elementweise ausgeführt werden (nehmen Sie ein Pixel von I_k (x, y) und multiplizieren Sie es mit W_k (x, y) im Zähler) zum Beispiel) – muuh
So wie ich dachte. Was meinst du mit * dividieren * durch die Summe der Matrizen 'I_k^2'? – Matsmath