[プロジェクト] matlab GUI LSB空域、DWT、DCTアルゴリズムに基づく画像と音声の透かし[Matlabソースコード618を含む]

1.はじめに

1 LSBアルゴリズムの概要
LSBは最下位ビット(最下位ビット)と呼ばれ、シンプルで効果的なデータ隠蔽技術です。LSBステガノグラフィの基本的な方法は、キャリア画像の最下位ビットを埋め込まれる秘密情報に置き換えることです。元の画像の上面と秘密情報を表す最下位面は、隠された情報を含む新しい画像を形成します。
ここに画像の説明を挿入
グレースケール画像は、ピクセルをシングルチャネル形式で格納し、各ピクセルの値は0〜255であり、ピクセルのビットプレーンはバイナリピクセルの各ビットに対応します。上の写真を例にとると、特定のピクセルの値は78、そのバイナリ値は01001110、ビットの重みは左から右に減少します。左端のビットが最上位ビットです(MSB、ビットの重みは2 7 2 ^ 72
7
)、および右端のビット最下位ビット(LSB、ビットの重みは2 0 2 ^ 02
0
)。各ピクセルの同じビットが抽出されて、画像のいわゆるビットプレーンである新しいプレーンが形成されます。LSBステガノグラフィアルゴリズムは、その名前が示すように、最下位ビットプレーンであるLSBに情報を埋め込み/非表示にします。

注意すべき点の1つは、LSBが埋め込まれている場合、キャリア画像形式はグレースケール画像形式である必要があるということです。

有名なレナ画像を例にとると、以下はグレースケール画像レナの元の画像です。
ここに画像の説明を挿入
以下は、左から右、上から下へのさまざまなビットプレーン
ここに画像の説明を挿入
画像であり、ビットプレーンは順番に減少します。ビットプレーンが高いほど、元の画像情報が含まれていることがわかります。画像のグレー値への寄与が大きいほど、隣接するビット間の相関が強くなり、その逆も同様です。LSBの最下位ビットプレーンには、ランダムノイズ/ノイズと同様に、基本的に画像情報が含まれていないため、ここに透かし/秘密情報を入力できます。

埋め込み図は次のとおりです。埋め込みに
ここに画像の説明を挿入
異なるビットプレーンを選択する場合、LSBアルゴリズムの忠実度:
ここに画像の説明を挿入2アルゴリズムの原理
一般的に、表示される画像は小さなピクセルで構成され、すべてのピクセルが一緒に配置されて大きな正方形を形成します。 、この大きな正方形は私たちが見る画像です。グレースケール画像(つまり、通常は白黒画像と呼ばれるもの)は、1層のピクセルで構成され、カラー画像は3層のこのようなグレースケール画像で構成されます。グレースケール画像の例を示します。画像に白黒が表示されるのは、各ピクセルのピクセル値が異なるためです。0は純粋な黒を意味し、255は純粋な白を意味し、灰色はこれら2つの数値の間の値で構成されます。0に近いほど暗くなり、255に近づくほど白くなります。では、なぜ0と255なのですか?コンピュータはバイナリであるため、ピクセルを表すために8ビットを使用します(より多くのビットを使用することもできるため、画像のカラーグレーディングがより多くなり、画像もより多くのスペースを占有しますが、一般の人々の目は普通の人と違うのでなければ、あまり多くの色を認識できないので、最大値は255、最小値は0です。lsbは、人間の目があまり正確な色や明るさのパーセプトロンではないため、バイナリシステムの機能に基づいて情報を非表示にします。したがって、ピクセルのグレーレベル1を上下に微調整しても、人間の目は気づきません。つまり、変更します。 8.バイナリコードの最小ビット。画像の各ピクセルの最後のビットを私たちのアイデアに従って変更すると、必要な情報が表示されますが、ユーザーはそれを見ることができず、画像の内容にも影響しません。これはlsb電子透かしです。
3 LSBアルゴリズムの基本特性:
LSBは大容量のデータ隠蔽アルゴリズム
です。LSBの堅牢性は比較的劣ります(ステゴ画像がノイズ、不可逆圧縮などの信号処理に遭遇した場合に使用されます)。埋め込み情報を抽出する場合。不可逆)
4一般的なLSBアルゴリズムの埋め込み方法:
秘密情報は最後まで最下位ビット平面に継続的に埋め込まれ、残りの部分は処理されません(通常のソフトウェアMandelSteg)。
秘密情報は継続的に埋め込まれます。最下位ビット平面で最後まで、残りの部分はランダム化されます(砂漠化処理とも呼ばれ、典型的なソフトウェアPGMStealth)
秘密情報は最下位ビットプレーンに連続的に埋め込まれ、一度は下位プレーンに埋め込まれ、同時に最下位ビットプレーンに埋め込まれ、2次下位プレーンの
秘密情報は最下位ビットプレーンに埋め込まれるため、最下位ビットプレーンは次のようになります。再埋め込み後に完全に埋め込まれる埋め込み時間
の最下位の秘密情報の下位プレーンビットプレーンへのランダム埋め込み
上記の5つの方法では、埋め込み容量が異なると、堅牢性が異なります。

