[Mathematische Modellierung] 2023 Shenzhen Cup && Mathematische Modellierung der drei östlichen Provinzen Thema B: Urheberrechtsschutz elektronischer Ressourcen (DCT-basiertes Modell zur Einbettung dunkler Wasserzeicheninformationen)

Antworten Sie auf den offiziellen Account am Ende des Artikels: 深圳杯B题, um den vollständigen Inhalt zu erhalten.
Der Text, die Formeln und Codes dieses Artikels werden alle teilweise angezeigt.

1. Thema

Frage B Urheberrechtlicher Schutz elektronischer Ressourcen

Das Urheberrecht, auch Urheberrecht genannt, umfasst das Recht auf Veröffentlichung, Urheberschaft, Änderung, Schutz der Integrität des Werks, Vervielfältigung, Verbreitung, Vermietung, Ausstellung, Aufführung, Projektion, Ausstrahlung, Verbreitung von Informationsnetzwerken, Verfilmung und Anpassungsrechte sowie Übersetzung Rechte, Zusammenstellungsrechte und andere Rechte, die dem Urheberrechtsinhaber zustehen sollten.

Heutzutage werden mit der weit verbreiteten Nutzung von Computernetzwerken immer mehr elektronische Ressourcen schnell über das Netzwerk übertragen. Gleichzeitig wird die Frage, wie das Urheberrecht an elektronischen Ressourcen geschützt werden kann, immer wichtiger. Dieses Problem ist auch eines der zentralen Themen im Bereich der Informationssicherheit. Die Technologie des digitalen Wasserzeichens (elektronisches Wasserzeichen) ist eine der Schlüsseltechnologien zur Lösung dieses Problems. Da jedoch sichtbare Wasserzeichen (sichtbare Wasserzeichen) bei der Anwendung auf den Urheberrechtsschutz elektronischer Bilder häufig die Struktur des Bildes selbst zerstören und die eingebetteten Informationen sichtbar sind, können sie leicht identifiziert und entfernt werden. Daher ist die Steganographie weit verbreitet und wird häufig eingesetzt.

Die Steganographie gilt allgemein als wichtiger Zweig des Information Hiding, der sich darauf spezialisiert hat, tatsächlich vorhandene Informationen zu verbergen. Die Steganographie hat eine lange Geschichte, wobei einige Fälle Hunderte von Jahren vor Christus zurückreichen. Aufgrund der rasanten Entwicklung der Computer- und Internettechnologie geht man davon aus, dass die Forschung zur modernen Steganographie-Technologie bereits in den 1990er Jahren begonnen hat. Da die steganografische Technologie bestimmte Informationen in den Informationsträger einbetten kann und nicht leicht zu erkennen ist, kann sie in großem Umfang in den Bereichen Urheberrechtsschutz, Datenergänzung und anderen Bereichen eingesetzt werden.

  • Frage 1: Erstellen Sie für das Bild P in Anhang 1 ein mathematisches Modell zur Generierung des Bildes SP mit eingebetteten Informationen „Shenzhen Cup Mathematical Modeling Challenge“, damit das Bild SP im menschlichen Sehvermögen dem Originalbild P so nahe wie möglich kommt. Entwerfen und implementieren Sie den Algorithmus zum Generieren von Bild-SP, fügen Sie den generierten SP-Quellcode und das resultierende Bild-SP in Anhang A des Eintrags ein; geben Sie den Quellcode an, der zum Extrahieren von Urheberrechtsinformationen aus dem Bild-SP verwendet wird, und fügen Sie ihn in Anhang B des Eintrags ein .
  • Frage 2 Ist es mit dem Modell und Algorithmus in Frage 1 möglich, alle Textinformationen im „Urheberrechtsgesetz der Volksrepublik China“ (dritte Änderung) [1] in das Bild in Anhang 1 einzubetten? Wenn nicht, wie viel kann maximal eingebettet werden?
  • Frage 3 Bei der elektronischen Bildübertragung kann es zu einer Komprimierung oder Speicherung in unterschiedlichen Bildformaten, zu Skalierungen, Drehungen oder anderen geometrischen Verformungen kommen . Ist der Algorithmus in Frage 1 zu diesem Zeitpunkt noch verwendbar? Wenn nicht, wie kann es verbessert werden?
  • Frage 4 Wenn Sie das Urheberrecht anderer elektronischer Bilder schützen möchten, worauf sollten Sie bei der Verwendung des Algorithmus in Frage 1 achten? Bitte geben Sie höchstens drei Vorsichtsmaßnahmen an und erklären Sie, warum.

Verweise


[1] http://www.gov.cn/guoqing/2021-10/29/content_5647633.htm

2. Ideen und Antworten

2.1 Frage 1

2.11 LSB-Methodentest

Dies kann mit der lsb-Methode erreicht werden.

LSB-Steganographie ist eine Technologie, die das niedrigstwertige Bit (Least Significant Bit, LSB) eines Bildes verwendet, um Informationen zu verbergen. Jedes Pixel des Bildes besteht aus drei Farben (Rot, Grün und Blau), und jede Farbe belegt 8 Bit, also ein Byte. Die LSB-Steganographie besteht darin, das binäre Bit der zu verbergenden Informationen durch das niedrigste Bit jedes Pixels des Bildes zu ersetzen, um die Einbettung von Informationen zu realisieren. Da das niedrigste Bit kaum Auswirkungen auf die Bildqualität hat, ist es für das menschliche Auge schwierig, den Unterschied zu erkennen, sodass diese Methode eine bessere Verdeckung bietet.

Sie können die Stegano-Bibliothek aufrufen, um zu testen und zu sehen, wie die lsb-Methode funktioniert:

  • Die Bibliothek erfordert, dass das Eingabebild im PNG-Format vorliegt. Konvertieren Sie daher zunächst das Originalbild in das PNG-Format.
  • Die Bibliothek unterstützt Chinesisch nicht gut (UTF-8 wird sofort verwendet), daher kodiert dieser Artikel zunächst die einzubettenden Informationen mit Base64 und bettet sie dann in das Bild ein.
  • Beim Parsen der Informationen im Bild ist der Vorgang umgekehrt.
...

# 嵌入信息到图片中
def embed_info(image_path, message, output_path):
    # 把中文转换为base64编码
    message = base64.b64encode(message.encode('utf-8')).decode('ascii')
    secret = lsb.hide(image_path, message)
    secret.save(output_path)

# 从图片中提取信息
def extract_info(image_path):
    secret_message = lsb.reveal(image_path)
    # 把base64编码还原为中文
    secret_message = base64.b64decode(secret_message.encode('ascii')).decode('utf-8')
    return secret_message

...

Operationsergebnis:
Fügen Sie hier eine Bildbeschreibung ein

Originalbild:
Fügen Sie hier eine Bildbeschreibung ein
Bild nach dem Einbetten von Informationen:
Fügen Sie hier eine Bildbeschreibung ein
Die Größe der beiden Bilder ist gleich und es ist kein Unterschied erkennbar, da die Menge der eingebetteten Informationen im Vergleich zur Bildgröße relativ gering ist und nur etwa 0,02 % ausmacht (24). Bytes/1228800 Bytes).

Es gibt viele Methoden und Indikatoren zum Vergleichen der Differenz zwischen zwei Bildern, wie z. B. der mittlere quadratische Fehler (MSE), der Strukturähnlichkeitsindex (SSIM) usw. Diese Methoden berechnen den Grad des Unterschieds zwischen zwei Bildern basierend auf den Pixelwerten der Bilder. Je kleiner der Unterschied, desto ähnlicher sind die Bilder.

Code:

...

# 定义MSE函数
def mse(imageA, imageB):
    # 计算两张图片之间的均方误差
    # 两张图片必须有相同的尺寸
    err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
    err /= float(imageA.shape[0] * imageA.shape[1])

    # 返回MSE值,越小越相似
    return err

...

Ergebnisse:
Fügen Sie hier eine Bildbeschreibung ein
Es ist ersichtlich, dass nach der Einbettung der „Shenzhen Cup Mathematical Modeling Challenge“ der Unterschied zwischen den beiden Bildern sehr, sehr gering ist.

Wenn auch der zweite Absatz des Titels in das Bild eingebettet wird, wird der Unterschied noch etwas größer.
Fügen Sie hier eine Bildbeschreibung ein

2.12 LSB-Methodenmodellierung

Die obige Methode zeigt, dass es möglich ist, die lsb-Methode zum Einbetten von Informationen in Bilder zu verwenden. Daher erstellen wir das mathematische Modell der lsb-Methode und programmieren nach dem Prinzip der lsb-Methode.

Da das im Titel angegebene Bild im JPG-Format vorliegt, unterstützen das Modell und der Code in diesem Abschnitt die Eingabe des Originalbilds im JPG-Format.

Nach dem Einbetten der Informationen in das ursprüngliche JPG-Bild kann dieses jedoch nicht im JPG-Format gespeichert werden, da JPG nicht garantieren kann, dass überhaupt keine Details verloren gehen, was die eingebetteten Informationen beeinträchtigen würde. Daher sollte die Ausgabe verlustfrei im PNG-Format gespeichert werden , damit der RGB-Wert jedes Pixels des Bildes vollständig aufgezeichnet werden kann.

mathematisches Modell:

Das Grundprinzip dieser beiden Funktionen besteht darin, das niedrigstwertige Bit (LSB) des Bildes zum Einbetten und Extrahieren von Informationen zu verwenden. Bei dieser Methode handelt es sich um eine einfache Steganographietechnik, bei der Informationen durch Modifizierung der niedrigstwertigen Bits eines Bildpixels eingebettet werden, da die Modifizierung nur geringe oder gar keine visuelle Auswirkung auf das Bild hat und nahezu nicht wahrnehmbar ist.

Das Folgende ist das mathematische Modell dieser beiden Funktionen:

  1. Informationen einbetten :

    Konvertieren Sie jedes Zeichen cin der Nachricht messagein eine 8-Bit-Binärdarstellung b(c). Dann iterieren Sie über jedes Pixel des Bildes (r, g, b)und ersetzen Sie das niedrigstwertige Bit jedes Farbkanals durch b(c)ein einzelnes Bit von . Dies kann durch die folgende Formel dargestellt werden:

    . . . ...... . . . ...... . . . ......

    Darunter ist der neue Pixelwert, das Bit von und die Modulo-Operation r'.g'b'b(c)_ib(c)imod
    Fügen Sie hier eine Bildbeschreibung ein

  2. Informationen extrahieren :

    Durchläuft jedes Pixel des Bildes (r, g, b)und extrahiert Informationsbits aus den niedrigstwertigen Bits jedes Farbkanals. Diese Informationsbits werden dann zu einer 8-Bit-Binärdarstellung kombiniert und in Zeichen umgewandelt. Dies kann durch die folgende Formel dargestellt werden:

    b ( c ) i = rmod 2 b(c)_i = r mod 2b ( c )ich=r m o d 2 . . . ...... b ( c ) i + 2 = bmod 2 b(c)_{i+2} = b mod 2b ( c )ich + 2=bm o d 2
    wobeidas Bit vonb(c)_iist,was eine Modulo-Operation ist. Dannkonvertieren wir in ein Zeichen.b(c)imodb(c)c


Code:

# -*- coding: UTF-8 -*-

...
# 嵌入信息到图片中
def embed_info(image_path, message, output_path):
    # 把中文转换为base64编码
    message = base64.b64encode(message.encode('utf-8')).decode('ascii')
    # 把信息转换为二进制位
    bits = ''.join(format(ord(x), '08b') for x in message)
    info_len = len(bits)
    # 打开图片
    img = Image.open(image_path)
    # 获取图片的宽度和高度
    width, height = img.size
    # 获取图片的像素数据
    pixels = img.load()
    # 初始化索引
    index = 0
    # 遍历每个像素
    for x in range(width):
        for y in range(height):
            # 获取当前像素的RGB值
            r, g, b = pixels[x, y]
            # 如果还有未嵌入的信息位
            if index < info_len:
                # 把当前像素的红色分量的最低有效位替换为信息位
                r = int(format(r, '08b')[:-1] + bits[index], 2)
                # 索引加一
                index += 1
            # 如果还有未嵌入的信息位
            if index < info_len:
...

Inspektion der Informationsanalyse:
Fügen Sie hier eine Bildbeschreibung ein

Ähnlichkeitstest: Der mittlere quadratische Fehler ist niedriger als der der verwendeten Bibliothek und der strukturelle Ähnlichkeitsindex ist etwas höher, was mit bloßem Auge immer noch nicht erkennbar ist.

Fügen Sie hier eine Bildbeschreibung ein

Ausgabebild:
Fügen Sie hier eine Bildbeschreibung ein

2.2 Frage 2

Das Ergebnis ist in Ordnung.

Grund:

  • Die Abmessungen des Originalbildes betragen 1280*1896. 3 * 1280*1896Gemäß dem lsb-Modell in diesem Artikel gibt es insgesamt binäre Bits, die zum Speichern von Informationen verwendet werden können:
  • In diesem Artikel wird das „Urheberrecht der Volksrepublik China“ als TXT-Datei mit einer Größe von 33 KB gespeichert und nach der Codierungskonvertierung im Modell schließlich durch Binärbits dargestellt 349952.
  • Die Anzahl der zu verbergenden Informationsbits ist viel kleiner als die Anzahl der für die Speicherung in einem Bild verfügbaren Bits. So können Sie alle Textinformationen in das Bild im Anhang 1 einbetten.

Effekt der Informationseinbettung:
Fügen Sie hier eine Bildbeschreibung ein

Unterschiede vor und nach den Bildern:
Fügen Sie hier eine Bildbeschreibung ein

2.3 Frage 3

Die vorherige lsb-Methode ist sehr effektiv und hat nur minimale visuelle Auswirkungen auf das Bild.

Wenn ein Bild jedoch komprimiert oder in einem anderen Bildformat gespeichert wird, kann es auch skaliert, gedreht oder auf andere Weise geometrisch verformt werden.

Der vorherige Algorithmus zum Einbetten von Informationen kann die eingebetteten Informationen nicht aus dem Bild extrahieren. (Da diese Vorgänge möglicherweise die niedrigstwertigen Bits des Pixelwerts ändern und somit die eingebetteten Informationen zerstören.)

Daher muss der Algorithmus verbessert werden.

2.31 Übersicht über Methoden und Schritte

Es kann eine Technik namens „robustes“ Verstecken von Informationen eingesetzt werden. Das Ziel robuster Techniken zum Ausblenden von Informationen besteht darin, verborgene Informationen nach der Bildverarbeitung (z. B. Komprimierung, Skalierung, Drehung usw.) zu extrahieren. Hier sind einige mögliche Verbesserungsmöglichkeiten:

  1. Verwenden Sie ausgefeiltere Einbettungstechniken : zum Beispiel die Informationseinbettung mithilfe von Frequenzbereichsmethoden wie der diskreten Kosinustransformation (DCT) oder der diskreten Wavelet-Transformation (DWT). Diese Methoden verbergen Informationen im Frequenzbereich des Bildes und nicht direkt im räumlichen Bereich wie LSB. Auf diese Weise können verborgene Informationen auch nach einer gewissen Bearbeitung des Bildes extrahiert werden.

  2. Verwenden Sie fehlerkorrigierende Codierung : Verwenden Sie beispielsweise fehlerkorrigierende Codierung wie Hamming-Codes oder Reed-Solomon-Codes, um versteckte Informationen zu codieren. Selbst wenn ein Teil der Informationen während der Bildverarbeitung zerstört wird, können auf diese Weise die ursprünglichen Informationen durch Fehlerkorrekturcodierung wiederhergestellt werden.

  3. Verwendung von Wasserzeichentechnologie : Wasserzeichen ist eine spezielle Technik zum Verbergen von Informationen, deren Ziel darin besteht, eine Kennung in einem Bild zu verbergen, die auch nach der Verarbeitung des Bildes erkannt werden kann. Wasserzeichentechniken verwenden in der Regel einige komplexe Einbettungs- und Extraktionsalgorithmen, um die Robustheit zu verbessern.

  4. Verwenden Sie leistungsfähigere Methoden des maschinellen Lernens : Verwenden Sie beispielsweise Deep Learning zum Ausblenden und Extrahieren von Informationen. Deep Learning kann lernen, wie Informationen verborgen bleiben und bei verschiedenen Bildverarbeitungsvorgängen extrahiert werden, wodurch die Robustheit verbessert wird.

Alle oben genannten Methoden können die Robustheit der Technologie zum Verbergen von Informationen verbessern. Es sollte jedoch auch beachtet werden, dass die Verbesserung der Robustheit normalerweise zu Lasten einiger verborgener Informationskapazität geht. Bei der Verwendung zum Schutz des Urheberrechts müssen jedoch nicht viele Informationen in das Bild eingebettet werden.

In diesem Artikel wird die Wasserzeichentechnologie zur Informationseinbettung verwendet (dunkle Wasserzeichen, für das bloße Auge unsichtbar).


Die Hauptschritte sind:

  1. Erzeugen Sie ein Wasserzeichenbild (quadratisch);
    • Berechnen Sie die entsprechende Zeilenanzahl anhand der Textlänge;
    • Erstellen Sie ein leeres Bild.
    • Zeichne Text auf das Bild.
    • Bild speichern.
  2. eingebettetes Wasserzeichen;
    • Rechts…
  3. Extrahieren Sie das Wasserzeichen.
    • Stellen Sie mit Wasserzeichen versehene Bilder in einen Zustand wieder her, der dem Originalbild so nahe wie möglich kommt (zum Drehen, Zuschneiden und Skalieren);
    • …;
    • Führen Sie eine Arnold-Umkehrtransformation für das extrahierte Wasserzeichenbild durch (wenn es sich bei der eingebetteten schwarzen Seide um ein Arnold-transformiertes Wasserzeichenbild handelt).

2.32 DCT-basiertes Einbettungsmodell für dunkle Wasserzeicheninformationen

2.32 - 1 Erzeugung von Wasserzeichenbildern

Haupt code:

def create_watermark(text, font_path, font_size=26, opacity=100):
    # Calculate lines
    n = int(math.sqrt(len(text))) + 1
    lines = [text[i:i + n] for i in range(0, len(text), n)]
    # Create a blank image with white background
    width, height = n * font_size, n * font_size
    img = Image.new('RGBA', (width, height), (255, 255, 255))
    # Load font
    font = ImageFont.truetype(font_path, font_size)
    # Initialize ImageDraw
    draw = ImageDraw.Draw(img)
    # Set text color
    text_color = (0, 0, 0, opacity)
    # Draw text on image
    for i, line in enumerate(lines):
        # Calculate the width of the line
        text_bbox = draw.textbbox((0, 0), line, font)
        line_width = text_bbox[2] - text_bbox[0]
        # Calculate the x coordinate to center the line
        x = (width - line_width) / 2
        draw.text((x, i * font_size), line, font=font, fill=text_color)
    # Save the image
    img.save('watermark.png', 'PNG')

Wasserzeichenbild:
Fügen Sie hier eine Bildbeschreibung ein

2.32 – 2 Wasserzeichenbild Arnold beim Durcheinander

Dies dient dazu, die Wasserzeicheninformationen zu verschlüsseln, sodass die Informationen gleichmäßig verteilt werden, mögliche Verluste reduziert werden und gleichzeitig verhindert wird, dass das Wasserzeichen von anderen extrahiert und manipuliert wird.

Arnold Scrambling ist eine Bildverschlüsselungstechnologie, bei der es sich um eine von VI Arnold vorgeschlagene zweidimensionale Bildverschlüsselungstransformationsmethode handelt. Seine Grundidee besteht darin, das Bild als Funktion auf einer zweidimensionalen Ganzzahlebene zu betrachten und dann die Pixelpositionen des Originalbilds durch eine bestimmte geometrische Transformation zu verschlüsseln, um den Zweck der Bildverschlüsselung zu erreichen.

Die Grundformel des Arnold-Scramblings lautet wie folgt:

Für jedes Pixel (x, y) im Bild kann nach der Arnold-Verschlüsselung die neue Position (x', y') des Pixels mit der folgenden Formel berechnet werden:

. . . ...... y ′ = ( x + 2 y ) mod N y' = (x + 2y) mod Nj'=( x+2 J. ) m o d N

Unter diesen ist N die Breite oder Höhe des Bildes (vorausgesetzt, das Bild ist quadratisch) und mod ist die Modulo-Operation.

Der umgekehrte Vorgang der Arnold-Verschlüsselung, also der Entschlüsselungsprozess, kann mit der folgenden Formel durchgeführt werden:

