[Proyecto] Marca de agua digital basada en la señal de voz LSB de la GUI de Matlab [Contiene el código fuente 619 de Matlab]

1. Introducción

1 Introducción al algoritmo
LSB LSB se denomina bit menos significativo (bit menos significativo), que es una tecnología de ocultación de datos simple y eficaz. El método básico de la esteganografía LSB es reemplazar el bit más bajo de la imagen portadora con la información secreta que se incrustará. El plano superior de la imagen original y el plano más bajo que representa la información secreta forman una nueva imagen que contiene información oculta.
Inserte la descripción de la imagen aquí
La imagen en escala de grises almacena píxeles en un formato de un solo canal, y cada píxel tiene un valor entre 0 y 255, y el plano de bits del píxel corresponde a cada bit del píxel binario. Tome la imagen de arriba como ejemplo, el valor de un determinado píxel es 78, su valor binario es 01001110 y el peso de bit disminuye de izquierda a derecha. El bit más a la izquierda es el bit más significativo (MSB, cuyo peso de bit es 2 7 2 ^ 72
7
), y el bit más a la derecha El bit menos significativo (LSB, el peso del bit es 2 0 2 ^ 02
0
). Los mismos bits de cada píxel se extraen para formar un nuevo plano, que es el llamado plano de bits de la imagen. El algoritmo de esteganografía LSB, como su nombre indica, incrusta / oculta información en el LSB, que es el plano de bits más bajo.

Una cosa a tener en cuenta es que cuando LSB está incrustado, el formato de imagen de portadora debe ser un formato de imagen en escala de grises.

Tome la famosa imagen de Lena como ejemplo, la siguiente es la imagen original de la imagen en escala de grises de Lena: la
Inserte la descripción de la imagen aquí
siguiente son sus diversas
Inserte la descripción de la imagen aquí
imágenes de plano de bits, de izquierda a derecha, de arriba a abajo, los planos de bits disminuyen a su vez: puede ver que cuanto más alto es el plano de bits, la información de la imagen original contenida. Cuanto más, mayor es la contribución al valor de gris de la imagen y más fuerte es la correlación entre los bits adyacentes, y viceversa. El plano de bits más bajo del LSB básicamente no contiene información de imagen, similar al ruido / ruido aleatorio, por lo que puede completar la marca de agua / información secreta aquí.

El diagrama de incrustación es el siguiente: Al
Inserte la descripción de la imagen aquí
seleccionar diferentes planos de bits para la incrustación, la fidelidad del algoritmo LSB:
Inserte la descripción de la imagen aquí2 Principio del algoritmo
En términos generales, las imágenes que vemos están compuestas de píxeles pequeños y todos los píxeles se colocan juntos para formar un cuadrado grande , este gran cuadrado es la imagen que vemos. Una imagen en escala de grises (es decir, lo que normalmente llamamos una imagen en blanco y negro) se compone de una capa de píxeles, mientras que una imagen en color se compone de tres capas de esas imágenes en escala de grises. A continuación se muestra un ejemplo de una imagen en escala de grises. La razón por la que podemos ver blanco y negro en la imagen es porque el valor de píxel de cada píxel es diferente. 0 significa negro puro, 255 significa blanco puro y el gris se compone del valor entre estos dos números. Cuanto más cerca de 0, más oscuro, más cerca de 255 más blanco. Entonces, ¿por qué son 0 y 255? Debido a que la computadora es binaria, usa 8 bits para representar un píxel (también se pueden usar más bits, de modo que la gradación de color de la imagen será mayor y la imagen también ocupará más espacio, pero los ojos de la gente común no son No se pueden reconocer tantos colores, a menos que sea diferente de la gente común), por lo que el valor máximo es 255 y el mínimo es 0. lsb oculta información basada en la característica del sistema binario, porque el ojo humano no es un perceptrón de color o brillo muy preciso, por lo que el ojo humano no notará el ajuste fino del nivel de gris de píxeles 1 hacia arriba y hacia abajo, es decir, modificar 8. El bit más pequeño de un código binario. Cuando cambiamos el último bit de cada píxel de la imagen según nuestras ideas, mostrará la información que queremos, pero el usuario no puede verla, ni afectará el contenido de la imagen. Esta es la marca de agua digital lsb.
3 Las características básicas del algoritmo LSB:
LSB es un algoritmo de ocultación de datos de gran capacidad
. La robustez de LSB es relativamente pobre (cuando la imagen stego encuentra procesamiento de señal, como: ruido, compresión con pérdida, etc., se utilizará cuando se extrae información incrustada. Perdida)
4 El método de incrustación del algoritmo LSB común: la
información secreta se incrusta continuamente en el plano de bits más bajo hasta el final, y la parte restante no se procesa (software típico MandelSteg). La
información secreta se incrusta continuamente en el plano de bits más bajo hasta el final, y la parte restante es aleatoria (también llamado tratamiento de desertificación, software típico PGMStealth)
Información secreta incrustada continuamente en el plano de bits menos significativo, y una vez en el plano inferior y se incrusta simultáneamente en el plano de bits menos significativo y en un plano inferior secundario, la
información secreta está incrustada en el plano de bits menos significativo, por lo que el plano de bits más bajo es incrustado completamente incrustado después de los tiempos de reincorporación plano inferior de
la información secreta en el nivel más bajo Incrustación aleatoria en el plano de bits Los
cinco métodos anteriores, cuando la capacidad de incrustación es diferente, la robustez es diferente

