[Modelagem Matemática] 2023 Shenzhen Cup e Modelagem Matemática das Três Províncias Orientais Pergunta B: Proteção de Direitos Autorais de Recursos Eletrônicos (incluindo código-fonte e artigo final)


Introdução e código do tópico:

https://mbd.pub/o/bread/ZJ2ampZx

insira a descrição da imagem aqui
Versão completa do artigo:

https://mbd.pub/o/bread/ZJ2amppr

insira a descrição da imagem aqui

1. Introdução ao tópico

"Problema B Proteção de direitos autorais de recursos eletrônicos"

Direitos autorais, também conhecidos como direitos autorais, incluem o direito de publicação, autoria, modificação, proteção da integridade da obra, reprodução, distribuição, aluguel, exibição, performance, projeção, transmissão, divulgação em rede de informação, filmagem e direitos de adaptação, tradução direitos, direitos de compilação e outros direitos que devem ser usufruídos pelo proprietário dos direitos autorais.

Hoje, com o uso generalizado de redes de computadores, cada vez mais recursos eletrônicos serão rapidamente transferidos através da rede. Ao mesmo tempo, a forma de proteger os direitos de autor dos recursos electrónicos tornou-se gradualmente crucial. Este problema é também uma das principais questões no domínio da segurança da informação. A tecnologia de marca d'água digital (marca d'água eletrônica) é uma das principais tecnologias para resolver este problema. Mas como a marca d'água visível (marca d'água visível) muitas vezes destrói a estrutura da própria imagem quando aplicada à proteção de direitos autorais de imagens eletrônicas, e como a informação incorporada é visível, ela é fácil de ser identificada e eliminada. Portanto, a esteganografia tem sido amplamente preocupada e utilizada.

A esteganografia é geralmente considerada um importante ramo da ocultação de informações, especializado em como ocultar informações que realmente existem. A esteganografia tem uma longa história, com alguns casos datando de centenas de anos antes de Cristo. Com o rápido desenvolvimento da tecnologia informática e da Internet, considera-se que a investigação sobre a tecnologia esteganográfica moderna começou na década de 1990. Como a tecnologia esteganográfica pode incorporar informações específicas no suporte de informações e não é fácil de ser detectada, ela pode ser amplamente utilizada na proteção de direitos autorais, adição de dados e outros campos.

Questão 1 : Para a imagem P no Anexo 1, estabeleça um modelo matemático para gerar a imagem SP incorporada nas informações do Desafio de Modelagem Matemática da Copa Shenzhen, de modo que a imagem SP fique o mais próximo possível da imagem P original na visão humana. Projetar e implementar o algoritmo para gerar a imagem SP, colocar o código-fonte do SP gerado e o SP da imagem resultante no Apêndice A da entrada; fornecer o código-fonte usado para extrair informações de direitos autorais da imagem SP e colocá-lo no Apêndice B da entrada .

Pergunta 2 : Usando o modelo e algoritmo da Pergunta 1, é possível incorporar todas as informações textuais da Lei de Direitos Autorais da República Popular da China (Terceira Emenda) [1] na imagem do Anexo 1? Se não, quanto pode ser incorporado no máximo?

Questão 3 : No processo de transmissão eletrônica de imagens, elas podem ser compactadas ou armazenadas em diversos formatos de imagem, podendo também sofrer redimensionamento, rotação ou outras deformações geométricas. Neste ponto, o algoritmo da questão 1 ainda é utilizável? Se não, como pode ser melhorado?

Questão 4 : Para proteger os direitos autorais de outras imagens eletrônicas, o que deve ser prestado atenção ao usar o algoritmo da questão 1? Por favor, indique no máximo três precauções e explique o porquê.

referências

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

2. Respostas às perguntas

2.1 Pergunta 1

2.1.1 Pré-processamento de imagem

