Announcement

Collapse
No announcement yet.

JPEG-Grafik auf Pixelebene manipulieren / Optimierungen unterdrücken???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JPEG-Grafik auf Pixelebene manipulieren / Optimierungen unterdrücken???

    Hallo allerseits!

    Ich möchte eine JPEG-Grafik auf Pixelebene manipulieren. Dazu weise ich die geöffnete JPEG-Grafik einem TBitmap-Objekt mittels "Bitmap.Assign(JPEGGrafik);" zu, ändere die entsprechenden Pixel auf Bitebene und weise anschließend vor der Speicherung dem TJPEGImage-Objekt die geänderte Bitmap mittels "JPEGGrafik.Assign(Bitmap);" zu.

    Das Problem besteht darin, daß das JPEG-Format die Grafik auf Bitebene manipuliert um die Daten besser komprimieren zu können, wobei offensichtlich meine eigenen Änderungen auf Bitebene verlorengehen. Wie kann ich die Grafik exakt so speichern wie ich diese manipuliert habe - ohne daß mir irgendwelche automatischen Optimierungen "dazwischen funken"???

    Ich habe schon versucht entsprechende Eigenschaften(z.B.: ProgressiveEncoding, Smoothing, ...) auf FALSE zu setzen - ohne Erfolg. Beim nochmaligen Einlesen der entsprechenden Pixel finde ich den Farbwert NICHT so vor wie ich diesen manipuliert habe.

    Ich hoffe, daß mir jemand bei meinem Problem behilflich sein kann. Ich bin für jeden Hinweis dankbar.

    Gruß Ringo

  • #2
    Hi

    Die JPEG sollten einen Eigenschaft "Compression" o.ä. haben. Diese bestimmt inwieweit die JPEG komprimiert werden soll. Die Kompression MUSS also vollständig ausgeschaltet sein !!

    Gruß Hage

    Comment


    • #3
      Hallo Hagen!

      Eine solche Eigenschaft kann ich leider nicht finden. Man kann höchstens die Bildqualität auf 100% setzen. Dabei bin ich mir aber noch nicht sicher, ob die Pixel auf Bitebene optimiert werden. Wenn ich näheres weis, melde ich mich noch einmal.

      Gruß Ring

      Comment


      • #4
        Richtig, Bildqualität 100% nennt es sich.
        Ich war mir nicht so sicher, aber eine Kompresion um 50% bedeutet das die Bildqualität nur noch 50% ist !! Es ist also bei JPEG das gleiche.

        Also, es MUSS 100 % sein, bei 99% ist die Wahrscheinlichkeit das Pixel Informationen verloren gehen eben genau 1% !

        Gruß Hage

        Comment


        • #5
          Hi,

          jetzt habe ich sämtliche Varianten getestet, um ein JPEG-Image exakt zu einem Bitmap und umgekehrt zu konvertieren und zu speichern. Es gehen immer einige Farbinformationen verloren. Das konvertierte Bild sieht für das menschliche Auge zwar 100% gleich aus, aber auf Bitebene gibt es teilweise Abweichungen, die ich vermeiden muß.

          Der Fehler muß beim Konvertiervorgang liegen, da das Programm mit Bitmap-Dateien problemlos umgeht.

          Hagen: Könntest Du vielleicht einen Code-Schnipsel zu diesem Sachverhalt posten? Vielen Dank schon mal im Voraus und für sämtliche anderen Beiträge.

          Ich bin für jeden Hinweis dankbar.

          Gruß Ring

          Comment


          • #6
            Hi,

            Auf einer Internet-Seite habe ich folgendes gefunden:

            [...]
            A JPEG image is "lossy" even with 100% quality. This means that even with 100% JPEG Quality, some of the information in an image is lost when stored in JPEG format.
            [...]

            Gibt es eine JPEG-Komponente, die bei 100% Bildqualität wirklich alle Informationen speichert oder kennt jemand eine Internet-Seite auf der das JPEG-Format detailiert beschrieben wird????

            Gruß Ring

            Comment


            • #7
              Hi Ringo

              1. ich habe keinen Codeschnipsel <br>
              2. das JPEG Informationen verliert ist richtig <br>
              3. das das immer der fall ist, sein kann, ist mir neu <br>

              Normalerweise sollte ein geladenes JPEG und sofort gespeichertes JPEG doch 100% identisch sein ?
              Kannst Du nicht auf JPEG verzichten und auf GIF ausweichen ?
              Ich vermute Du willst in Richtung Steganographie/Watermarks und "versteckte" Informationen in JPEG's speichern ?
              In diesem Fall ist dieser Weg sowieso nicht der richtige.

              Gruß Hage

              Comment


              • #8
                Hi Hagen,

                Das mit dem Codeschnipsel hatte sich erledigt, da ich mir der Tatsache nicht bewußt war, daß JPEG auch bei 100% Bildqualität Informationen verliert. Nach ein paar Recherchen im Netz steht dieser Sachverhalt aber überall geschrieben. Nur eine relativ alte Implementierung aus den Anfängen des JPEG-Formats hatten keine Verluste. Bei Interesse findest Du unter folgender Adresse die Algorithmen(Version 6a oder so in Pascal) zur Kompression u. Dekompression:
                ftp://ftp.simtel.net:/pub/simtelnet/msdos/turbopas/pasjpg10.zip

                Du hast übrigens Recht, daß meine Bemühungen in Richtung Steganographie gehen. Aber wieso denkst Du, daß mein Weg nicht der Richtige ist? Was wäre denn der Richtige? Meine Algorithmen setzte ich ohne Probleme mit Bitmaps um. Oder meintest Du nur den Ansatz bei JPEGs? Bei JPEG muß ich, wie ich inzwischen erkannt habe, im Komprimierungsalgorithmus die zu versteckenden Informationen "einbringen". Doch damit muß ich mich mal beschäftigen, wenn ich mehr Zeit habe.

                Gruß Ring

                Comment


                • #9
                  Hi Ringo

                  Ok, Du gehst einen Weg in Richtung Steganographie (den einfachsten).
                  Bei Bitmap wird ja nur das unterste Farbbit geändert, und enthält somit die Informationen. Hoffentlich komprimierst und verschlüsselst Du die Infos bevor Du sie in der Bitmap versteckst.
                  Bei BMP's lohnen sich ECHT-Farbbitmaps, also BMP mit 3 Bytes pro Farbpixel ! (oder mehr) Sind sehr einfach zu manipulieren und können viele Daten aufnehmen. ABER, wirklich NUR das unterste Farbbit ändern, NICHT mehr.

                  GIF's kannst Du so NICHT nutzen da sie eine Farbtabelle mit max. 256 Einträgen nutzen. Hier werden 1-3 Einträge der Farbtabelle (möglichst alle die gleiche Farbe) geändert. heist z.B. bei GIF's malt man ein rotes Rechteck mit zwei verschiedenen Farbindexen auf das gleiche ROT. ABER, dieses läßt sich leicht entdecken wenn man die Farbtabelle ändert.

                  Bei JPEG's wird's komplizierter, haste ja gesehen.

                  Nun, A&O ist aber das die Informationen NICHT verloren gehen.

                  Ich erzähls mal so:
                  Im 2. Weltkrieg wurde eine andere Form von Steganographie benutzt. Man schrieb sich Briefe die bestimmte Schlüsselwörter in einer bestimmten Abfolge enthielten. Grundsätzlich ist die NIEMALS zu entschlüsseln da dem Angreifer die "Sprache" NICHT bekannt ist, bzw. die "Sprache" mit unbekannten Verknüpfungen/Bezügen arbeitet.
                  <br>
                  Z.b. "Wir treffen uns um die gleiche Zeit wie beim letzten mal an der Stelle wo wir uns kennenlernten".
                  <br>
                  Nun, was machten die Allierten und deutschen Spione, ganz einfach, sie öffneten solche potentiellen Briefen und schrieben sie UM
                  <br>
                  Z.b. "Wir treffen uns um die gleiche Zeit wie beim erstenmal an der Stelle wo wir uns knutschten".
                  <br>

                  Im Vergleich zu heute WIRD/WERDEN also Bitmaps manipuliert indem man einfachen Bildoperationen, wie Schärfe/Unschärfe etc. ausführt.
                  D.h. einen einfachen Algo wie Deiner kann man sehr leicht "zerstören".

                  Gruß Hage

                  Comment


                  • #10
                    Hi,

                    Ja, ich verschlüssele die Datei bevor die Daten in einer Bitmap mit mindestens 24-bit Farbtiefe versteckt werden, wobei auch nur ein Bit pro Pixel geändert wird. Der Initialisierungswert des Zufallsgenerators für die Wahl der Koodinaten ist ebenfalls vom Passwort abhängig.

                    Würde man ein Programm schreiben wollen, welches die Identität des Autors usw. in Grafiken versteckt, ist dieser Ansatz wegen verschiedener Filteroperationen nicht der Richtige. Mir ging es aber darum, möglichst viele Daten zu verstecken ohne daß dies bemerkt wird. Sämtliche Steganografie-Algorithmen, die das selbe Ziel haben(-> z.B. Steganos u.ä.) kann man mittels Grafikfilter "austricksen". Mir ist kein Algorithmus bekannt, der es ermöglicht viele Daten zu verstecken und bei einer zusätzlichen Manipulation(Filter) die Daten wiederherstellen kann.

                    Ich kann mir vorstellen, daß bei einer geringen Datenmenge(z.B. Identität des Autors) eine Art Checksumme errechnet werden kann, die auf einem öffentlichen Server hinterlegt wird und bei Bedarf verglichen wird. Durch eine geschickte Berechnung können so trotz irgendwelcher Filteroperationen die Anfangswerte dieser Berechnung erhalten bleiben.

                    Gruß Ring

                    Comment


                    • #11
                      Hi

                      Doch solche Algos gibt es, suche nach digitalen Wasserzeichen "Digital Watermarks". Viele dieser Algos sind geheim UND patentiert. Gundsätzlich werden die Daten aber mathem. inerpoliert mit den Bildinformationen, aber so das nicht EIN Pixel EIN Informationsbit liefert sondern eine durchschnittliche Gruppe von Pixeln einen durchschnittliches Informationsbit. Diese Algos können nur wenig Infos pro Bild verstecken, sind aber "sehr oft" resistent gegen einfachere Bildmanipulationen. Bei Digital Watermarks werden auch NICHT viele Informationen benötigt, Ein 16 Byte (128Bit) Finderabdruck oder eine 160-1024 Bit digitale Unterschrift ist vollkommen ausreichend !

                      Großes Manko bei 24Bit BMP's ist folgendes: Wandle die BMP in 16Bit mit optimierter Farbreduktion um, und dann zurück nach 24Bit umwandeln. Der optisch sichtbare Qualitätsverlust ist gering, Deine Steganodaten sind aber vollständig verloren !

                      Andere Frage, können wir in E-Mail Kontakt treten !?
                      mailto:[email protected] (noch bei AOL)

                      Gruß Hage

                      Comment

                      Working...
                      X