En segundo lugar, el código fuente

function varargout = untitled1(varargin)
% UNTITLED1 M-file for untitled1.fig
%      UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing
%      singleton*.
%
%      H = UNTITLED1 returns the handle to a new UNTITLED1 or the handle to
%      the existing singleton*.
%
%      UNTITLED1('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in UNTITLED1.M with the given input arguments.
%
%      UNTITLED1('Property','Value',...) creates a new UNTITLED1 or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before untitled1_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to untitled1_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help untitled1

% Last Modified by GUIDE v2.5 21-Nov-2012 21:12:41

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled1_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled1_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{
    
    1})
    gui_State.gui_Callback = str2func(varargin{
    
    1});
end

if nargout
    [varargout{
    
    1:nargout}] = gui_mainfcn(gui_State, varargin{
    
    :});
else
    gui_mainfcn(gui_State, varargin{
    
    :});
end
% End initialization code - DO NOT EDIT


% --- Executes just before untitled1 is made visible.
function untitled1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to untitled1 (see VARARGIN)

% Choose default command line output for untitled1
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes untitled1 wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = untitled1_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{
    
    1} = handles.output;


% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
%        contents{
    
    get(hObject,'Value')} returns selected item from popupmenu1


% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on selection change in popupmenu2.
function popupmenu2_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array
%        contents{
    
    get(hObject,'Value')} returns selected item from popupmenu2


% --- Executes during object creation, after setting all properties.
function popupmenu2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global fs;
global x1;
global xmax;
global t1;
global l1;
var=get(handles.popupmenu2,'value');
switch var
    case 1
        [x1,fs]=audioread('music1.wav'); 
        cy2=x1(:,1);
    case 2
        [x1,fs]=audioread('music2.wav'); 
  
end
%从底部到顶部,底部的平面有更惊喜的灰度细节,而高阶的比特平面则包含了大多数的数据。而比特分层的实现就是依靠阈值处理函数:
xmax=max(abs(x1));                          %计算最大幅度
xmin=min(abs(x1));                          %计算最小幅度
l1=size(x1);                                %计算出载频的总长度l1,便于FFT分析频谱
t1=(0:length(x1)-1)/fs;
y1=fft(x1,fs);                              %对信号做FFT变换
f=fs*(0:8191)/fs;
axes(handles.axes1);
plot(t1,x1)                                  %做原始语音信号的时域图形
grid on;axis tight;
title('原始语音信号');
xlabel('time(s)');
ylabel('幅度');
axes(handles.axes2);
plot(f,abs(y1(1:8192)))                      %做原始语音信号的FFT频谱图
grid on;axis tight;
title('原始语音信号FFT频谱')
xlabel('HZ');
ylabel('幅度');
sound(x1)

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global fs;
global x1;
global sy;
global lhsy;
global lhx1;
global qrh;
global QRH;
global xmax;
global symax;
global l1;
global l2;
global t1;
global t2;
global qshuiyin;
global Qshuiyin;
var=get(handles.popupmenu1,'value');
switch var
    case 1
        [sy,fs]=audioread('shuiyin1.wav');
    case 2
        [sy,fs]=audioread('shuiyin2.wav');
  
end

Tres, resultados en ejecución

Inserte la descripción de la imagen aquí

Cuatro, comentarios

Complete el código o escriba en nombre de agregar QQ 1564658423

Supongo que te gusta

Origin blog.csdn.net/TIQCmatlab/article/details/115184794
Recomendado
Clasificación