Primeiro, usamos ferramentas como o MATLAB para analisar a imagem P no Apêndice 1 para obter uma compreensão profunda de sua distribuição de pixels, características de cor, características de textura, etc. Temos que considerar cuidadosamente onde e como incorporamos informações na imagem P e quanta informação incorporar. A incorporação pode ser obtida ajustando a distribuição de cores dos pixels ou os valores dos pixels para minimizar o impacto visual. Em segundo lugar, com base nos resultados anteriores da análise de imagens, podemos estabelecer um modelo matemático do método LSB e formalizar o esquema de incorporação de informações para gerar SP de imagem com informações incorporadas. De acordo com este modelo, podemos escrever o código e gerar a imagem resultante desejada, e extrair as informações de incorporação da imagem resultante. Finalmente, precisamos realizar um teste de similaridade para calcular os equivalentes do erro quadrático médio (MSE) e do índice de similaridade estrutural (SSIM) entre a imagem original e a imagem de informação incorporada, que são 0,53 e 0,999, respectivamente, indicando que nossa tecnologia de esteganografia é não quebrado Características estruturais da imagem original.

insira a descrição da imagem aqui
A distribuição de pixels da imagem refere-se à distribuição de cada valor de pixel na imagem, ou seja, a frequência ou quantidade de diferentes valores de pixel que aparecem na imagem. A distribuição de pixels da imagem é de grande importância no processamento e análise de imagens e pode fornecer informações valiosas sobre o conteúdo e as propriedades da imagem.

Analisamos a distribuição de pixels da imagem P e os resultados são mostrados na figura a seguir:

insira a descrição da imagem aqui

Tal distribuição pode ser vista em um histograma, onde picos nas laterais indicam a presença de valores de pixels mais claros e mais escuros na imagem, enquanto uma área convexa no meio indica a presença de uma determinada região ou objeto. Ondulações em outras partes podem indicar correspondentemente menos valores de pixel.

insira a descrição da imagem aqui
Não é difícil perceber que a imagem de textura da imagem P possui características de textura complexas e repetitivas, que podem ser utilizadas como portadoras de ocultação de informações.

Parte da tese é:

insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui
Histogramas de alta similaridade podem levar a uma maior estabilidade da incorporação de informações, ou seja, informações ocultas têm impacto semelhante em canais diferentes. Isto pode fazer com que as informações esteganográficas sejam mais difíceis de detectar porque as alterações nos canais são menores e menos propensas a levantar suspeitas. Ao detectar informações esteganográficas, pode ser mais difícil analisar pequenas diferenças entre canais, porque a semelhança dos histogramas pode tornar as diferenças menos óbvias.

2.1.2 Método LSB - teste da biblioteca stegano

O método acima mostra que é viável usar o método LSB para incorporar informações em imagens. Portanto, estabelecemos o modelo matemático do método LSB e programamos através do princípio do método LSB.

A esteganografia LSB é uma tecnologia que usa o bit menos significativo (Least Significant Bit, LSB) de uma imagem para ocultar informações. Cada pixel da imagem é composto por três cores (vermelho, verde e azul), e cada cor ocupa 8 bits, ou seja, um byte. A esteganografia LSB consiste em substituir o bit binário da informação a ser ocultada pelo bit mais baixo de cada pixel da imagem, de modo a realizar a incorporação da informação. Como o bit mais baixo tem pouco efeito na qualidade da imagem, é difícil para os olhos humanos detectarem a diferença, portanto este método tem melhor ocultação.

Você pode chamar a biblioteca stegano para testar e ver como funciona o método LSB:

Quando usado, você pode diretamente:pip install stegano

  • A biblioteca exige que a imagem de entrada esteja no formato PNG, portanto, primeiro converta a imagem original para o formato PNG.
  • A biblioteca não suporta bem o chinês (UTF-8 é usado imediatamente), então este artigo primeiro codifica em base64 as informações a serem incorporadas e depois as incorpora na imagem;
  • Ao analisar as informações da imagem, a operação é invertida.

Parte do código é a seguinte:

# 先将图片转换为PNG格式
def convert_to_png(input_path, output_path):
    img = Image.open(input_path)
    img.save(output_path, 'PNG')


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


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

resultado da operação:

insira a descrição da imagem aqui
A imagem original no Anexo 1 é a seguinte:

insira a descrição da imagem aqui
A imagem após incorporar informações:

insira a descrição da imagem aqui
O tamanho das duas imagens é o mesmo e nenhuma diferença pode ser vista, porque a quantidade de informação incorporada é relativamente pequena em comparação com o tamanho da imagem, representando apenas cerca de 0,02% (24 bytes/1228800 bytes).

Existem muitos métodos e indicadores para comparar a diferença entre duas imagens, como erro quadrático médio (MSE), índice de similaridade estrutural (SSIM), etc. Esses métodos calculam o grau de diferença entre duas imagens com base nos valores de pixel das imagens e, quanto menor a diferença, mais semelhantes são as imagens.

Parte do código é a seguinte:

import cv2
import numpy as np
from skimage.metrics import structural_similarity as ssim


# 定义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


# 读取两张图片
imageA = cv2.imread("B.jpg")
imageB = cv2.imread("SP.PNG")

# 将图片转换为灰度图
imageA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
imageB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

# 计算两张图片的MSE和SSIM值
m = mse(imageA, imageB)
s = ssim(imageA, imageB)

# 打印结果
print("MSE: %.8f" % m)
print("SSIM: %.8f" % s)

Nossa saída é:

insira a descrição da imagem aqui
Pode-se observar que após incorporar o “Desafio de Modelagem Matemática da Copa Shenzhen”, a diferença entre as duas imagens é muito, muito pequena.

2.1.3 Modelagem do método LSB

O método acima mostra que é viável usar o método LSB para incorporar informações em imagens. Portanto, estabelecemos o modelo matemático do método LSB e programamos através do princípio do método LSB.

Como a imagem fornecida no título está no formato jpg, o modelo e o código nesta seção suportam a entrada da imagem original no formato jpg.

Porém, após incorporar as informações na imagem jpg original, elas não podem ser salvas no formato jpg, pois o jpg não pode garantir que nenhum detalhe será perdido, o que atrapalhará as informações incorporadas, portanto a saída deve ser salva no formato PNG sem perda , para que possa ser gravado completamente o valor RGB de cada pixel da imagem.

modelo matemático:

O princípio básico dessas duas funções é usar o bit menos significativo (LSB) da imagem para incorporar e extrair informações. Este método é uma técnica simples de esteganografia que incorpora informações modificando os bits menos significativos de um pixel da imagem, uma vez que a modificação tem pouco ou nenhum impacto visual na imagem e é quase imperceptível.

A seguir está o modelo matemático dessas duas funções:

  1. Incorporar informações :

    Para cada caractere cda mensagem message, converta-o em uma representação binária de 8 bits b(c). Em seguida, itere cada pixel da imagem (r, g, b)e substitua o bit menos significativo de cada canal de cor por b(c)um único bit de . Isso pode ser representado pela seguinte fórmula:

    r ′ = r − rmod 2 + b ( c ) eu r' = r - r mod 2 + b(c)_iR'=R-rm o d 2 _+b ( c )eu g ′ = g − gmod 2 + b ( c ) i + 1 g' = g - g mod 2 + b(c)_{i+1}g'=g-g m o d 2+b ( c )eu + 1 b ′ = b − bmod 2 + b ( c ) i + 2 b' = b - b mod 2 + b(c)_{i+2}b'=b-bm o d 2+b ( c )eu + 2

    Entre eles r', g'está b'o novo valor do pixel, b(c)_ié b(c)o bit ie modé a operação do módulo.
    ![Insira a descrição da imagem aqui](https://img-blog.csdnimg.cn/d4e4ad10d6934922a079942e8028e6a6.png

  2. Extraia informações :

    Itera através de cada pixel da imagem (r, g, b)e extrai bits de informação dos bits menos significativos de cada canal de cor. Esses bits de informação são então combinados em uma representação binária de 8 bits, convertida em caracteres. Isso pode ser representado pela seguinte fórmula:

    b (c) i = rmod 2 b(c)_i = r mod 2b ( c )eu=rmod 2 b (c) i + 1 = gmod 2 b(c)_{i+1} = g mod 2b ( c )eu + 1=g m o d 2 b ( c ) i + 2 = bmod 2 b(c)_{i+2} = b mod 2b ( c )eu + 2=bm o d 2
    ondeb(c)_iestáb(c)o bit dei,modque é uma operação de módulo. Então,b(c)convertemos para um caracterec.

Parte do código é a seguinte:

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):
            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:
                # 把当前像素的绿色分量的最低有效位替换为信息位
                g = int(format(g, '08b')[:-1] + bits[index], 2)
                index += 1

            if index < info_len:
                # 把当前像素的蓝色分量的最低有效位替换为信息位
                b = int(format(b, '08b')[:-1] + bits[index], 2)
                index += 1

            pixels[x, y] = (r, g, b)
            if index == len(bits):
                break
        else:
            continue
        break
    img.save(output_path)
    return info_len

O segundo código:

#替换最后一位的数据,source是被替换数据,target是目标数据,就是batarget放到source最后一位
def repLstBit(source,target):
    return replace_reg.sub(target,source)


#字符串转换二进制,不够八位的话补齐8位
def encode(s):
    return ''.join(bin(ord(c)).replace('0b','').rjust(8,'0') for c in s)

#切割从图像中收集到的数据,就是把载密图像的对应最后一位提取出来之后需要进行切割
def cut_text(text,lenth):
    textArr = re.findall('.{'+str(lenth)+'}',text)
    tempStr = text[(len(textArr) * lenth):]
    if len(tempStr)!=0:
        textArr.append(text[(len(textArr)*lenth):])
    return textArr

#二进制转换成字符串,看上面切割方法的注释即可理解该方法存在的意义
def decode(s):
    bitArr = cut_text(s,8)
    return "".join(chr(int(i,2)) for i in bitArr)

insira a descrição da imagem aqui
Inspeção de Análise de Informações:

insira a descrição da imagem aqui
Teste de similaridade: o erro quadrático médio é inferior ao da biblioteca utilizada e o índice de similaridade estrutural é ligeiramente superior, o que ainda é indistinguível a olho nu.

Imagem de saída:

insira a descrição da imagem aqui

2.2 Pergunta 2

O resultado está bom.

insira a descrição da imagem aqui
razão:

  • As dimensões da imagem original são 1280*1896. 3 * 1280*1896De acordo com o modelo lsb neste artigo, há um total de bits binários que podem ser usados ​​para armazenar informações:
  • Neste artigo, a "Lei de Direitos Autorais da República Popular da China" é salva como um arquivo txt com tamanho de 33 KB, após a conversão da codificação no modelo, ela é finalmente representada por bits binários 7w.
  • O número de bits de informação a serem ocultados é muito menor que o número de bits disponíveis para armazenamento em uma imagem. Assim você pode incorporar todas as informações de texto na imagem no Anexo 1.

Efeito de incorporação de informações:

insira a descrição da imagem aqui
Ainda não há muita diferença entre as fotos do antes e depois! Consulte também os valores de MSE e SSIM.

2.3 Pergunta 3

O algoritmo do Problema 1 pode encontrar alguns desafios após passar por operações como compressão, transformação de formato, dimensionamento, rotação ou outras deformações geométricas durante a entrega da imagem, resultando em dificuldades na incorporação e extração de informações.

A compactação de imagem pode fazer com que as informações LSB na imagem original sejam perdidas e as informações incorporadas se tornem ilegíveis ou impossíveis de serem extraídas. Se a imagem precisar ser compactada, as informações poderão ser incorporadas antes da compactação e depois compactadas. Isso reduz a chance de perda de informações.

Diferentes formatos de imagem podem usar diferentes algoritmos de compactação e espaços de cores, e a forma de incorporar informações pode ser afetada por alterações de formato. Antes da conversão do formato, a imagem pode ser restaurada ao seu formato original e as informações incorporadas. Em seguida, converta-o para o formato desejado.

Operações como dimensionamento, rotação e deformação geométrica podem causar alterações nos valores dos pixels, afetando a incorporação e extração de informações. Antes dessas operações, o estado original da imagem pode ser registrado, incluindo valores e posições dos pixels. Então, após aplicar essas transformações, a informação é incorporada na imagem transformada. Ao extrair informações, a transformação precisa ser revertida para restaurar o estado da imagem original.

Depois que a imagem passa por múltiplas transformações e processamento, ruídos ou outros problemas visuais podem ser introduzidos, dificultando a incorporação e extração de informações. Com técnicas de esteganografia mais robustas, algum grau de variação de imagem e perda de qualidade pode ser tolerado. Além disso, controles de qualidade mais rígidos podem ser implementados para garantir perda visual mínima durante a entrega da imagem.

Durante a entrega da imagem, podem ocorrer erros ou perdas de transmissão de dados, resultando em informações incompletas. Para garantir a integridade das informações, códigos de detecção e correção de erros podem ser adicionados quando a informação é incorporada para detectar e reparar erros introduzidos durante o processo de transmissão.

Em resumo, o algoritmo da Questão 1 pode precisar ser adaptado e melhorado para diferentes situações durante a entrega da imagem. É importante considerar as operações de processamento de imagens, a integridade dos dados, a criptografia e as técnicas de esteganografia caso a caso para garantir a incorporação e extração confiáveis ​​de informações. À medida que aumenta o número de operações envolvidas no processo de transferência de imagens, mais atenção e meios técnicos são necessários para lidar com potenciais problemas.

insira a descrição da imagem aqui

2.3.1 Visão geral dos métodos e etapas

Aqui estão algumas maneiras possíveis de melhorar:

  1. Use técnicas de incorporação mais sofisticadas : por exemplo, incorporação de informações usando métodos no domínio da frequência, como transformada discreta de cosseno (DCT) ou transformada wavelet discreta (DWT). Esses métodos ocultam informações no domínio da frequência da imagem, em vez de diretamente no domínio espacial, como o LSB. Desta forma, informações ocultas podem ser extraídas mesmo após algum processamento da imagem.

  2. Use codificação de correção de erros : por exemplo, use codificação de correção de erros, como códigos de Hamming ou códigos Reed-Solomon para codificar informações ocultas. Desta forma, mesmo que parte da informação seja destruída durante o processamento da imagem, a informação original pode ser recuperada através da codificação de correção de erros.

  3. Usando tecnologia de marca d'água : Marca d'água é uma técnica especial de ocultação de informações cujo objetivo é ocultar um identificador em uma imagem para que possa ser detectado mesmo após o processamento da imagem. As técnicas de marca d'água geralmente usam alguns algoritmos complexos de incorporação e extração para melhorar a robustez.

  4. Use métodos de aprendizado de máquina mais poderosos : por exemplo, use aprendizado profundo para ocultar e extrair informações. O aprendizado profundo pode aprender como manter as informações ocultas e extraídas em diferentes operações de processamento de imagens, melhorando assim a robustez.

Todos os métodos acima podem melhorar a robustez da tecnologia de ocultação de informações, mas também deve ser notado que melhorar a robustez geralmente sacrifica alguma capacidade de informação oculta. No entanto, quando usado para proteger direitos autorais, não há muita informação que precise ser incorporada na imagem.

Este artigo opta por usar o terceiro método, usando tecnologia de marca d'água.

As principais etapas são:

  1. Gere uma imagem de marca d'água (quadrada);
    • Calcule o número adequado de linhas com base no comprimento do texto;
    • Crie uma imagem em branco;
    • desenhe texto na imagem;
    • Salvar foto.
    • Embaralhe a imagem da marca d'água Arnold(opcional, para evitar que a marca d'água seja extraída e adulterada).
  2. marca d'água incorporada;
    • Executa uma transformação discreta de cosseno (DCT) na imagem original.
    • Incorpore a marca d'água no bloco DCT.
    • Executa uma transformada discreta inversa de cosseno (IDCT) no bloco DCT com marca d’água.
  3. Extraia a marca d'água.
    • Restaurar imagens com marca d'água para um estado o mais próximo possível da imagem original (para rotação, corte e dimensionamento);
    • Realize a transformação DCT na imagem incorporada com a marca d’água e a imagem original;
    • Faça diferença na imagem transformada (com coeficiente);
    • Execute a transformação inversa do Arnold na imagem de marca d'água extraída (se a seda preta incorporada for uma imagem de marca d'água transformada por Arnold).

2.3.2 Modelo de incorporação de informações de marca d’água escura baseado em DCT

2.3.2.1 Geração de imagem de marca d'água "Shenzhen Cup Mathematical Modeling Challenge"

Código principal:

def create_watermark(text, font_path, font_size=26, opacity=100):
    n = int(math.sqrt(len(text))) + 1
    lines = [text[i:i + n] for i in range(0, len(text), n)]
    width, height = n * font_size, n * font_size
    img = Image.new('RGBA', (width, height), (255, 255, 255))
    font = ImageFont.truetype(font_path, font_size)
    draw = ImageDraw.Draw(img)
    text_color = (0, 0, 0, opacity)
    for i, line in enumerate(lines):
        text_bbox = draw.textbbox((0, 0), line, font)
        line_width = text_bbox[2] - text_bbox[0]
        x = (width - line_width) / 2
        draw.text((x, i * font_size), line, font=font, fill=text_color)
    img.save('./2023_SZ_Cup/Problem_3/output/watermark.png', 'PNG')

Imagem de marca d'água:

insira a descrição da imagem aqui

2.3.2.2 Imagem de marca d'água embaralhada do Arnold

Isso é embaralhar as informações da marca d'água, para que as informações sejam distribuídas uniformemente, reduzir possíveis perdas e, ao mesmo tempo, evitar que a marca d'água seja extraída e adulterada por terceiros.

Arnold scrambling é uma tecnologia de criptografia de imagem, que é um método de transformação de embaralhamento de imagem bidimensional proposto por VI Arnold. Sua ideia básica é considerar a imagem como uma função em um plano inteiro bidimensional e, em seguida, embaralhar as posições dos pixels da imagem original por meio de uma certa transformação geométrica, de modo a atingir o objetivo de criptografia da imagem.

A fórmula básica do embaralhamento de Arnold é a seguinte:

Para cada pixel (x, y) na imagem, após o embaralhamento de Arnold, a nova posição (x', y') do pixel pode ser calculada pela seguinte fórmula:

x ′ = (x + y) mod N x' = (x + y) mod Nx'=( x+y ) mod N y ′ = (x + 2 y) mod N y' = (x + 2y) mod Nsim'=( x+2 y ) mod N _ _

Entre eles, N é a largura ou altura da imagem (assumindo que a imagem seja quadrada) e mod é a operação do módulo.

A operação inversa do embaralhamento de Arnold, ou seja, o processo de descriptografia, pode ser realizada pela seguinte fórmula:

x = (2 x ′ - y ′) mod N x = (2x' - y') mod Nx=( 2x _'-sim )modNy = ( − x ′ + y ′ ) mod N y = (-x' + y')modNsim=( -x _'+sim )modN__

Esses dois conjuntos de fórmulas são as fórmulas básicas do embaralhamento de Arnold e sua operação inversa. Através desses dois conjuntos de fórmulas, as operações de criptografia e descriptografia de imagens podem ser realizadas.

Efeito:

uma vez:

insira a descrição da imagem aqui
três vezes:

insira a descrição da imagem aqui
cinco vezes:

insira a descrição da imagem aqui
Parte do código:

def arnold_scramble(image, iterations):
    array = np.array(image)
    height, width, _ = array.shape
    scrambled_array = np.empty_like(array)
    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()
    scrambled_image = Image.fromarray(np.clip(scrambled_array, 0, 255).astype('uint8'))

    return scrambled_image

2.3.2.3 Incorporação de marca d’água

Este artigo usa tecnologia de marca d'água escura baseada em DCT. Ou seja, a imagem da marca d’água é incorporada no domínio de frequência da imagem, em vez do domínio espacial do LSB anterior.

No resultado da transformada discreta de cosseno (DCT), a parte de baixa frequência geralmente contém a maior parte das informações da imagem, como alterações de cor e brilho. Isto ocorre porque a maioria das regiões da imagem geralmente tem cor e brilho semelhantes, e esta informação aparece como componentes de baixa frequência no domínio da frequência. Portanto, você pode ver que há mais pontos brilhantes no canto superior esquerdo (parte de baixa frequência) da imagem DCT.

