Requisito previo: esteganografía de imágenes basada en LSB con MATLAB
En la esteganografía de imágenes basada en LSB con MATLAB , vimos cómo ocultar texto dentro de una imagen. En este artículo, vamos a ver, dada la imagen estego o los valores de píxel y la longitud del texto incrustado como entrada, cómo extraer el texto de ella.
Proceso de extracción:
El proceso de extracción es simple. Primero debemos calcular en cuántos píxeles está almacenado el texto. Por ejemplo, el texto «geeksforgeeks» tiene 13 caracteres. Cada carácter se representa en 8 bits. Entonces, la cantidad de píxeles en los que se almacena el texto será 13 * 8 = 104 . Ahora, después de saber esto, necesitamos atravesar la imagen, un píxel a la vez. Almacenamos el bit menos significativo (LSB) de cada píxel en una array extract_bits . Después de extraer los LSB de los píxeles requeridos, debemos tomar cada 8 bits de extract_bits y convertirlos al carácter correspondiente. De esta forma, se puede extraer el texto almacenado en la imagen stego .
En este artículo, tomamos los valores de píxel de la imagen obtenidos en el artículo de requisitos previos. Los valores se almacenan en formato xlsx . El mensaje incrustado en la imagen es «geeksforgeeks» .
Nota: Para almacenar los píxeles de la imagen de salida en formato .xlsx, agregue las siguientes líneas de código al final del código anterior:
matlab
filename = 'path_to_folder\output_img.xlsx'; xlsxwrite(filename, output);
Aquí hay una captura de pantalla de la imagen de entrada y la imagen de stego obtenida del artículo de requisitos previos:
Entrada: una captura de pantalla de los valores de píxeles de la imagen:
Salida: geeksforgeeks
El archivo de entrada en formato xlsx se proporciona aquí: input_image.xlsx
A continuación se muestra la implementación en MATLAB:
matlab
% Clear the existing workspace clear all; % Clear the command window clc; % Getting the input image filename = 'path_to_folder\output_img.xlsx'; input_image = xlsread(filename); % Get height and width for traversing through the image height = size(input_image, 1); width = size(input_image, 2); % Number of characters of the hidden text chars = 13; % Number of bits in the message message_length = chars * 8; % counter to keep track of number of bits extracted counter = 1; % Traverse through the image for i = 1 : height for j = 1 : width % If more bits remain to be extracted if (counter <= message_length) % Store the LSB of the pixel in extracted_bits extracted_bits(counter, 1) = mod(double(input_image(i, j)), 2); % Increment the counter counter = counter + 1; end end end % Powers of 2 to get the ASCII value from binary binValues = [ 128 64 32 16 8 4 2 1 ]; % Get all the bits in 8 columned table % Each row is the bits of the character % in the hidden text binMatrix = reshape(extracted_bits, 8, (message_length/8)); % Convert the extracted bits to characters % by multiplying with powers of 2 textString = char(binValues*binMatrix); % Print the hidden text disp(textString);
Producción:
Como podemos ver en la salida, el texto se extrajo de los valores de píxeles y el resultado se mostró en la ventana de comandos.
Publicación traducida automáticamente
Artículo escrito por AbhijeetSridhar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA