Extracción de texto de la imagen usando esteganografía basada en LSB

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *