matlab学习(一)(3.26-4.1)

一.信息隐藏的概念

信息隐藏是利用一些技术,使得要隐藏的信息是用眼睛看不出变化的。它将秘密信息隐藏在可公开的媒体信息中,使人们凭直观的视觉和听觉难以察觉基存在。

二.空域信息隐藏技术

空域信息隐藏是将信息直接嵌入到图像的像素值中的技术。主要应用于数字图像。

2.1.优点:

简单:实现起来相对简单,不需要复杂的数学变换。

隐蔽性:信息嵌入在图像中,不容易被察觉。

2.2.缺点:

易受攻击:空域信息隐藏容易受到各种攻击,例如压缩、裁剪、滤波等。

图像质量下降:嵌入信息可能导致图像质量的损失。(失真)

隐藏容量小

三.频域信息隐藏技术

频域信息隐藏是将信息嵌入到图像的频域系数中的技术。(如离散余弦变换或小波变换)将图像从空域转换到频域,然后在频域中进行信息隐藏**。**

3.1.优点:

安全性较高(更难以察觉):频域信息隐藏相对于空域更难被攻击,因为攻击者不容易直接操作频域系数。

隐藏效果较好:频域中的某些频率成分更适合隐藏信息。

隐藏容量大

3.2.缺点

比较复杂:频域变换和信息嵌入需要更复杂的数学操作。

图像处理质量影响:频域信息隐藏可能会影响图像的质量,尤其是在高频区域。

四.Arnold变换

4.1(test1)图片是方形的,在matlab(2018a)中实现,代码实现如下

复制代码
function img = arnold(img, n)
    [x, y] = size(img);
    img = double(img);
    for j = 1:n
        temp = zeros(x);
        for i = 1:x
            for j = 1:y
                p = [i-1; j-1];
                p = mod([1, 1; 1, 2] * p, x);
                temp(i, j) = img(p(1)+1, p(2)+1);
            end
        end
        img = temp;
    end
    img = uint8(img);
end
function main()
    img = imread('test.png');
    img_transformed = arnold(img, 1);
    imshow(img_transformed);
    imwrite(img_transformed, 'test_transformed.png');
end

4.2 (test2)彩色图置换代码如下

复制代码
img=imread('test.jpeg');%读取图片,根据Arnold变换的条件,图像必须是正方形
mysize=size(img);%当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数。
if numel(mysize)>2%如果输入是彩色图像
   img=rgb2gray(img); %将彩色到灰度图像的转换
   fprintf("图像为彩色图\n");  %其中\r或者\n表示换行
end
imshow(img,[])
title('彩色原图的灰度图');

figure(2)
imhist(img)	%原图的直方图统计

%如果输入的不是正方形图像,则打印如下
[h,w]=size(img);
if h>w
    img = imresize(img, [w w]);
    fprintf("图像长宽不一样,图像可能失真\r");
end
if h<w
    img = imresize(img, [h h]);  
    fprintf("图像长宽不一样,图像可能失真");
end
[h,w]=size(img);

%置乱与逆置乱必须采用共同参数的时候,就相当于密码,才能解密,让图像复原
n=10;%迭代次数
a=1;b=1;
N=h;%N代表图像宽高,宽高要一样

%置乱操作
imgnnn=zeros(h,w);
for i=1:n
    for y=1:h
        for x=1:w           
            xx=mod((x-1)+b*(y-1),N)+1;   %mod取余操作,(a,b)就是a除以b的余数
            yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1;        
            imgnnn(yy,xx)=img(y,x);                
        end
    end
    img=imgnnn;
end
imgnnn = uint8(imgnnn);

figure(3)
imshow(img,[])%置乱后的图片
title('置乱后的图片 a=1;b=1,n=10');
imwrite (imgnnn,'置乱后的图片.bmp');  %生成图像保存功能

%逆置乱复原
img2=imread('置乱后的图片.bmp');%读取置乱图片
for i=1:n
    for y=1:h
        for x=1:w            
            xx=mod((a*b+1)*(x-1)-b*(y-1),N)+1;%matlab索引中不能是0,要从1开始
            yy=mod(-a*(x-1)+(y-1),N)+1  ;        
            imgnnn(yy,xx)=img2(y,x);                   
        end
    end
    img2=imgnnn;
end
imgnnn = uint8(imgnnn);
figure(4)
imshow(imgnnn,[])
title('逆置乱的复原图片');
imwrite(imgnnn,'逆置乱的复原图片.bmp');%生成图像保存功能

五.PSNR和NC

PSNR(峰值信噪比)

PSNR值越高,表示重建质量越好。

NC(Normalized Compression Distance,标准化压缩距离)

当NC值为1时,表示两个数据序列之间的压缩距离非常小,即它们非常相似。

相关推荐
xiaohanbao099 分钟前
day30 python 模块、包与库的高效使用指南
人工智能·python·学习·算法
虾球xz19 分钟前
游戏引擎学习第295天:堆叠房间用于Z层调试
c++·人工智能·学习·游戏引擎
Lester_11012 小时前
嵌入式学习笔记 - STM32 U(S)ART 模块HAL 库函数总结
笔记·学习
芯动力小子2 小时前
MCU开发学习记录17* - RTC学习与实践(HAL库) - 日历、闹钟、RTC备份寄存器 -STM32CubeMX
单片机·学习·实时音视频
白云千载尽2 小时前
ip与mac-数据包传输过程学习
学习·tcp/ip·macos
lichuangcsdn2 小时前
【springcloud学习(dalston.sr1)】Zuul路由访问映射规则配置及使用(含源代码)(十二)
学习·spring cloud·hystrix
虾球xz4 小时前
游戏引擎学习第292天:实现蛇
c++·学习·游戏引擎
黄鹂绿柳6 小时前
Vue+Vite学习笔记
vue.js·笔记·学习
985小水博一枚呀10 小时前
【AI大模型学习路线】第二阶段之RAG基础与架构——第七章(【项目实战】基于RAG的PDF文档助手)技术方案与架构设计?
人工智能·学习·语言模型·架构·大模型
士兵突击许三多12 小时前
MATLAB中的Switch语句讲解
matlab