A transformação discreta de cosseno (DCT) [9] é um método de transformação comumente usado na compactação de dados ou imagens. Sua principal característica é converter o sinal do domínio espacial para o domínio da frequência, portanto possui bom desempenho de decorrelação no processo de compressão. A própria transformação DCT é sem perdas e simétrica. Quando a transformada discreta de cosseno é aplicada à imagem original, a energia dos coeficientes DCT concentra-se principalmente no canto superior esquerdo, enquanto a maioria dos coeficientes restantes estão próximos de zero. Na compressão de imagens, geralmente é realizada uma operação de quantização, ou seja, coeficientes menores que um determinado limite são zerados. Este processo é chamado de quantização de imagem, seguido por uma operação DCT inversa para restaurar a imagem compactada.

A transformação DCT primeiro divide a imagem inteira em blocos de pixels grandes e pequenos e, em seguida, realiza a transformação DCT em cada bloco de pixels, um por um. No campo das imagens digitais, é utilizada a transformação DCT bidimensional, e a fórmula simples da transformação DCT bidimensional é:

insira a descrição da imagem aqui
insira a descrição da imagem aqui
O mapa de características do nosso DCT gerado é:

insira a descrição da imagem aqui
Pelo contrário, a parte de alta frequência contém os detalhes e informações de textura da imagem, como bordas e texturas. Estas informações aparecem como componentes de alta frequência no domínio da frequência. Portanto, você pode ver que existem alguns pontos brilhantes no canto inferior direito (parte de alta frequência) da imagem DCT, mas geralmente menos do que a parte de baixa frequência.

A faixa intermediária está em algum ponto intermediário, contendo alguma variação de cor e brilho, bem como algumas informações de detalhes e textura.

Na representação de uma imagem no domínio da frequência, a parte de alta frequência geralmente contém menos informações. Isso ocorre porque a parte de alta frequência corresponde aos detalhes e textura da imagem, e a proporção dessas informações na imagem inteira costuma ser pequena. No entanto, incorporar marcas d'água diretamente em partes de alta frequência pode fazer com que as marcas d'água sejam perdidas durante a compressão da imagem ou redução da resolução, uma vez que essas operações geralmente descartam informações de alta frequência.

Pelo contrário, a parte de baixa frequência contém a maior parte das informações da imagem, como alterações de cor e brilho. Incorporar uma marca d'água na parte de baixa frequência pode alterar significativamente o efeito visual da imagem, pois alterará as características básicas da imagem.

Portanto, a parte de frequência intermediária é geralmente considerada o melhor local para incorporar marca d'água. A parte de frequência média contém algumas alterações de cor e brilho, bem como algumas informações de detalhes e textura, portanto, é improvável que a incorporação de uma marca d'água nesta parte altere significativamente o efeito visual da imagem. Ao mesmo tempo, como é menos provável que as informações na parte de frequência intermediária sejam descartadas quando a imagem é comprimida ou reduzida em resolução, a marca d'água incorporada nesta parte também tem maior probabilidade de ser preservada.

Portanto, este artigo pretende incorporar a marca d'água na parte de frequência intermediária da imagem após a transformação DCT.

Demonstração de efeito:

alpha = 0.1

insira a descrição da imagem aqui
alpha = 0.5

insira a descrição da imagem aqui
alpha = 0.9

insira a descrição da imagem aqui
Parte do código:

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


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.3.2.4 Extração de marca d'água

No primeiro caso, a informação da marca d'água é extraída da imagem girada. Primeiro, a extração das bordas é realizada através do operador Canny e, em seguida, a forma geométrica da imagem é detectada usando a transformada de Hough. O ângulo de rotação apropriado é selecionado por definindo um limite razoável e restaurado ao nível. Finalmente, a imagem obtida cortando o quadro inválido pode ser usada para extrair a marca d'água.

No segundo caso, as informações da marca d'água são extraídas para a imagem recortada, e a imagem recortada é comparada com a imagem original que não contém a marca d'água para calcular a captura de tela. Use a função matchTemplate() fornecida pelo OpenCV para descobrir o máximo posição correspondente entre os dois. , restaure a emenda da imagem a ser detectada. A imagem finalmente obtida pode ser usada para extrair a marca d'água.

