function draw_data_flow()
% 创建画布
figure('Name','图像隐写系统数据流图','NumberTitle','off',...
'Position',[200 200 1000 600], 'Color','w');
axis off;
hold on;
% 定义通用样式
boxColor = [0.8 0.9 0.9]; % 处理框颜色
storageColor = [1 0.9 0.8]; % 数据存储颜色
entityColor = [0.9 0.8 0.9]; % 外部实体颜色
arrowColor = [0.2 0.2 0.7]; % 箭头颜色
textColor = [0 0 0]; % 文本颜色
% 绘制外部实体 ====================================================
rectangle('Position',[0.05 0.4 0.12 0.2], 'Curvature',0.3,...
'FaceColor',entityColor, 'LineWidth',1.5);
text(0.11,0.5, '用户', 'Color',textColor,...
'FontSize',12, 'HorizontalAlignment','center');
% 绘制处理过程 ====================================================
processes = {
[0.25 0.7 0.15 0.08], '载入图像/文本';
[0.45 0.7 0.15 0.08], '预处理图像';
[0.65 0.7 0.15 0.08], '加密信息';
[0.45 0.5 0.15 0.08], '嵌入信息';
[0.65 0.3 0.15 0.08], '保存图像';
[0.45 0.3 0.15 0.08], '提取信息';
[0.25 0.3 0.15 0.08], '解密信息';
};
for i = 1:size(processes,1)
pos = processes{i,1};
rectangle('Position',pos, 'Curvature',0.2,...
'FaceColor',boxColor, 'LineWidth',1);
text(pos(1)+pos(3)/2, pos(2)+pos(4)/2, processes{i,2},...
'FontSize',10, 'HorizontalAlignment','center');
end
% 绘制数据存储 ====================================================
storage = {
[0.35 0.65 0.08 0.06], '原始图像';
[0.35 0.55 0.08 0.06], '处理图像';
[0.75 0.65 0.08 0.06], '加密数据';
[0.75 0.45 0.08 0.06], '含密图像';
[0.35 0.35 0.08 0.06], '隐写图像';
[0.35 0.25 0.08 0.06], '解密数据';
};
for i = 1:size(storage,1)
pos = storage{i,1};
rectangle('Position',pos, 'FaceColor',storageColor);
text(pos(1)+pos(3)/2, pos(2)+pos(4)/2, storage{i,2},...
'FontSize',8, 'HorizontalAlignment','center');
end
% 绘制数据流箭头 ==================================================
% 定义连接关系 [起点x,y, 终点x,y]
connections = [
0.17 0.5 0.25 0.7; % 用户 -> 载入
0.4 0.7 0.45 0.7; % 载入 -> 预处理
0.6 0.7 0.65 0.7; % 预处理 -> 加密
0.65 0.7 0.75 0.65; % 加密 -> 加密数据存储
0.75 0.65 0.65 0.5; % 加密数据 -> 嵌入
0.45 0.7 0.45 0.5; % 预处理 -> 嵌入
0.45 0.5 0.75 0.45; % 嵌入 -> 含密图像
0.75 0.45 0.65 0.3; % 含密图像 -> 保存
0.65 0.3 0.45 0.3; % 保存 -> 提取
0.45 0.3 0.35 0.35; % 提取 -> 隐写图像
0.35 0.35 0.25 0.3; % 隐写图像 -> 解密
0.25 0.3 0.35 0.25; % 解密 -> 解密数据
0.35 0.25 0.17 0.5; % 解密数据 -> 用户
];
% 绘制箭头
for i = 1:size(connections,1)
x = connections(i,[1 3]);
y = connections(i,[2 4]);
annotation('arrow',x,y, 'Color',arrowColor,...
'HeadWidth',10, 'HeadLength',10);
end
% 添加图例
legendEntries = {
{'FaceColor',boxColor, 'EdgeColor','k'}, '处理过程';
{'FaceColor',storageColor, 'EdgeColor','k'}, '数据存储';
{'FaceColor',entityColor, 'EdgeColor','k'}, '外部实体';
};
for i = 1:size(legendEntries,1)
rectangle('Position',[0.82 0.8-i*0.05 0.03 0.03],...
legendEntries{i,1}{:});
text(0.85,0.8-i*0.05+0.015, legendEntries{i,2},...
'FontSize',9, 'VerticalAlignment','middle');
end
hold off;
end部分区域存在重叠,修改后给出完整代码