MATLAB-图像加密

这篇具有很好参考价值的文章主要介绍了MATLAB-图像加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 基于像素点RGB值放大加密

图像在每个像素都有相应的颜色值,我们将像素上的颜色值进行放大,并相互重合叠加覆盖,隐藏图像原有的信息从而达到加密的效果。实际上,放大像素值,颜色值自然放大。放大的倍数越大,加密后的图像越不容易分辨出原有的信息。

%% 基于像素点RGB值放大加密
% 读取加密图像
a = imread('e:\image-code\liuyifei.jpg');

% size(a)函数:获取矩阵大小,返回矩阵行列数
% rand()函数:随机生成和a大小相同的矩阵并且乘以100,可理解为加密倍数
r = rand(size(a))*100;

% 将a转为双精度,因为rand()函数生成的r矩阵精度较高,a矩阵与r矩阵相乘,需要提高a矩阵的的精度
rgbd = im2double(a);

%% 矩阵点乘运算,实现rgb值的放大加密
rgbs = rgbd.*r;

%% 保存加密后的图像
% b = imwrite(rgbs,'E:\image-code\jiami001.jpg');

%% 矩阵点除运算,实现rgb值的缩小解密
rgbe = rgbs./r;

%% 显示图像
subplot(1,3,1);imshow(a);title('原图');
subplot(1,3,2);imshow(rgbs);title('加密后');
subplot(1,3,3);imshow(rgbe);title('解密后');

如果提示错误使用imwirte,参考这个博客

MATLAB-图像加密

2. 基于行列像素点置乱加密

行列像素点置乱就是将图像的原始矩阵中的各行顺序打乱,再将各列顺序打乱。具体实现方法是用randsample(函数随机生成一个元素个数等于行数,每个元素不大于行数,且每个元素都不相同的整数序列,按照这个序列数字的排列方式将原图矩阵的各行重新排列。同理重新排列矩阵各列,而随机生成的整数数列即可作为密钥。比如有一个4行6列的矩阵,初始行顺序是(1, 2, 3, 4),生成的行随机数列为(2, 4, 3, 1),则重新排列时将矩阵的第1行置于第四行,依次类推,得到行加密后的图像,在行加密的基础上再用同样的方法进行列加密。一个图像的像素大小就是它的矩阵大小,由于-般图像的矩阵行数列数都比较多,因此可以用这样的加密方法来隐藏图像信息。

%% 基于行列像素点置乱加密
%% 读取图像
a = imread('E:\image-code\liuyifei.jpg');
% 显示原图
subplot(2,3,1);imshow(a);title('原图');

%% 获取原图信息
% 获取原图行列数
[M,N] = size(a);

% 随机生成M个不相同的不大于M的数
Rm = randsample(M,M)';
Mchange = [1:1:M;Rm];

% 随机生成N个不相同的不大于N的数
Rn = randsample(N,N)';
Nchange = [1:1:N;Rn];

%% 加密
% 打乱行顺序
a(Mchange(1,:),:) = a(Mchange(2,:),:); % 按照随机生成的Rm序列中的顺序对原图矩阵的行进行重新排列
subplot(2,3,2);imshow(a);title('行加密');

% 打乱列顺序
a(:,Nchange(1,:)) = a(:,Nchange(2,:)); % 按照随机生成的Rn序列中的顺序对原图矩阵的列进行重新排列
subplot(2,3,3);imshow(a);title('列加密');

%% 解密
% 恢复行顺序
a(Mchange(2,:),:) = a(Mchange(1,:),:); % 逆向还原
subplot(2,3,5);imshow(a);title('行解密');

% 恢复列顺序
a(:,Nchange(2,:)) = a(:,Nchange(1,:)); % 逆向还原
subplot(2,3,6);imshow(a);title('列解密');

MATLAB-图像加密

3. 基于灰度置乱加密

灰度图片被看成是许多个由值在0~255之间的像素点组成的图像,255表示白色,0表示黑色,黑白之间存在256个灰度级。灰度置乱加密是对图像的灰度值进行一定的运算操作来打乱重置,以此隐藏原图的信息。该算法适用于灰度图像,在实际应用中可将彩色图像转化为灰度图像使用。

clear all;
clc;
%% 基于灰度置乱加密
%% 获取原始图像
L = imread('E:\image-code\jiemi002.bmp')
% 请使用灰度图像,如果是彩色图像,会丢失彩色信息!!!
subplot(1,3,1);imshow(L);title('原图');
[x,y] = size(L);
% 生成与原图大小相同的随机矩阵
gadd = fix(255*rand(x,y));

%% 灰度值置乱加密
for m=1:x
    for n=1:y
        L1(m,n)=0.1*L(m,n)+0.9*gadd(m,n);
    end
end
subplot(1,3,2);imshow(L1);title('加密图片');

%% 逆向解密
%% 灰度值置乱加密
for m=1:x
    for n=1:y
        L2(m,n)=(L1(m,n)-0.9*gadd(m,n))/0.1;
    end
end
subplot(1,3,3);imshow(L2);title('解密图片');

MATLAB-图像加密

4. 基于混沌序列加密

混沌序列加密的原理是将根据密钥按照特定的方式进行重新排列后的混沌序列叠加覆盖在原图序列信息上,这样重新排列后的信息进行传输的时候,在公共信道上的信号会以一种随机噪声的特点传输,这样的信号在网络中大量存在,攻击者不能确定这是属于加密信息还是无用信息,降低了加密后的图像被攻击的可能性。接收者接到加密后的信息后,按照提前预定好的方式重新排列混沌序列,并将其从加密序列中去除掉,在经过一定程度上的运算,恢复图像原始的图像序列信息,从而显示出原始的图像信息。其原理示意图如下:

MATLAB-图像加密

clear all;
clc;
%% 处理图像信息
% 读取原图
l = imread('E:\image-code\liuyifei.jpg')
% 转换为灰度图像
x = rgb2gray(l);
% 显示原始图片
subplot(1,3,1);imshow(x);title('原始图片');
% 获取图像大小
[a,b,c] = size(l);
% 定义变量N并赋值
N = a*b;

%% 加密
%% 创建秘钥
% 用户输入加密密码
m(1) = input('请输入秘钥(0~1之间):');
% 提示信息
disp('加密中...');
% 进行N-1次循环产生序列密码
for i=1:N-1
    m(i+1) = 4*m(i)-4*m(i)^2;
end
m = mod(1000*m,256);
% 转换为无符号整型
m = uint8(m);
n = 1;
for i=1:a
    for j=1:b
        % 将图像每一像素值与序列每一位进行异或运算
        e(i,j)=bitxor(m(n),x(i,j));
        n = n+1;
    end
end
%% 显示加密后的图片
subplot(1,3,2);imshow(e);title('加密后图片');
%% 写入加密后的图片
imwrite(e,'E:\image-code\jiami002.bmp');

%% 解密
[a,b,c] = size(e);
N = a*b;
m(1) = input('请输入秘钥(0~1之间):');
disp('解密中...');
% 进行N-1次循环产生序列密码
for i=1:N-1
    m(i+1) = 4*m(i)-4*m(i)^2;
end
m = mod(1000*m,256);
% 转换为无符号整型
m = uint8(m);
n = 1;
for i=1:a
    for j=1:b
        % 将图像每一像素值与序列每一位进行异或运算
        o(i,j)=bitxor(m(n),x(i,j));
        n = n+1;
    end
end

%% 显示解密后的图片
subplot(1,3,3);imshow(o);title('解密后图片');

%% 写入解密后的图片
imwrite(o,'E:\image-code\jiemi002.bmp');

MATLAB-图像加密

资料来源:合天网安实验室
代码文章来源地址https://www.toymoban.com/news/detail-459208.html

到了这里,关于MATLAB-图像加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 飞链云版图-像素放大器

    在之前的【文字生成图片】,【图片生成图片】中,大家会发现,生成的像素不是很高清,在这里,教大家一个将图片无损放大的方式; 访问链接:https://ai.feilianyun.cn/ 点击【Extras】菜单栏 选择好【修改比例】,我在这里放大到了4倍; 然后还有放大器,其实选择一个就可以

    2024年02月11日
    浏览(52)
  • 【Python 无损放大图片】——支持JPG/PNG 可将图片无损放大上万像素

    点个赞留个关注吧!! 今天做一个超简单的无损放大图片的程序,原理很简单 JPG原理:读取原图片的像素点的RGB颜色值并保存到文件内,然后将原图进行翻倍放大,在放大的图上进行绘制,绘制一个像素的翻倍大小,一行一行的绘制,然后保存并删掉颜色文件 PNG原理:因为

    2024年02月11日
    浏览(55)
  • 【[Qt]基于QGraphicsView的图像显示控件,支持放大、缩小、鼠标拖动】

    ImageViewer.h文件 ImageViewer.cpp 文件 具体使用代码如下 1、初始化类对象,并加入界面布局中 2、打开图像,并加载到控件中 3、从控件中卸载图片 源码链接:https://download.csdn.net/download/xiaohuihuihuige/87239431 百度云: 链接:https://pan.baidu.com/s/1W-KUlIKUFAktUKFin63N0g 提取码:4g8a

    2024年02月11日
    浏览(62)
  • 【图像加密解密】区块链的前提下扩散图像加密解密(含直方图)【含Matlab源码 4120期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年03月22日
    浏览(73)
  • 图像加密——matlab实现Arnold置乱算法及矩阵幂的求解

    xn,yn表示像素在原图像中的坐标,xn+1,yn+1表示变换后的像素坐标,a,b为参数,均为正整数且都小于N,变换矩阵行列式满足∣A∣=1,则 可逆 。因此如下为逆置乱公式: 由此可以看到,只要知道参数ab且知道变换次数的情况下,才能让置乱后的图像复原。 逆置乱可以让图像复原

    2023年04月08日
    浏览(49)
  • 基于混沌算法的图像加密解密系统

    项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义: 随着信息技术的迅猛发展,图像的传输和存储已经成为现代社会中不可或缺的一部分。然而,随着互联网的普及和信息的快速传播,图像的安全性问题也日益凸显。为了保护图像的机密性和完整性,

    2024年02月22日
    浏览(52)
  • 基于Matlab实现图像分割技术(附上源码+图像)

    Matlab是一种功能强大的编程语言和开发环境,被广泛应用于图像处理和计算机视觉领域。图像分割是图像处理中的重要技术之一,它将图像分割成若干个具有相似特征的区域,以便更好地理解和处理图像。 在Matlab中,实现图像分割可以使用多种方法和函数。下面将介绍几种常

    2024年02月07日
    浏览(47)
  • 读取图像,显示图像,输出图像像素矩阵

    方法一:使用matplotlib matplotlib是模仿matlab中plot绘图函数的一个library(库)。使用matplotlib.image读取的图片,直接就是数组形式,方便后续处理。 plt.imshow()是对图像进行格式化,后面要跟plt.show()才能显示图片。 方法二:使用PIL和numpy 方法一和方法二效果对比 显示图像: matp

    2023年04月24日
    浏览(52)
  • 【图像处理】基于matlab蚁群聚类图像边缘检测

    目录 基于matlab蚁群聚类图像边缘检测 蚁群聚类是一种模拟自然界中蚂蚁群体行为的算法,常用于解决优化问题。该算法可以用于图像处理中的边缘检测。下面给出一个基于MATLAB的蚁群聚类图像边缘检测的示例代码。 我们首先读入待处理图像,并将其转换为灰度图像。然后,

    2023年04月22日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包