Esteganografía de imágenes basada en LSB utilizando MATLAB

Requisito previo: Introducción a la esteganografía de imágenes , Implementación con Python .
La esteganografía es el método de ocultar datos secretos dentro de cualquier forma de medio digital. La idea principal detrás de la esteganografía es ocultar la existencia de datos en cualquier medio como audio, video, imagen, etc. Cuando hablamos de esteganografía de imágenes, la idea es bastante simple. Las imágenes están formadas por píxeles que generalmente se refieren al color de ese píxel en particular. En una imagen en escala de grises (blanco y negro), estos valores de píxeles oscilan entre 0 y 255 , siendo 0 negro y 255 blanco. 
Concepto de incrustación de datos basada en LSB: 
LSB significa bit menos significativo. La idea detrás de la incrustación de LSB es que si cambiamos el valor del último bit de un píxel, no habrá mucho cambio visible en el color. Por ejemplo, 0 es negro. Cambiar el valor a 1 no hará mucha diferencia, ya que todavía es negro, solo un tono más claro. 
La codificación se realiza mediante los siguientes pasos:
 

  1. Convertir la imagen a escala de grises
  2. Cambiar el tamaño de la imagen si es necesario
  3. Convierte el mensaje a su formato binario.
  4. Inicializar la imagen de salida igual que la imagen de entrada
  5. Recorra cada píxel de la imagen y haga lo siguiente: 
    • Convertir el valor de píxel a binario
    • Obtener el siguiente bit del mensaje para ser incrustado
    • Crear una temperatura variable
    • Si el bit de mensaje y el LSB del píxel son iguales, configure temp = 0
    • Si el bit de mensaje y el LSB del píxel son diferentes, configure temp = 1
    • Esta configuración de temperatura se puede hacer tomando XOR del bit de mensaje y el LSB del píxel
    • Actualice el píxel de la imagen de salida para ingresar el valor de píxel de la imagen + temperatura
  6. Continúe actualizando la imagen de salida hasta que todos los bits del mensaje estén incrustados
  7. Finalmente, escriba la entrada y la imagen de salida en el sistema local.

Ejemplo:
Entrada: mensaje = ‘geeksforgeeks’ 
 

Salida: imagen con el mensaje dado incrustado: 
 

A continuación se muestra la implementación en MATLAB:
 

matlab

% Clear the existing workspace
clear all;
 
% Clear the command window
clc;
 
% Read the input image
input = imread('peppers.png');
 
% Convert image to grayscale
input=rgb2gray(input);
 
% Resize the image to required size
input=imresize(input, [512 512]);
 
% Message to be embedded
message='geeksforgeeks';
 
% Length of the message where each character is 8 bits
len = length(message) * 8;
 
% Get all the ASCII values of the characters of the message
ascii_value = uint8(message);
 
% Convert the decimal values to binary
bin_message = transpose(dec2bin(ascii_value, 8));
 
% Get all the binary digits in separate row
bin_message = bin_message(:);
 
% Length of the binary message
N = length(bin_message);
 
% Converting the char array to numeric array
bin_num_message=str2num(bin_message);
 
% Initialize output as input
output = input;
 
% Get height and width for traversing through the image
height = size(input, 1);
width = size(input, 2);
 
% Counter for number of embedded bits
embed_counter = 1;
 
% Traverse through the image
for i = 1 : height
    for j = 1 : width
         
        % If more bits are remaining to embed
        if(embed_counter <= len)
             
            % Finding the Least Significant Bit of the current pixel
            LSB = mod(double(input(i, j)), 2);
             
            % Find whether the bit is same or needs to change
            temp = double(xor(LSB, bin_num_message(embed_counter)));
             
            % Updating the output to input + temp
            output(i, j) = input(i, j)+temp;
             
            % Increment the embed counter
            embed_counter = embed_counter+1;
        end
         
    end
end
 
% Write both the input and output images to local storage
% Mention the path to a folder here.
imwrite(input, 'path_to_folder\originalImage.png');
imwrite(output, 'path_to_folder\stegoImage.png');

Comparación de imágenes: 
 

Como podemos ver en la captura de pantalla anterior, la entrada y la imagen de salida se ven exactamente iguales para el ojo humano. La imagen de salida tiene el mensaje incrustado en ella.
Ventajas de este método: 
 

  • Este método es muy rápido y fácil de implementar en comparación con otros métodos de esteganografía de imágenes.
  • La imagen de salida tiene una ligera diferencia con la imagen de entrada.
  • En lugar de incrustar el mensaje solo en el LSB, podemos incrustar el mensaje en los dos últimos LSB, incrustando así incluso mensajes grandes.
  • Este método constituye la base de muchos otros algoritmos complejos.
  • En lugar de incrustar el mensaje solo en el LSB, podemos incrustar el mensaje en los dos últimos LSB, incrustando así incluso mensajes grandes.

Desventajas de este método: 
 

  • Este tipo de codificación de datos es débil ya que se puede decodificar fácilmente tomando los LSB de la imagen y obteniendo el mensaje en formato binario.
  • Este método es demasiado antiguo porque se usó hace mucho tiempo cuando aún no se habían desarrollado otros métodos de codificación.
  • Al incrustar el mensaje en más de un LSB, la calidad de la imagen puede reducirse dependiendo de cuántos píxeles se cambien. 
     

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 *