La esteganografía de imágenes es el proceso de ocultar datos secretos en alguna imagen. En esta publicación, ocultaremos una imagen dentro de otra y la convertiremos en otra imagen y luego extraeremos ambas imágenes de la imagen anterior.
La idea detrás de la esteganografía basada en imágenes es muy simple. Las imágenes están compuestas de datos digitales (píxeles), que describen lo que hay dentro de la imagen, generalmente los colores de todos los píxeles. Como sabemos, cada imagen está compuesta de píxeles y cada píxel contiene 3 valores (rojo, verde, azul).
Por ejemplo, supongamos que tenemos que ocultar img2 en img1, donde tanto img1 como img2 son numpy nd
una array de valores de píxeles. El tamaño de img2 debe ser menor que el tamaño de img1. Estamos usando imágenes en color, por lo que ambas tendrán 3 valores (rojo, verde, azul). Cada valor de píxel varía de 0 a 255, por lo que cada valor de píxel es de 1 byte u 8 bits. Sea img[i][j][l]
el valor de píxel en la ubicación (i, j)
y del canal l donde i varía de 0 a ancho y j varía de 0 a alto y l varía de 0 a 2.
Nota: La calidad de las nuevas imágenes es un poco menor que las imágenes antiguas.
Codificación
Sea img1[i][j][l]
y img2[i][j][l]
sea un valor de píxel de cada imagen. Sea v1 una representación binaria de 8 bits img1[i][j][l]
y v2 una representación binaria de 8 bits de img2[i][j][l]
. Por lo tanto, v3=v1[:4]+v2[:4]
donde v3 son los primeros 4 bits de v1 y v2. Luego asignamos img1[i][j][l]
a v3.
Aquí img1 es la imagen final producida después de la codificación.
Descodificación
Sea img[i][j][l]
el valor de píxel de la imagen. Sea v1 una representación binaria de 8 bits de img[i][j][l]
. Vamos bits aleatorios v2=v1[:4]+4
y v3=v1[4:]+4
bits aleatorios. Luego asignamos img1[i][j][l]
a v2 y img2[i][j][l]
a v3.
Aquí img1 e img2 son las imágenes finales producidas después de la decodificación.
Implementación
Consideremos que las imágenes utilizadas son las siguientes:
Imagen 1
Imagen 2
Queremos ocultar image2 en image1. A continuación se muestra la implementación.
# Python program to demonstrate # image steganography using OpenCV import cv2 import numpy as np import random # Encryption function def encrypt(): # img1 and img2 are the # two input images img1 = cv2.imread('pic1.jpg') img2 = cv2.imread('pic2.jpg') for i in range(img2.shape[0]): for j in range(img2.shape[1]): for l in range(3): # v1 and v2 are 8-bit pixel values # of img1 and img2 respectively v1 = format(img1[i][j][l], '08b') v2 = format(img2[i][j][l], '08b') # Taking 4 MSBs of each image v3 = v1[:4] + v2[:4] img1[i][j][l]= int(v3, 2) cv2.imwrite('pic3in2.png', img1) # Decryption function def decrypt(): # Encrypted image img = cv2.imread('pic3in2.png') width = img.shape[0] height = img.shape[1] # img1 and img2 are two blank images img1 = np.zeros((width, height, 3), np.uint8) img2 = np.zeros((width, height, 3), np.uint8) for i in range(width): for j in range(height): for l in range(3): v1 = format(img[i][j][l], '08b') v2 = v1[:4] + chr(random.randint(0, 1)+48) * 4 v3 = v1[4:] + chr(random.randint(0, 1)+48) * 4 # Appending data to img1 and img2 img1[i][j][l]= int(v2, 2) img2[i][j][l]= int(v3, 2) # These are two images produced from # the encrypted image cv2.imwrite('pic2_re.png', img1) cv2.imwrite('pic3_re.png', img2) # Driver's code encrypt() decrypt()
Producción:
Después del cifrado:
Después del descifrado:
Imagen 1
Imagen 2
Publicación traducida automáticamente
Artículo escrito por shobhitgupta907 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA