Cómo usar matlab para extraer marcas de agua de imágenes que contienen marcas de agua
3 Esquema de detección e incrustación de marcas de agua de video
3.1 Preprocesamiento de marcas de agua
Utilizando imágenes binarias como datos de marcas de agua a incrustar, el objeto de investigación de este artículo es porque es una imagen bidimensional, se utiliza la transformada de Arnold bidimensional.
La transformación de Arnold bidimensional se define como:
(3-1)
Entre ellos, (x, y) son los píxeles del original imagen, (x', y') es el punto de píxel de la nueva imagen después de la transformación, N es el orden de la imagen, es decir, el tamaño de la imagen, que suele ser una imagen cuadrada. Dado que la transformada de Arnold es periódica, su período periódico se puede utilizar para transformar inversamente la imagen. Es decir, durante el proceso de incrustación de la marca de agua, el número de veces de codificación de la marca de agua se puede usar como tiempos clave, y luego se incrusta la marca de agua. Cuando se extrae la marca de agua, se puede continuar: (Período de tiempos). veces para restaurarla a la imagen original. Este es el esquema de recuperación de codificación que utiliza la transformación directa de Arnold. Los tiempos de transformación de Arnold son conservados por el titular de los derechos de autor.
Codificar la marca de agua tiene las siguientes ventajas:
(1) La persona jurídica que utiliza la tecnología de codificación puede controlar libremente la selección del algoritmo, la selección de parámetros y el uso de marcas de agua aleatorias. La tecnología numérica, dificultando así que los usuarios ilegales descifren el contenido de la imagen, puede mejorar la seguridad de la información de las marcas de agua;
(2) La tecnología de codificación puede dispersar la distribución de bits de error y mejorar el efecto visual de las marcas de agua digitales. , y así mejorar su robustez .
3.2 Incrustación de marca de agua de video
La clave del algoritmo de incrustación de marca de agua radica en los siguientes tres puntos:
(1) La estructura de la marca de agua;
p>
( 2) Área de incrustación de marca de agua;
(3) Técnica de incrustación;
Este artículo selecciona imágenes binarias como marcas de agua. Para mejorar la solidez de las marcas de agua, la mayoría de los algoritmos de marcas de agua del dominio DCT incorporan la señal de la marca de agua en la parte de baja frecuencia de los coeficientes DCT. Pero el área de baja frecuencia es la parte de la imagen que concentra energía, e incrustarla en baja frecuencia reducirá la transparencia. Aunque la incrustación en altas frecuencias tiene una mejor transparencia, la mayoría del procesamiento de imágenes tiene un mayor impacto en los componentes de alta frecuencia, lo que reduce la robustez de la marca de agua. Por lo tanto, la mayoría de los algoritmos de marcas de agua incrustan la señal de la marca de agua en el coeficiente DCT de la imagen portadora. sección de frecuencia para lograr el mejor compromiso entre transparencia y robustez. El objetivo final de diversas técnicas de incrustación es mejorar la solidez y transparencia de la marca de agua tanto como sea posible.
Las marcas de agua digitales utilizadas para la protección de derechos de autor deben ser lo más sólidas posible y al mismo tiempo cumplir con los límites de la visión humana, por lo que la ubicación de incrustación debe encontrarse en función de HVS.
Este artículo resume HVS como sensibilidad al movimiento, sensibilidad a la textura y sensibilidad al brillo. En el siguiente proceso de integración, estas características se explotan al máximo. Como se muestra en la rama central de la Figura 3-1.
El proceso de incrustación se muestra en la Figura 3-1.
Figura 3-1 Proceso de incrustación de marca de agua
Lea el componente de brillo Y del video, porque es el dato más efectivo. Según el algoritmo NEC, la marca de agua incrustada en él. La robustez más fuerte. De acuerdo con la fórmula de cálculo del umbral de sensibilidad al movimiento que se muestra en la ecuación (3-2), encuentre 32 cuadros de video Yi (i = 1,2,…32) que cumplan con la relación de sensibilidad.
(3-2)
Donde (t representa el número del fotograma actual)
A continuación, corte los datos en Y32 según el tamaño de 64 *64 Divídalo en 20 bloques BYij (j=1,2,…20), de modo que podamos obtener 20 bloques de datos tridimensionales BYk (k=1,2,…20) con un tamaño de 64*64*32, como se muestra en la Figura 2-3.
Figura 3-2 Bloqueo de componentes de brillo
Calculado de acuerdo con la sensibilidad de brillo Lk y la sensibilidad de textura Dk que se muestran en la fórmula de la ecuación (3-3) y la ecuación (3-4), A través del cálculo, seleccionamos una pieza de 20 piezas de datos () con valores calculados relativamente altos como el bloque de incrustación de la marca de agua.
(3-3)
(3-4)
Donde, están los datos de brillo en BYk, .
Finalmente, considerando la compensación entre complejidad y rendimiento, implementamos una transformación DCT 3D de dos órdenes en un bloque de datos seleccionado.
De acuerdo con la idea del algoritmo NEC, y para resistir los ataques de filtrado y compresión, incrustamos la secuencia de marca de agua codificada en el coeficiente DCT c (u, v) del primer cuadro; consulte la ecuación (3-5) para detalles.
(3-5)
Donde, w(u,v) son los datos en la secuencia de la marca de agua, c(u,v) es el coeficiente en el primer cuadro después de DCT transformación, c'(u,v) es el coeficiente después de incrustar la marca de agua, S es un entero no negativo (y satisface T1=S/4, T2=3*T1).
Una vez completada la incrustación, realice una transformación DCT tridimensional inversa de dos órdenes en c’(u,v) para obtener los datos de video con la marca de agua incrustada y luego vuelva a colocarlos en sus posiciones originales.
Cabe señalar que durante todo el proceso de incrustación, todos los parámetros utilizados deben conservarse como claves.
El plan específico es el siguiente:
El primer paso: extraer 32 cuadros de video Y datos de componentes:
(1) Leer el archivo de video;
(2) Extraiga todos los componentes Y y divídalos en 32 grupos;
(3) Cada grupo tiene 4 fotogramas y seleccione el más sensible al movimiento de cada grupo. Determine el Y_deltmax más grande en cada grupo y guárdelo en la variable m;
(4) Ubique el Y_deltmax más grande y guárdelo en la variable w;
Y32 es el Y en el fotograma de vídeo requerido Vídeo de 32 fotogramas (355*288*32) cuyos componentes cumplan con la sensibilidad.
Paso 2: Proceso de bloqueo:
(1) Bloquear filas (4 bloques);
(2) Bloquear columnas (5 bloques);
(3) Tome un cuadro cada diez cuadros, ***tome 4 cuadros de 32 cuadros para reducir la cantidad de cálculo;
(4) Cuente un número a la vez Tarea;
Cortado en 20 piezas, cada pieza es un bloque de datos BY de 64*64*4, con diferentes dimensiones, y solo se puede asignar píxel a píxel.
Paso 3: Calcule la sensibilidad de brillo L y la sensibilidad de textura D del bloque de datos BY de acuerdo con la fórmula
Paso 4: Seleccione un bloque con L y D relativamente grandes para incrustar el marca de agua
(1) Determinar el L más grande y almacenarlo en la variable Lm
(2) Eliminar el bloque más grande y comparar nuevamente
(4) Asigne el primero El peso del bloque L es 20;
(5) Calcule el peso de L desde el bloque 2 al bloque 20;
(6) Procese D de la misma manera;
p>
(7) Calcule el peso de cada bloque BY
(8) Ordene los pesos qz de los 20 bloques BY en orden ascendente y mantenga el original. posición índice índice, luego índice [20] es el bloque a seleccionar;
Paso 5: Transformación DCT tridimensional
Dado que el video se compone de flujos de datos de imágenes, cada parte del vídeo puede ser Un fotograma se ve como una imagen fija. Se puede considerar que realizar 3D-DCT en una secuencia de imágenes en movimiento es realizar primero 2D-DCT en cada cuadro del video y luego realizar 1D-DCT en la dirección entre cuadros.
Paso 6: Incrustar datos de marca de agua
Incrustar la secuencia de marcas de agua codificadas en el coeficiente DCT seleccionado, es decir, incrustar el primer bloque de datos en el bloque de datos transformado 3D-DCT en el marco. datos. Luego, estos datos se someten a una transformación 3D-DCT inversa y se devuelven a sus posiciones originales.
Paso 7: Vuelva a colocar los datos seleccionados en su ubicación original
El último paso: escriba el archivo de vídeo
3.3 Detección de marca de agua de vídeo
La extracción de marcas de agua es el proceso inverso a la incrustación. Una ventaja importante de este algoritmo es que la extracción de marcas de agua no requiere la participación de datos de video originales, pero aún se requieren algunos parámetros. Son:
(1) El resultado de clasificación del bloque BY generado en el cuarto paso del proceso de incrustación, del cual podemos conocer la posición de incrustación aproximada de la marca de agua;
(2) Al incrustar el parámetro S especificado;
(3) El número y el período de transformación de Arnold requeridos
Después de obtener los parámetros anteriores, la extracción de la marca de agua es muy simple. se muestra en la Figura 3-3.
Figura 3-3 Proceso de extracción ciega de marca de agua
El esquema es el siguiente:
Extraer de los datos del video a extraer (que puede ser el video posterior siendo atacado) Se extrae el componente de brillo Y' De acuerdo con la clave, se extraen los componentes de brillo de cuatro de los 32 cuadros, y luego se extraen las marcas de agua de este conjunto de datos respectivamente.
En la Figura 3-3, primero divida en 20 bloques y encuentre el correspondiente. Luego, realice una transformación DCT tridimensional de segundo orden y extraiga los datos de la marca de agua de acuerdo con la Ecuación (3-6).
(3-6)
Donde, es el coeficiente DCT.
Finalmente, realizaremos la transformación de Arnold para obtener la imagen de la marca de agua como marca de agua final extraída.
Los pasos específicos son los siguientes:
Paso 1: Extraer 32 fotogramas de vídeo Y datos del componente:
(1) Leer el archivo de vídeo con marca de agua incrustada image ;
(2) Extraiga todos los componentes Y y divídalos en 32 grupos;
(3) Cada grupo tiene 4 fotogramas y seleccione el mejor de cada grupo. -sensible, determine el Y_deltmax más grande en cada grupo y guárdelo en la variable m;
(4) Ubique el Y_deltmax más grande y guárdelo en la variable w;
Y32 es lo que se necesita El componente Y en el cuadro de video es un video de 32 cuadros que cumple con la sensibilidad de movimiento Y32 es una matriz tridimensional de 355 * 288 * 32.
Paso 2: Proceso de bloqueo:
(1) Bloquear filas (4 bloques);
(2) Bloquear columnas (5 bloques);
(3) Tome un cuadro cada diez cuadros y tome 4 cuadros de 32 cuadros para reducir la cantidad de cálculo;
(4) Cuente un número a la vez Tarea; p>
Córtelo en 20 bloques, cada bloque es un bloque de datos BY de 64 * 64 * 4, con diferentes dimensiones, y solo se puede asignar píxel por píxel.
Después de calcular y ordenar su sensibilidad al brillo y la sensibilidad a la textura, el índice [20] es el bloque que incorpora la marca de agua en este algoritmo;
El tercer paso: transformación DCT tridimensional p >
Paso 4: Transformación de Arnold
Dado que la imagen de marca de agua en este algoritmo es una imagen binaria, su transformación de Arnold es una transformación bidimensional y el período es Período Al incrustar la marca de agua. se transforma veces, por lo que el resultado solo necesita transformarse (periodo-veces) veces.
Paso 5: escribir un archivo de imagen
Extraer los datos de la imagen de la marca de agua y escribirlos en un archivo de imagen
Paso 6: detectar si la imagen de la marca de agua existe o no, y compárelo con la comparación de imágenes de marca de agua original.
El último paso: realizar experimentos para verificar la visibilidad y solidez del algoritmo de este artículo.
Después de los pasos anteriores, la información de la imagen de la marca de agua se incrusta en el vídeo. El proceso de implementación específico se muestra en el Capítulo 4.
4 Utilice MATLAB para incrustar y detectar marcas de agua de vídeo
Matlab es un software de computación científica visual que ha sido muy popular en el país y en el extranjero en los últimos años. Se caracteriza por una estructura simple, cálculo numérico eficiente, funciones gráficas completas y procesamiento de imágenes conveniente. Es reconocido internacionalmente como uno de los mejores software de aplicación de computación y matemáticas científicas. Usar Matlab para implementar algoritmos de imágenes de marcas de agua digitales es conveniente y eficiente, elimina códigos de programa tediosos y evita que los investigadores desperdicien energía en la programación.
El contenido ha cubierto álgebra matricial, cálculo, matemáticas aplicadas, señales y sistemas, redes neuronales, análisis y aplicaciones de wavelets, procesamiento de imágenes digitales, gráficos por computadora, control automático y tecnología de comunicación y muchos otros aspectos. El software convencional para informática científica, simulación de sistemas y procesamiento de señales e imágenes ha sido favorecido por investigadores científicos de todos los ámbitos de la vida y ha sido ampliamente utilizado en la tecnología de marcas de agua digitales. Las ventajas de aplicar Matlab a la tecnología de marcas de agua digitales incluyen principalmente los siguientes aspectos:
(1) Potente función de cálculo numérico
La tecnología de marcas de agua de video se investiga en imágenes y las imágenes se expresan mediante matrices. Incrustar marcas de agua en videos y extraer marcas de agua de videos significa muchas operaciones matriciales, y las operaciones matriciales son el núcleo del lenguaje Matlab y la expresión es natural y directa. Por lo tanto, es muy adecuado utilizar la potente función de operación matricial de Matlab para implementar la tecnología de marca de agua de imágenes.
(2) Funciones convenientes de lectura y visualización de imágenes
La marca de agua de video primero debe leer los datos del video y luego restaurar los datos de la marca de agua incrustados después de incrustar la marca de agua del video. Matlab proporciona a los usuarios funciones especializadas de procesamiento de imágenes para leer, escribir y mostrar datos de imágenes. Este método no requiere escribir códigos complejos como otros lenguajes de programación. Solo necesita llamar a las funciones proporcionadas por Matlab. Las funciones relevantes y sus funciones incluyen principalmente las siguientes:
imread lee la imagen Ingrese al espacio de trabajo.
imwrite escribe la imagen en el disco;
image proporciona la función de visualización de imágenes más primitiva;
imshow es la función más utilizada para mostrar varias imágenes;
cargar lee el archivo en el espacio de trabajo;
(3) Función de transformación de imagen eficiente
Los algoritmos de incrustación de marcas de agua digitales generalmente se dividen en métodos de dominio espacial y métodos de frecuencia métodos de dominio. El método del dominio espacial se refiere a agregar marcas de agua digitales cambiando el valor de brillo de los píxeles; el método del dominio de frecuencia se refiere a incrustar marcas de agua digitales en la imagen después de alguna transformación. En comparación con el método de dominio espacial, el método de dominio de frecuencia tiene las siguientes ventajas: la señal de marca de agua incrustada en el dominio de transformación se puede distribuir a todos los píxeles en el dominio espacial, lo que es beneficioso para garantizar la invisibilidad de la marca de agua. En el dominio de transformación, ciertas características del sistema visual (tales como características de video) se pueden incorporar más convenientemente al proceso de codificación de marcas de agua. El método del dominio de transformación puede ser compatible con los estándares internacionales de compresión de datos, logrando así la codificación de marca de agua en el dominio de compresión. Por lo tanto, el método de transformación de dominio debería ser la corriente principal de la tendencia futura de los algoritmos de marca de agua. Sin embargo, los algoritmos del dominio de transformación generalmente requieren una gran cantidad de cálculos y operaciones de programación complejas. Matlab ha cambiado esta situación. La caja de herramientas de procesamiento de imágenes de Matlab proporciona funciones de transformación de imágenes de uso común. Se pueden implementar algoritmos de dominio de transformación complejos en Matlab simplemente llamando a la función, lo que refleja completamente la simplicidad y eficiencia del uso de Matlab.
Las principales funciones de transformación de imágenes son las siguientes:
dct es la transformada de coseno discreta unidimensional
idct es la transformada de coseno discreta inversa unidimensional;
dct2 es una transformada de coseno discreta bidimensional;
idct2 es una transformada de coseno discreta inversa bidimensional;
(4) Funciones de procesamiento de imágenes enriquecidas;
Requisitos de la tecnología de marca de agua La marca de agua incorporada es invisible y muy robusta. La invisibilidad se puede comparar mediante efectos visuales y calculando la relación señal-ruido máxima de la imagen, mientras que la robustez requiere varios ataques a la imagen con marca de agua, y el problema se ilustra comparando la marca de agua extraída de la imagen después del ataque. Matlab tiene varias funciones de procesamiento de imágenes que pueden implementar varios ataques a imágenes.
En resumen, Matlab tiene las características de lenguaje simple, funciones ricas, uso fácil y cálculo numérico eficiente. Es una opción efectiva para aplicar el poderoso software Matlab a la tecnología de marca de agua digital. Matlab Realizar investigaciones sobre marcas de agua en imágenes.
4.1 Proceso de incrustación de marcas de agua
(1) Codificación de imágenes basada en la transformación de Arnold
Matlab se implementa de la siguiente manera:
La transformación de Arnold es dada por Se implementa la función r=Arnold(w0,fila,colum,veces), donde w0 son los datos de la imagen leída, la fila es el número de filas, la columna es el número de columnas y veces es el número de transformaciones de Arnold.
función r=Arnold(w0,fila,colum,veces)
para k=1:veces
para i=1:fila
para j=1:colum
i1=i+j;
j1=i+2*j;
si i1>fila p> p>
i1=mod(i1,fila);
fin
if j1>colum
j1=mod(j1,colum) ;
fin
si i1= =0
i1=fila;
fin
si j1= =0
j1=colum;
fin
w1(i1,j1)=w0(i,j);
fin
p>
fin
w0=w1;
fin
r=w0;
Utilice imwrite(w0,'Arnold .bmp', 'bmp') para escribir el archivo de imagen codificado; utilice imshow('Arnold.bmp') en MATLAB para mostrar esta imagen.
Este artículo utiliza la imagen de marca de agua binaria bidimensional watermark.bmp. Escaneamos los datos de la imagen (64 * 64) en una matriz bidimensional e implementamos la transformación de Arnold para obtener la matriz bidimensional codificada. . A medida que aumenta el número de iteraciones, la imagen gradualmente se vuelve caótica, pero después de una cierta cantidad de veces, volverá a la imagen original. Debido a que el tamaño de watermark.bmp es 64 * 64, volverá a la imagen original después de 48 iteraciones de la imagen de prueba, es decir, Período periódico = 48.
Este algoritmo elige codificar 8 veces porque la imagen de marca de agua original se ha convertido en una imagen sin forma después de 8 transformaciones de Arnold. Los resultados experimentales muestran que este método puede caracterizar mejor el grado de confusión de las imágenes, lo que es básicamente consistente con la visión humana. Sin embargo, cabe señalar que cuantas más veces se codifique una imagen, mayor será el grado de codificación. Por lo tanto, al incrustar marcas de agua, no es científico aumentar el número de tiempos de codificación para mejorar su robustez. Un método razonable es calcular el grado de codificación de la imagen codificada y detenerse después de alcanzar un grado de codificación más satisfactorio para evitarlo. aumentando ciegamente el número de revueltas.
El propietario de los derechos de autor del vídeo conserva el número de veces de codificación como clave. Si el propietario ilegal no conoce la cantidad de veces de codificación, será difícil restaurar la imagen de marca de agua original.
La imagen de la marca de agua original se muestra en la Figura 4-1. El efecto de este algoritmo después de codificar 8 veces se muestra en la Figura 4-2:
Figura 4-1 La marca de agua original. imagen 4-2 Después de codificar 8 veces
(2) Matlab implementa el proceso de incrustación:
En este artículo, se selecciona una transmisión de video en formato yuv de 352 × 288 × 142 para realizar pruebas. El modelo de color YUV es un modelo de color de uso común. Su característica básica es separar la señal de brillo de la señal de color. Dado que el ojo humano es más sensible a los cambios de brillo que a los cambios de color, el valor del componente Y en el modelo YUV. ocupa un ancho de banda mayor que igual al ancho de banda ocupado por el componente de color. El modelo de espacio de color YUV puede evitar hasta cierto punto el problema de división de valores cerrados causado por la alta dispersión y la alta correlación del modelo RGB, y el cálculo también es relativamente simple. Los componentes Y y UV en este modelo de espacio de color son independientes entre sí, reflejan las reglas visuales de los ojos humanos al observar los colores y se utilizan ampliamente en la práctica. Entre ellos, "Y" representa el brillo (Luminance o Luma), que es el valor de la escala de grises, mientras que "U" y "V" representan el croma (Chrominan" o Chroma), que se utiliza para describir el color y la saturación de la imagen. para especificar el color del píxel, por lo tanto, el espacio de color YUV es más estable y más fácil de analizar.
Este artículo selecciona el cuadro 39 en el video de prueba como se muestra en la Figura 4-3. 2, pero comúnmente se le llama formato "420".
Figura 4-3 Vídeo sin marca de agua incrustada
Paso uno: leer el archivo;
Leer el archivo de vídeo mediante [yuv,Y,u, v, num_f]=loadyuv(filename) implementación, filename es el nombre del archivo de video seleccionado. yuv es una matriz de cuatro dimensiones que devuelve el componente yuv del video, Y es el componente de brillo, u y v son componentes de color y num_f es el número de todos los cuadros en el archivo de video.
La lectura del componente YUV de un marco de datos se implementa en Matlab mediante el siguiente código fuente:
función [YUV,Y,U,V] = loadFileYUV(width,heigth, Marco, nombre de archivo, formato)
[Teil_h,Teil_b]=YUVFormat(formato);
id de archivo = fopen(nombre de archivo,'r');
dónde ancho: ancho de cada cuadro; altura: alto de cada cuadro; cuadro: el cuadro actualmente cargado; nombre de archivo: nombre del archivo de video; Teil_h: parámetro de escala vertical; YUV: valor de retorno, componente YUV de retorno; variable tridimensional En el algoritmo de este artículo, el ancho y la altura de los componentes U y V se establecen para que sean los mismos que Y, por lo que hay duplicados en los componentes U y V. YUV(:,:,1) almacena el componente Y; YUV(:,:,2) almacena el componente U; YUV(:,:,3) almacena el componente V; de los tres componentes, matrices bidimensionales, no hay duplicaciones y sus longitudes pueden ser diferentes.
Y_delt(j)=delt(Y(:,:,w(i)),Y(:,:,4*(i-1)+j)); >Donde Y_delt es la diferencia en Y entre el cuadro actual y el siguiente grupo de cuadros, m(i)=max(Y_delt(j)); determine el Y_deltmax más grande en cada grupo y guárdelo en la variable m para obtener el valor. en cada grupo Los fotogramas de vídeo más sensibles al movimiento. w(i+1)=4*(i-1)+k localiza el Y_deltmax más grande y lo almacena en la variable w.
Finalmente, obtenemos Y32=double(Y(:,:,w)). Y32 es el video de 32 cuadros cuyo componente Y en el cuadro de video cumple con la sensibilidad. Es una matriz tridimensional. de 355*288*32.
Segundo paso: Dividir en bloques;
Al dividir en bloques, se requieren etiquetas de bloque, lo que da como resultado diferentes dimensiones, por lo que los valores solo se pueden asignar píxel a píxel. Matlab, BY( t1,t2,t3,j*5+k+1)= double(Y32((64*j+t1),(64*k+t2),i)) se implementa, se corta en 20 pedazos, cada pieza es un bloque de datos BY de 64* 64*4, donde t1 es la coordenada del bloque, t2 es la coordenada de la columna del bloque, la etiqueta del marco t3, j*5+k+1 es el número de etiqueta rápida.
El tercer paso: transformación DCT tridimensional;
Cada cuadro de la secuencia de imágenes en movimiento se puede considerar como una imagen fija. Se puede considerar la realización de DCT 3D en la secuencia de imágenes en movimiento. como primero transformar cada cuadro, realice DCT 2D y luego realice DCT 1D en la dirección entre cuadros.
%Realiza una transformación DCT 1D en la dirección entre cuadros de cada bloque
para i=1:64
para j=1:64
dcta(i,j,1:4,index(20))=dct(BY(i,j,1:4,index(20)));
end
end
%Realice DCT 2D en cada cuadro de cada bloque
para i=1:4
dct3a(:,:,i, index (20))=dct2(dcta(:,:,i,index(20)));
end
Paso 4: proceso de incrustación de marca de agua;
La lectura de la imagen binaria de la marca de agua se implementa mediante message=double(imread('watermark.bmp') el mensaje es una matriz bidimensional compuesta de 0 y 1.
Incruste la secuencia de marca de agua codificada en el coeficiente dct seleccionado, el código fuente es el siguiente:
donde dct3a es el coeficiente DCT, el índice [20] es la sensibilidad y el brillo de la textura. La pieza es relativamente sensible y el propietario de los derechos de autor conserva S como clave.
S=60;
T1=S/4;
T2=3*T1;
para i=1:64
para j=1:64
if (w2(i,j)==1)
if (dct3a(i,j,1,índice (20))>=0)
dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20) ),S)+T1;
end
if (dct3a(i,j,1,index(20))<0)
dipin(i ,j)=dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T1;
end
fin
if (w2(i,j,:)==0)
if (dct3a(i,j,1,index(20) )>=0)
dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20)),S )+T2;
end
if (dct3a(i,j,1,index(20))<0)
dipin(i,j) =dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T2;
end
end
end
end
Paso 5: Transformación inversa DCT tridimensional
Primero realice el primer paso; del bloque El cuadro se somete a una transformación inversa DCT bidimensional, luego los otros tres cuadros se someten a una transformación inversa bidimensional y, finalmente, la dirección entre cuadros se somete a una transformación inversa DCT unidimensional. Matlab implementa este proceso de la siguiente manera:
Transformación inversa DCT bidimensional:
idcta(:,:,1,index(20))=idct2(dipin); /p>
for i=2:4
idcta(:,:,i,index(20))=idct2(dct3a(:,:,i,index(20)));
end
Realice una transformación inversa DCT unidimensional en la dirección entre cuadros de cada bloque
para i=1:64
para j=1: 64
idct3a(i,j,1:4,index(20))=idct(idcta(i,j,1:4,index(20)));
end
end
Paso 6: coloque los datos en la ubicación original;
Paso 7: escriba el archivo de vídeo; p>
La escritura de archivos de video se implementa mediante el siguiente programa, donde fileId es la ubicación donde se escribe el archivo de video.
fileId = fopen('vectra_w.yuv','wb')
fwrite(fileId,Y(:,:,i)' , 'uchar');
fwrite(fileId,u(:,:,i)' , 'uchar');
fwrite(fileId,v(:,:,i)' , 'uchar');
El efecto se muestra en la Figura 4-4:
Figura 4-4 Vídeo con marca de agua incrustada
4.2 Proceso de detección de marca de agua
Marca de agua El proceso de detección es el proceso inverso al de incrustar marcas de agua, y su implementación en Matlab es la siguiente:
filename='vectra_w.yuv'; Este archivo es un video que contiene una marca de agua (posiblemente un video después de haber sido atacado) .
[yuv,Y,u,v,num_f]=loadyuv(filename);
Los principios de lectura de archivos de vídeo y transformación directa DCT tridimensional son los mismos que los de la incrustación. proceso.
La extracción de datos de marcas de agua se implementa en Matlab mediante el siguiente programa, donde S, T1, T2, etc. son claves durante la incrustación y el propietario de los derechos de autor las posee.
para i=1:64
para j=1:64
if (mod(abs(dct3b(i,j,1,index(20 ))),S)<((T1+T2)/2))
shuiyin(i,j)=1;
fin
if ( mod(abs(dct3b(i,j,1,index(20))),S)>=((T1+T2)/2))
shuiyin(i,j)=0;
end
end
end
La transformación inversa de Arnold es la siguiente:
w0=shuiyin;
p>w2=Arnold(w0,Hm,Wm,40);
w0 son los datos de la marca de agua detectados, Hm y Wm son las filas y columnas de los datos de la marca de agua, y el El número de transformaciones es 40.
Escriba un archivo de marca de agua y detecte si la imagen de la marca de agua existe y si es diferente de la imagen de la marca de agua original.
imwrite(w2,'Restore.bmp', 'bmp');
imshow('Restore.bmp');
En resumen, la marca de agua La incrustación implica principalmente preprocesar el video y la marca de agua respectivamente, y luego seleccionar la posición de incrustación adecuada de la marca de agua y la estrategia de incrustación razonable de acuerdo con el algoritmo de incrustación, obteniendo así los datos del video con marca de agua. Las características HVS se utilizan en cada enlace para mejorar la solidez de la marca de agua de vídeo. Finalmente, se utiliza la estrategia de detección de marca de agua de video correspondiente para extraer la marca de agua y proteger el video. Los resultados muestran que el algoritmo de este artículo puede extraer con éxito la imagen de la marca de agua