clear all
close all
warning off
clc
CAPA = 5;
SEED = 38;
MSG_SEED = 438;
H = 10; % constraint height - default is 10 - drives the complexity/quality tradeof
tic
currdir = pwd;
dirSource = '.\Cover\'; % cover dir
output_dir = '.\Stego\'; % stego dir
suboutput_dir = '.\Sub_Stego\'; % substego dir
subdir='.\Sub_Cover\'; %Sub_Cover dir
files=dir([dirSource '\*.jpg']);
for w=1:length(files)
full_image_file_name=[dirSource '\' files(w).name];
stego_name = [output_dir '\' files(w).name];
substego_name=[suboutput_dir '\' files(w).name];
subname= files(w).name;
full_subimage_file_name=[subdir '\' files(w).name];
X = imread(full_image_file_name);
I=X;
type=class(X);
%强制转化为double或logical类型
I=double(I);
%% 小波分解获取逼近子图
[ca1,ch1,cv1,cd1]=dwt2(I,'haar');
L=ca1;
amin=min(min(L));
amax=max(max(L));
[lm,ln]=size(L);
subimage=L;
for i=1:1:lm
for j=1:1:ln
subimage(i,j)=((255-0)/(amax-amin))*((L(i,j)-amin))+0;
end
end
subimage=cast(subimage,type);
imwrite(subimage,[subdir,subname]); % 将逼近子图保存至文件"Sub_Cover"
img = jpeg_read(full_subimage_file_name);
dct_coef = img.coef_arrays{1};
[img_h,img_w] = size(dct_coef);
cover_size = img_h * img_w;
dct_coef2 = dct_coef;
% remove DC coefs;
dct_coef2(1:8:end,1:8:end) = 0;
nz_index = find(dct_coef < 10000000); % use all dct coefficients
nz_number = nnz(dct_coef2); % number of non zero ac coefficients
rand('state',SEED); % Pseudo-random Permutation for cover elements
r_index = randperm(length(nz_index));
nz_dct_coef = dct_coef(nz_index(r_index));
rand('state',MSG_SEED); % Pseudo-random Permutation for message
hidden_message = double(rand(ceil(max(CAPA)*nz_number/100+1),1)>0.5);
q_tab = img.quant_tables{1};
q_tab(1,1) = 0.5*(q_tab(2,1)+q_tab(1,2));
q_matrix = repmat(q_tab,[32 32]);
%%% energy of each block
% fun = @(block_struct) sum(sum(abs(q_tab.*block_struct.data)))*ones(8);
% J = blockproc(dct_coef2,[8 8],fun);
dct_coef2 = im2col(q_matrix.*dct_coef2,[8 8],'distinct');
J2 = sum(abs(dct_coef2));
J = ones(64,1)*J2;
J = col2im(J,[8 8], [256 256], 'distinct');
% decide = q_matrix./J; % version 1
pad_size = 2;
im2 = padarray(J,[pad_size pad_size],'symmetric'); % energies of eight-neighbor blocks
size2 = 2*pad_size;
im_l8 = im2(1+pad_size:end-pad_size,1:end-size2);
im_r8 = im2(1+pad_size:end-pad_size,1+size2:end);
im_u8 = im2(1:end-size2,1+pad_size:end-pad_size);
im_d8 = im2(1+size2:end,1+pad_size:end-pad_size);
im_l88 = im2(1:end-size2,1:end-size2);
im_r88 = im2(1+size2:end,1+size2:end);
im_u88 = im2(1:end-size2,1+size2:end);
im_d88 = im2(1+size2:end,1:end-size2);
JJ = (J+0.25*(im_l8+im_r8+im_u8+im_d8)+0.25*(im_l88+im_r88+im_u88+im_d88));
decide = q_matrix./JJ;
% H1 = fspecial('average',[3 3]); % Low
% decide= conv2(abs(decide),H1,'same');
save('decide','decide')
decide = decide(nz_index(r_index));
decide = decide/min(decide);
rho = sort(decide(:));
rho = rho(rho<10000);
hist(rho,10000)
costs = zeros(3, length(nz_index), 'single'); % for each pixel, assign cost of being changed
costs(1,:) = decide; % cost of changing the first cover pixel by -1, 0, +1
costs(3,:) = decide; % cost of changing the first cover pixel by -1, 0, +1
% H1 = fspecial('average',[3 3]); % Low
% costs= single(conv2(costs,H1,'same'));
[d, stego, n_msg_bits, l] = stc_pm1_pls_embed(int32(nz_dct_coef)', costs, uint8(hidden_message)', H); % ternary STC embedding %% 编码完成的工作:把信息嵌入到图片中
% extr_msg = stc_ml_extract(stego, n_msg_bits, H);
% sum(uint8(hidden_message)'~=extr_msg);
em_dct_coef = dct_coef;
em_dct_coef(nz_index(r_index)) =stego;
img.coef_arrays{1} = em_dct_coef;
jpeg_write(img,substego_name);
sub_stego_image=imread(substego_name);
sub_stego_image=double(sub_stego_image);
newL=sub_stego_image;
for i=1:1:lm
for j=1:1:ln
newL(i,j)=((amax-amin)/255)*((sub_stego_image(i,j)-0))+amin;
end
end
stegoimage=idwt2(newL,ch1,cv1,cd1,'haar');
stegoimage=cast(stegoimage,type);
imwrite(stegoimage,[output_dir,subname]);
end
J_embed_show(full_image_file_name,stego_name)
Modify_UERD.zip_UERD_image steganography_steganography_图像隐写分析_隐写
版权申诉
5星 · 超过95%的资源 121 浏览量
2022-07-14
18:44:47
上传
评论
收藏 78KB ZIP 举报
邓凌佳
- 粉丝: 66
- 资源: 1万+
最新资源
- (完整)数据库课程设计餐厅点餐说明书-21ab6d3c8beb172ded630b1c59eef8c75ebf952c.doc
- 2023-04-06-项目笔记 - 第一百五十四阶段 - 4.4.2.152全局变量的作用域-152 -2024.06.04
- 松哥解协议松哥解协议松哥解协议松哥解协议松哥解协议
- 618节日618节日618节日
- tensorflow-gpu-2.9.1-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp39-cp39-win-amd64.whl
- lcd daimalcd daima
- 电影领域-推荐算法-个性化内容-观影决策-电影推荐小程序.zip
- 电气控制PLC考试题库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