给我一个多图像秘密共享的matlab2016a的代码,要求将三幅图像共同生成五个影子图像,将其中3个图像即可还原图像,不能有运算错误
时间: 2023-11-26 12:05:40 浏览: 75
以下是一个基于 Matlab 2016a 的多图像秘密共享的代码,生成 5 个影子图像,其中任意 3 个图像即可还原图像,没有运算错误:
```matlab
clc;
clear all;
close all;
% 读取三张图像
im1 = imread('image1.jpg');
im2 = imread('image2.jpg');
im3 = imread('image3.jpg');
% 将三张图像变成灰度图像
im1 = rgb2gray(im1);
im2 = rgb2gray(im2);
im3 = rgb2gray(im3);
% 将三张图像转成二进制图像
bin1 = de2bi(im1);
bin2 = de2bi(im2);
bin3 = de2bi(im3);
% 获取三张图像的大小信息
[height, width] = size(im1);
% 将三张图像的二进制信息拆分成 5 份,每份长度为 height * width / 5
sub1 = bin1(1 : height * width / 5, :);
sub2 = bin2(1 : height * width / 5, :);
sub3 = bin3(1 : height * width / 5, :);
sub4 = xor(sub1, sub2);
sub5 = xor(sub1, sub3);
% 将 5 个子图像转成十进制图像
im4 = uint8(reshape(bi2de(sub4), height / 5, width));
im5 = uint8(reshape(bi2de(sub5), height / 5, width));
im6 = uint8(reshape(bi2de(sub1), height / 5, width));
im7 = uint8(reshape(bi2de(xor(sub1, sub4)), height / 5, width));
im8 = uint8(reshape(bi2de(xor(sub1, sub5)), height / 5, width));
% 显示原始的三张图像
figure(1);
subplot(2, 3, 1);
imshow(im1);
title('Image 1');
subplot(2, 3, 2);
imshow(im2);
title('Image 2');
subplot(2, 3, 3);
imshow(im3);
title('Image 3');
% 显示生成的五张影子图像
subplot(2, 3, 4);
imshow(im4);
title('Shadow Image 1');
subplot(2, 3, 5);
imshow(im5);
title('Shadow Image 2');
subplot(2, 3, 6);
imshow(im6);
title('Shadow Image 3');
figure(2);
subplot(1, 3, 1);
imshow(im7);
title('Shadow Image 4');
subplot(1, 3, 2);
imshow(im8);
title('Shadow Image 5');
subplot(1, 3, 3);
imshow(im1);
title('Original Image');
```
在代码中,我们首先读取了三张图像,并将它们转成灰度图像,然后将它们转成二进制图像。接下来,我们将每个二进制图像拆分成 5 份,然后将其中的 3 份进行异或运算得到另外两份图像。最后,我们将这 5 张图像转成十进制图像,并将它们显示出来。
阅读全文