第二に、ソースコード

function varargout = gui(varargin)
% GUI MATLAB code for gui.fig
%      GUI, by itself, creates a new GUI or raises the existing
%      singleton*.
%
%      H = GUI returns the handle to a new GUI or the handle to
%      the existing singleton*.
%
%      GUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI.M with the given input arguments.
%
%      GUI('Property','Value',...) creates a new GUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before gui_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to gui_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 gui

% Last Modified by GUIDE v2.5 05-Jan-2017 11:30:52

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @gui_OpeningFcn, ...
                   'gui_OutputFcn',  @gui_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 gui is made visible.
function gui_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 gui (see VARARGIN)

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

% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = gui_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 button press in open_original.
function open_original_Callback(hObject, eventdata, handles)
global Raw_image
[filename, pathname]=uigetfile({
    
    '*.bmp','ALL FILES(*.*)'},'选择图片文件');
if isequal([filename pathname],[0,0])
    return;
end
str=[pathname filename];%选择的文件路径和文件名
Raw_image=imread(str);
axes(handles.axes1);
imshow(Raw_image);
% hObject    handle to open_original (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in open_wartermark.
function open_wartermark_Callback(hObject, eventdata, handles)
global mark
[filename, pathname]=uigetfile({
    
    '*.bmp','ALL FILES(*.*)'},'选择图片文件');
if isequal([filename pathname],[0,0])
    return;
end
str=[pathname filename];%选择的文件路径和文件名
mark=imread(str);
axes(handles.axes2);
imshow(mark);
% hObject    handle to open_wartermark (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in embed.
function embed_Callback(hObject, eventdata, handles)
global rawImage
global mark
global embedImage
global markr
global markg
global markb
global alpha
size=512;
block=8;
blocknum=size/block;%每行或每列块的个数
Number=size*size/(block*block);%总块的个数
%alpha=1/3000;  %归一化
T1=3;
rawImage=zeros(size,size);
embedImage=zeros(size,size);
embedImager=zeros(size,size);
embedImageg=zeros(size,size);
embedImageb=zeros(size,size);
bw=zeros(size,size);
block_dct1=zeros(block,block);


imshow(mark);
markr=double(mark(:,:,1));
markg=double(mark(:,:,2));
markb=double(mark(:,:,3));




rawImage = imread('lena.bmp');
rawImager=double(rawImage(:,:,1));
rawImageg=double(rawImage(:,:,2));
rawImageb=double(rawImage(:,:,3));

%==================R分量的嵌入========================
for m=1:blocknum
for n=1:blocknum
        x=(m-1)*block+1;
        y=(n-1)*block+1;
        block_dct1=rawImager(x:x+block-1,y:y+block-1); 
        block_dct1=dct2(block_dct1);
        bw_8_8=bw(x:x+block-1,y:y+block-1);
        block_dct1(1,1)=block_dct1(1,1)*(1+alpha*(markr(m,n)));
        block_dct1=idct2(block_dct1);
        embedImager(x:x+block-1,y:y+block-1)=(block_dct1); 
end
end

%======================G分量的嵌入=================

for m=1:blocknum
for n=1:blocknum
        x=(m-1)*block+1;
        y=(n-1)*block+1;
        block_dct1=rawImageg(x:x+block-1,y:y+block-1); 
        block_dct1=dct2(block_dct1);
        bw_8_8=bw(x:x+block-1,y:y+block-1);
        block_dct1(1,1)=block_dct1(1,1)*(1+alpha*(markg(m,n)));
        block_dct1=idct2(block_dct1);
        embedImageg(x:x+block-1,y:y+block-1)=(block_dct1); 
end
end

%====================B分量的嵌入====================
for m=1:blocknum
for n=1:blocknum
        x=(m-1)*block+1;
        y=(n-1)*block+1;
        block_dct1=rawImageb(x:x+block-1,y:y+block-1); 
        block_dct1=dct2(block_dct1);
        bw_8_8=bw(x:x+block-1,y:y+block-1);
        block_dct1(1,1)=block_dct1(1,1)*(1+alpha*(markb(m,n)));
        block_dct1=idct2(block_dct1);
        embedImageb(x:x+block-1,y:y+block-1)=(block_dct1); 
end
end

3、実行中の結果

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

四、備考

QQ 1564658423を追加するために、コードを完成させるか、記述してください

おすすめ

転載: blog.csdn.net/TIQCmatlab/article/details/115184712