x = ( 2 x ′ − y ′ ) mod N x = (2x' - y') mod NX=( 2x _'j )moderdNy = . . . und =...j=...

Diese beiden Formelsätze sind die Grundformeln des Arnold-Scramblings und seiner umgekehrten Operation. Durch diese beiden Formelsätze können Bildverschlüsselungs- und -entschlüsselungsvorgänge realisiert werden.


Wirkung:
Eine Wiederholung von Arnolds Scrambling:

Teil des Codes:

# 对水印图片进行 Arnold 置乱
def arnold_scramble(image, iterations):
    # Convert the image to a numpy array
    array = np.array(image)
    # Get the size of the image
    height, width, _ = array.shape
    # Create an empty array to hold the scrambled image
    scrambled_array = np.empty_like(array)
    # Perform the scrambling
    for _ in range(iterations):
        for y in range(height):
            for x in range(width):
                scrambled_array[x,y] = array[(x + y) % height, (x + 2 * y) % width]
        array = scrambled_array.copy()
    # Convert the scrambled array back to an image
    scrambled_image = Image.fromarray(np.clip(scrambled_array, 0, 255).astype('uint8'))

    return scrambled_image

2.32 – 2 Einbettung von Wasserzeichen

In diesem Artikel wird die DCT-basierte Technologie für dunkle Wasserzeichen verwendet. Das heißt, das Wasserzeichenbild wird in den Frequenzbereich des Bildes eingebettet und nicht in den Raumbereich des vorherigen LSB.

Im Ergebnis der diskreten Kosinustransformation (DCT) enthält der niederfrequente Teil normalerweise die meisten Informationen des Bildes, wie z. B. Farb- und Helligkeitsänderungen. Dies liegt daran, dass die meisten Bereiche des Bildes normalerweise eine ähnliche Farbe und Helligkeit aufweisen und diese Informationen als niederfrequente Komponenten im Frequenzbereich erscheinen. Daher können Sie sehen, dass es in der oberen linken Ecke (Niederfrequenzteil) des DCT-Bildes mehr helle Flecken gibt.
Fügen Sie hier eine Bildbeschreibung ein

Im Gegensatz dazu enthält der Hochfrequenzteil die Details und Texturinformationen des Bildes, wie z. B. Kanten und Texturen. Diese Informationen erscheinen als Hochfrequenzkomponenten im Frequenzbereich. Daher können Sie sehen, dass es in der unteren rechten Ecke (Hochfrequenzteil) des DCT-Bildes einige helle Flecken gibt, aber normalerweise weniger als im Niederfrequenzteil.

Der mittlere Bereich liegt irgendwo dazwischen und enthält einige Farb- und Helligkeitsvariationen sowie einige Detail- und Texturinformationen.

In der Frequenzbereichsdarstellung eines Bildes enthält der Hochfrequenzteil normalerweise die wenigsten Informationen. Das ist weil…

andererseits,…

Daher gilt der Zwischenfrequenzteil im Allgemeinen als der beste Ort zum Einbetten von Wasserzeichen. Der Mittelfrequenzteil enthält einige Farb- und Helligkeitsänderungen sowie einige Detail- und Texturinformationen, sodass das Einbetten eines Wasserzeichens in diesen Teil den visuellen Effekt des Bildes wahrscheinlich nicht wesentlich verändern wird. Da es gleichzeitig weniger wahrscheinlich ist, dass die Informationen im Zwischenfrequenzteil verworfen werden, wenn das Bild komprimiert oder in der Auflösung reduziert wird, ist es auch wahrscheinlicher, dass das in diesem Teil eingebettete Wasserzeichen erhalten bleibt.

Daher besteht dieser Artikel darin, das Wasserzeichen nach der DCT-Transformation in den Zwischenfrequenzteil des Bildes einzubetten.


Das Folgende ist natürlich die Formel für die diskrete Kosinustransformation (DCT).

Für ein eindimensionales Signal lautet die Formel der DCT wie folgt:

Für eine reelle Zahlenfolge x(n) der Länge N ist ihre DCT-Transformation X(k) und die Berechnungsformel lautet:

. . . ......

Darunter n=0,1,...,N-1; k=0,1,...,N-1.

Ein 2D-Bild können wir uns als Signal in zwei Richtungen (x und y) vorstellen, sodass für jede Richtung eine separate DCT durchgeführt werden kann. Alle Signale werden zunächst in eine Richtung (z. B. Zeile) DCT-transformiert und dann in die andere Richtung (z. B. Spalte) DCT-transformiert. Auf diese Weise erhalten wir die zweidimensionale DCT-Transformation.

Die Formel der zweidimensionalen DCT lautet wie folgt:

F ( u , v ) = C ( u ) C ( v ) / 4 ∗ sumx = 0 M − 1 sumy = 0 N − 1 f ( x , y ) cos [ ( 2 x + 1 ) u ∗ pi / 2 M ] cos [ ( 2 y + 1 ) v ∗ pi / 2 N ] F(u,v) = C(u)C(v)/4 * sum_{x=0}^{M-1} sum_{y= 0}^{N-1} f(x,y) cos [ (2x+1)u*pi / 2M ] cos [ (2y+1)v*pi / 2N ]F ( u ,v )=C ( u ) C ( v ) /4ähm _ _x = 0M 1ähm _ _y = 0N 1f ( x ,y ) cos [( 2 x+1 ) up i /2 M [ cos ] ( 2 y+1 ) Vp i /2 N ]

Unter diesen sind x und y die Koordinaten des Bildes, M und N sind die Breite und Höhe des Bildes, F(u, v) ist der Wert im Frequenzbereich, f(x, y) ist der Wert im Zeitbereich, u und v sind Frequenz. C(u) und C(v) sind Normalisierungskoeffizienten. Wenn u oder v 0 ist, ist C(u) oder C(v) 1/√2, andernfalls ist es 1.

Diese Formeln basieren alle auf der Kosinusfunktion, weshalb sie „diskrete Kosinustransformation“ genannt wird.

Für ein eindimensionales Signal lautet die Formel für die inverse DCT wie folgt:

Für eine reelle Zahlenfolge X(k) der Länge N ist ihre inverse DCT-Transformation x(n) und die Berechnungsformel lautet:

x ( n ) = sumk = 0 N − 1 X ( k ) cos [ ( pi / N ) ( n + 1 / 2 ) k ] , n = 0 , 1 , . . . , N − 1 x(n) = sum_{k=0}^{N-1} X(k) cos [ (pi/N) (n + 1/2) k ], n = 0, 1, .. ., N-1x ( n )=ähm _ _k = 0N 1X ( k ) cos [ ( pi / N ) ( n+1/2 ) k ] ,N=0 ,1 ,... ,N1

Darunter n=0,1,...,N-1; k=0,1,...,N-1.

Bei einem 2D-Bild können wir es uns als Signal in zwei Richtungen (u und v) vorstellen, sodass eine inverse DCT für jede Richtung separat durchgeführt werden kann. Alle Signale werden zunächst in eine Richtung (z. B. Zeile) invers DCT-transformiert und dann in die andere Richtung (z. B. Spalte) invers DCT-transformiert. Auf diese Weise erhalten wir die zweidimensionale inverse DCT-Transformation.

Die Formel der zweidimensionalen inversen DCT lautet wie folgt:

. . . ......

Unter diesen sind x und y die Koordinaten des Bildes, M und N sind die Breite und Höhe des Bildes, F(u, v) ist der Wert im Frequenzbereich, f(x, y) ist der Wert im Zeitbereich, u und v sind Frequenz. C(u) und C(v) sind Normalisierungskoeffizienten. Wenn u oder v 0 ist, ist C(u) oder C(v) 1/√2, andernfalls ist es 1.

Wirkungsdemonstration:

alpha=0.1

Fügen Sie hier eine Bildbeschreibung ein
alpha = 0.9

Fügen Sie hier eine Bildbeschreibung ein

Teil des Codes:

# 对原始图像执行离散余弦变换(DCT)
def perform_dct(original_array):
    height, width, _ = original_array.shape
    dct_blocks = np.empty_like(original_array, dtype=np.float64)
    for i in range(0, height, 8):
        for j in range(0, width, 8):
            dct_blocks[i:i + 8, j:j + 8] = dct(dct(original_array[i:i + 8, j:j + 8], axis=0, norm='ortho'), axis=1,
                                               norm='ortho')
    return dct_blocks


# 将水印嵌入到DCT块中
def embed_watermark(dct_blocks, watermark_array, alpha=0.05):
    dct_blocks_with_watermark = dct_blocks.copy()
    dct_blocks_with_watermark[::8, ::8] += alpha * watermark_array
    return dct_blocks_with_watermark

2.32 - 3 Wasserzeichenextraktion

Im ersten Fall werden die Wasserzeicheninformationen aus dem gedrehten Bild extrahiert. Zuerst wird die Kantenextraktion durch den Canny-Operator realisiert, und dann wird die geometrische Form des Bildes mithilfe der Hough-Transformation erkannt. Der entsprechende Rotationswinkel wird durch ausgewählt Festlegen eines angemessenen Schwellenwerts und Wiederherstellen des Niveaus. Schließlich kann das durch Ausschneiden des ungültigen Bildrahmens erhaltene Bild zum Extrahieren des Wasserzeichens verwendet werden.

Im zweiten Fall werden die Wasserzeicheninformationen für das zugeschnittene Bild extrahiert, was... .

Im dritten Fall kann für das gezoomte Bild das Wasserzeichen aus dem Bild extrahiert werden, das durch die Zoom-Funktion von ... erhalten wurde.

Beim Extrahieren des Wasserzeichens muss das Bild zunächst in 8 × 8-Blöcke unterteilt werden, und dann wird das Wasserzeichen aus den Unterblöcken extrahiert. Da das Wasserzeichenbild im vorherigen Vorgang verschlüsselt und verschlüsselt wurde, ist hier die inverse Arnold-Transformation erforderlich, um die Entschlüsselung und Wiederherstellung der Wasserzeicheninformationen zu realisieren und schließlich ein Wasserzeichenbild zu extrahieren.

Wirkung:
Fügen Sie hier eine Bildbeschreibung ein

Teil des Codes:

def process_images(image_with_watermark_path, original_image_path, alpha=0.05):
    # 加载图像
    image_with_watermark = load_image(image_with_watermark_path)
    original_image = load_image(original_image_path)
    # 将图像转换为数组
    image_with_watermark_array = image_to_array(image_with_watermark)
    original_array = image_to_array(original_image)
    # 对图像执行DCT
    dct_blocks_with_watermark = perform_dct(image_with_watermark_array)
    original_dct_blocks = perform_dct(original_array)
    # 提取水印
    watermark_array = extract_watermark(dct_blocks_with_watermark, original_dct_blocks, alpha)
    # 裁剪和转换图像
    watermark_array = clip_and_convert(watermark_array)
    # 将数组转换回图像
    watermark_image = array_to_image(watermark_array)
    return watermark_image

2.4 Frage 4

LSB (Least Significant Bit) ist eine gängige Technik zum Verbergen von Informationen, die üblicherweise bei der digitalen Wasserzeichenmarkierung und Steganographie verwendet wird. Wenn Sie LSB zum Einbetten von Informationen verwenden, müssen Sie die folgenden Punkte beachten:

  1. Wählen Sie die geeignete Einbettungsposition : LSB ist normalerweise das am wenigsten signifikante Informationsbit, das in das Bild eingebettet ist, da es den geringsten Einfluss auf das Bild hat und für das menschliche Auge schwer zu erkennen ist. Wenn das Bild jedoch einer Komprimierung oder einer anderen Form der Verarbeitung unterzogen wird, können durch diese Verarbeitung die niedrigstwertigen Bits verändert werden, was zum Verlust eingebetteter Informationen führt. Wenn daher erwartet wird, dass das Bild einer solchen Verarbeitung unterzogen wird, kann es erforderlich sein, eine andere Einbettungsposition zu wählen, beispielsweise ein höheres Bit.

  2. Sichern eingebetteter Informationen : Während die LSB-Einbettung Informationen verbergen kann, kann ein Angreifer, wenn er weiß, dass die LSB-Einbettung verwendet wurde, versuchen, diese zu extrahieren oder zu beschädigen. Daher kann es erforderlich sein, Verschlüsselung oder andere Schutzformen zu verwenden, um die Sicherheit eingebetteter Informationen zu gewährleisten. (Verschlüsseln Sie beispielsweise die einzubettenden Informationen vor dem Einbetten.)

  3. Übermäßiges Einbetten vermeiden : Obwohl die LSB-Einbettung weniger Auswirkungen auf das Bild hat, kann es zu einer erheblichen Verschlechterung der Bildqualität kommen, wenn zu viele Informationen eingebettet werden. Daher muss ein Gleichgewicht zwischen der Notwendigkeit, Informationen zu verbergen und der Bildqualität aufrechtzuerhalten, gefunden werden.

3. Referenzen

In diesen Dokumenten wird auf viele Inhalte verwiesen, die als Reproduktion und Synthese einiger Methoden angesehen werden können. Wenn Sie eine Arbeit schreiben, können Sie auf diese Dokumente zurückgreifen, um verwandte Konzepte und Formeln zu finden. (Allerdings habe ich auch viele Konzepte und ihre Formeln angegeben)

Alle:
Fügen Sie hier eine Bildbeschreibung ein
Teilvorschau:

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

4. Codevorschau

Fügen Sie hier eine Bildbeschreibung ein

Supongo que te gusta

Origin blog.csdn.net/weixin_43764974/article/details/131994622
Recomendado
Clasificación