No terceiro caso, para a imagem dimensionada, encontre a taxa de escala mais adequada dimensionando continuamente a imagem e combinando-a com a imagem original e, finalmente, use a imagem obtida pela função de operação de zoom fornecida pela biblioteca de extensão cv2 do OpenCV para extrair a marca d'água operar.

No processo de extração da marca d’água, a imagem precisa ser dividida primeiro em blocos de 8×8 e, em seguida, a marca d’água é extraída dos subblocos. Como a imagem da marca d'água foi criptografada e embaralhada na operação anterior, a transformação inversa de Arnold é necessária aqui para realizar a descriptografia e restauração das informações da marca d'água e, finalmente, extrair uma imagem da marca d'água.

Efeito:

A figura abaixo mostra o efeito de extração da marca d'água, correspondendo a 0,1, 0,5, 0,9 da esquerda para a direita

insira a descrição da imagem aqui
Parte do código:

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 Pergunta 4

LSB (Least Significant Bit) é uma técnica comum de ocultação de informações, geralmente usada em marcas d'água digitais e esteganografia. Ao usar LSB para incorporação de informações, você precisa prestar atenção aos seguintes pontos:

  1. Escolha a posição de incorporação apropriada : LSB é geralmente o bit de informação menos significativo incorporado na imagem, porque tem o menor impacto na imagem e é difícil de ser detectado pelos olhos humanos. No entanto, se a imagem puder ser sujeita a compressão ou outras formas de processamento, estes processamentos poderão alterar os bits menos significativos, resultando na perda de informação incorporada. Portanto, se for esperado que a imagem esteja sujeita a este tipo de processamento, pode ser necessário escolher uma posição de incorporação diferente, como um bit mais alto.

  2. Protegendo informações incorporadas : embora a incorporação de LSB possa ocultar informações, se um invasor souber que a incorporação de LSB foi usada, ele poderá tentar extraí-la ou corrompê-la. Portanto, pode ser necessário utilizar criptografia ou outras formas de proteção para garantir a segurança das informações incorporadas. (Por exemplo, criptografe as informações a serem incorporadas antes de incorporar)

  3. Evite incorporação excessiva : Embora a incorporação LSB tenha menos impacto na imagem, se muita informação for incorporada, poderá causar degradação significativa da qualidade da imagem. Portanto, é necessário encontrar um equilíbrio entre a necessidade de ocultar informações e manter a qualidade da imagem.

Ao usar a esteganografia de bits menos significativos (LSB) para incorporação de informações, a primeira coisa a se prestar atenção é a ocultação e a segurança. Certifique-se de que as informações incorporadas não causem anomalias visuais ou estatísticas e evite vazar a existência das informações. As informações confidenciais são criptografadas antes de serem incorporadas para maior segurança.

Seguido pela capacidade e balanço de massa. Selecione a capacidade adequada de acordo com as necessidades. Incorporar muita informação pode levar à degradação da qualidade da imagem, o que é fácil de ser notado. A avaliação da qualidade da imagem é realizada antes e depois da incorporação das informações para garantir que nenhuma perda visual significativa seja causada.

Novamente é aleatoriedade e camuflagem. A posição de incorporação do LSB é selecionada aleatoriamente em vez de incorporação em uma posição fixa para aumentar a ocultação. Antes da informação ser incorporada, ruído aleatório ou pequenas alterações podem ser adicionados à posição do LSB para tornar a incorporação mais difícil de detectar.

A última coisa a considerar é a detecção e extração. Grave ou incorpore metadados para identificar a presença de informações incorporadas em uma imagem para extração quando necessário. O código de detecção e correção de erros pode ser adicionado antes da incorporação para garantir a integridade e a exatidão das informações quando extraídas.

Nossa ideia do problema 4 é mostrada na figura a seguir:

insira a descrição da imagem aqui

3. Visualização do projeto

insira a descrição da imagem aqui

Guess you like

Origin blog.csdn.net/wzk4869/article/details/132662302