matlab学习(二)(4.2-4.8)

一、DCT变换原理

        (1)DCT的基本原理是将实数信号转换为频域表示,离散余弦变换(DCT)是一种将实数函数转换为余弦函数的方法。它的基本原理是将实偶函数的离散傅立叶变换(DFT)简化,使得变换过程中只包含实数运算。在图像处理等领域,DCT可以有效地将图像中的高频和低频信息分离开来,从而达到压缩和增强的效果。

        (2)基于DCT的数字水印嵌入步骤:对原始图像进行DCT变换。这将把图像从空间域转换到频域。通常,我们将图像分成8x8的块,然后对每个块进行DCT变换。在DCT变换后,我们选择适当的位置来嵌入水印信息。通常,我们会选择高频系数,因为它们对图像的视觉质量影响较小。将水印信息嵌入到选定的DCT系数中。这可以通过微小地改变这些系数来实现。嵌入的水印信息可以是二值化的灰度图像。对嵌入水印后的图像进行逆DCT变换,以得到带有水印的图像。

        (3)基于离散余弦变换(DCT)的图像置乱步骤如下:
                1、分割:首先将图像分割成8x8或16x16的小块。
                2、DCT变换:对每个小块进行DCT变换。具体来说,对于N×N大小的256灰度级的宿主图像I进行N×N二维离散余弦变换(DCT)。以ZigZag方式对于DCT变换后的图像频率系数重新排列成一维向量 Y= {y1, y2,…yN×N}。
                3、置乱:对DCT变换后的系数进行置乱。置乱的方式可以根据具体的应用需求来确定,例如可以使用Arnold变换。
                4、逆DCT变换:对置乱后的DCT系数进行逆DCT变换,得到置乱后的图像。

        (4)基于离散余弦变换(DCT)的图像置乱后的还原步骤如下:
                1、读取置乱图像:首先,我们需要读取要进行还原的置乱图像。
                2、分割:将置乱图像分割成8x8或16x16的小块。
                3、DCT变换:对每个小块进行DCT变换。具体来说,对于N×N大小的256灰度级的宿主图像I进行N×N二维离散余弦变换(DCT)。以ZigZag方式对于DCT变换后的图像频率系数重新排列成一维向量 Y= {y1, y2,…yN×N}。
                4、反置乱:对DCT变换后的系数进行反置乱。反置乱的方式需要和置乱时使用的方式相同,例如如果置乱时使用的是Arnold变换,那么反置乱时也需要使用Arnold反变换。
                5、逆DCT变换:对反置乱后的DCT系数进行逆DCT变换,得到还原后的图像。

1、DCT变换方法实现图片的置乱及置乱后的图片恢复

% 读取图像
img = imread('test3.jpg');
% 确保图像是灰度图
if size(img, 3) == 3img = rgb2gray(img);
end% 获取图像的大小
[N, M] = size(img);% 对图像进行DCT变换
dct_img = dct2(img);% 创建一个随机置乱矩阵
rng(1); % 设置随机数生成器的种子以确保结果的可重复性
P = randperm(N);% 使用置乱矩阵对DCT变换后的图像进行置乱
dct_img_permuted = dct_img(P, P);% 对置乱后的图像进行逆DCT变换
img_permuted = uint8(idct2(dct_img_permuted));% 保存置乱后的图像
imwrite(img_permuted, 'permuted_image.jpg');% 对置乱后的图像进行DCT变换
dct_img_permuted = dct2(img_permuted);% 创建一个反置乱矩阵
P_inv(P) = 1:N; % 创建反置乱矩阵% 使用反置乱矩阵对DCT变换后的图像进行反置乱
dct_img_recovered = dct_img_permuted(P_inv, P_inv);% 对反置乱后的图像进行逆DCT变换
img_recovered = uint8(idct2(dct_img_recovered));% 保存恢复后的图像
imwrite(img_recovered, 'recovered_image.jpg');

二、DWT变换原理

        (1)离散小波变换是一种信号处理技术,它将连续的信号分解为不同频率的子带信号,以便更好地分析和处理信号。离散小波变换则是在离散的时间或空间域上对信号进行变换。离散化后的小波变换具有更好的实时性和稳定性。

        1、将原始信号进行低通滤波和高通滤波,得到两个子信号,即近似系数和细节系数;
        2、对近似系数进行递归分解,得到若干个尺度下的近似系数和细节系数;
        3、通过对细节系数进行递归分解,得到若干个尺度下的细节系数;
        4、重构原始信号时,将不同尺度的近似系数和细节系数进行合并,得到重构后的信号。

        (2)基于离散小波变换(DWT)的图像置乱步骤如下:
                1、读取原始图像:首先,我们需要读取要进行置乱的原始图像。
                2、DWT变换:对原始图像进行DWT变换,将图像分解为不同频率的子带。这一步通常会得到四个子图,分别代表低频近似(LL)、水平细节(LH)、垂直细节(HL)和对角线细节(HH)。
                3、置乱:对DWT变换后的系数进行置乱。置乱的方式可以根据具体的应用需求来确定,例如可以使用Arnold变换。
                4、逆DWT变换:对置乱后的DWT系数进行逆DWT变换,得到置乱后的图像。

        (3)基于离散小波变换(DWT)的图像置乱后的还原步骤如下:
                1、读取置乱图像:首先,我们需要读取要进行还原的置乱图像。
                2、分割:将置乱图像分割成8x8或16x16的小块。
                3、DWT变换:对每个小块进行DWT变换。具体来说,对于N×N大小的256灰度级的宿主图像I进行N×N二维离散小波变换(DWT)。以ZigZag方式对于DWT变换后的图像频率系数重新排列成一维向量 Y= {y1, y2,…yN×N}。
                4、反置乱:对DWT变换后的系数进行反置乱。反置乱的方式需要和置乱时使用的方式相同,例如如果置乱时使用的是Arnold变换,那么反置乱时也需要使用Arnold反变换。
                5、逆DWT变换:对反置乱后的DWT系数进行逆DWT变换,得到还原后的图像。

2、DWT变换方法实现图片的置乱及置乱后的图片恢复

% 读取图像
img = imread('test4.jpg');% 获取图像的大小
[N, M, C] = size(img);% 对图像的每个通道进行DWT变换
dwt_img = zeros(N, M, C);
for c = 1:C[cA,cH,cV,cD] = dwt2(img(:,:,c),'haar');dwt_img(:,:,c) = [cA, cH; cV, cD];
end% 创建一个随机置乱矩阵
rng(1); % 设置随机数生成器的种子以确保结果的可重复性
P = randperm(N);% 使用置乱矩阵对DWT变换后的图像进行置乱
dwt_img_permuted = dwt_img(P, P, :);% 对置乱后的图像进行逆DWT变换
img_permuted = zeros(N, M, C);
for c = 1:Cimg_permuted(:,:,c) = idwt2(dwt_img_permuted(1:N/2,1:M/2,c), dwt_img_permuted(1:N/2,M/2+1:M,c), dwt_img_permuted(N/2+1:N,1:M/2,c), dwt_img_permuted(N/2+1:N,M/2+1:M,c), 'haar');
end
img_permuted = uint8(img_permuted);% 保存置乱后的图像
imwrite(img_permuted, 'permuted_image.jpg');% 创建一个反置乱矩阵
P_inv(P) = 1:N; % 创建反置乱矩阵% 使用反置乱矩阵对DWT变换后的图像进行反置乱
dwt_img_recovered = dwt_img_permuted(P_inv, P_inv, :);% 对反置乱后的图像进行逆DWT变换
img_recovered = zeros(N, M, C);
for c = 1:Cimg_recovered(:,:,c) = idwt2(dwt_img_recovered(1:N/2,1:M/2,c), dwt_img_recovered(1:N/2,M/2+1:M,c), dwt_img_recovered(N/2+1:N,1:M/2,c), dwt_img_recovered(N/2+1:N,M/2+1:M,c), 'haar');
end
img_recovered = uint8(img_recovered);% 保存恢复后的图像
imwrite(img_recovered, 'recovered_image.jpg');

三、matlab中的直方图

        在matlab中,直方图是一种显示图像中强度分布的图,用于表示一幅图像中各个像素强度值的频率。它将数据分组为一系列的数据区间,并以条形的方式展示每个数据区间中的数据数量。

3、在matlab中生成彩色图像直方图

% 读取图像
img = imread('test5.jpg'); % 请将 'your_image.jpg' 替换为您的图像文件名% 将图像转换为灰度图像
img_gray = rgb2gray(img);% 计算直方图
[counts, bins] = imhist(img_gray);% 绘制直方图
figure;
bar(bins, counts);
title('Histogram of Image(图像的直方图)');
xlabel('Pixel Intensity(像素强度)');
ylabel('Frequency(频率)');% 保存直方图
saveas(gcf, 'histogram.png'); % 将 'histogram.png' 替换为您想要的输出文件名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[java]网络编程

网络编程概述 计算机网络: 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序…

题库管理系统-基于Springboot实现JAVA+SQL离散数学题库管理系统(完整源码+LW+翻译)

基于Springboot实现JAVASQL离散数学题库管理系统(完整源码LW翻译) 概述: 本系统具体完成的功能如下: 1题库的管理与维护:新题的录入,修改,删除等功能。 2生成试卷:包括自动生成与手工改动,要…

Java学习之String类的本质及内部类

目录 常量池 API文档如何阅读 String类常用的方法 示例 内部类 特点 成员内部类 非静态内部类 成员变量访问要点 内部类的访问 示例 在别的类中调用 静态内部类 定义方式 使用要点 示例 匿名内部类 示例 局部内部类 面向对象知识总结思维导图: S…

使用msf进行有防火墙限制的3389端口转发

使用msf进行有防火墙限制的3389端口转发 这里主要是针对在内网中遇到需要开启3389的时候,发现存在防火墙,就没有办法直接远程连接,这个时候就可以使用端口转发使用msf,使用前记得先初始化,连接好数据库这里先使用msf进…

二.音视频编辑-媒体组合-播放

引言 当涉及到音视频编辑时,媒体资源的提取和组合是至关重要的环节。在iOS平台上,AVFoundation框架提供了丰富而强大的功能,使得媒体资源的操作变得轻松而高效。从原始的媒体中提取片段,然后将它们巧妙地组合成一个完整的作品&am…

51之定时器与中断系统

目录 1.定时器与中断系统简介 1.1中断系统 1.2定时器 1.2.1定时器简介 1.2.2定时器大致原理及其配置 1.2.3定时器所需的所有配置总介 2.定时器0实现LED闪烁 3.使用软件生成定时器初始化程序 1.定时器与中断系统简介 1.1中断系统 首先,我们需要来了解一下什么…

设计模式:生活中的享元模式

享元模式的概念可以用日常生活中的图书馆来类比。想象一下,图书馆中的书籍就像是需要大量重复使用的对象。 图书馆中的书籍:享元对象 在图书馆中,每本书都有一个或多个副本。如果每个想要阅读特定书籍的读者都去购买一个新副本,…

深入浅出 -- 系统架构之单体到分布式架构的演变

一、传统模式的技术改革 在很多年以前,其实没有严格意义上的前后端工程师之分,每个后端就是前端,同理,前端也可以是后端,即Ajax、jQuery技术未盛行前的年代。 起初,大部分前端界面很简单,显示的…

AcWing1402.星空之夜

【题目链接】1402. 星空之夜 - AcWing题库 夜空深处,闪亮的星星以星群的形式出现在人们眼中,形态万千。 一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合。 一个星群不能是一个更大星群的一部分。 星群可能是相似的。 如…

上传下载图片的

上传图片 1.上传图片的方法一般是用Upload组件直接上传File的信息 2.通过FormData对象上传 FormData对象是一个JavaScript对象,可以用来存储表单数据 headers:{“Content-type”:“multipart/form-data”} 3.通过Form表单上传 在HTML中创建一个表单&#xff0c…

【蓝桥杯】GCD与LCM

一.概述 最大公约数(GCD)和最小公倍数(Least Common Multiple,LCM) 在C中,可以使用 std::__gcd(a, b)来计算最大公约数 1.欧几里德算法/辗转相除法 int gcd(int a,int b){return b?gcd(b, a%b):a; } 2…

Tensorboard以及Transforms初步学习

一.前情提要 1.本文是代码结合知识点,注释即为知识点 2.主要详细讲解Tensorboard以及Transforms代码以及基础知识 3.若想深入学习,建议阅读 P3. Python学习中的两大法宝函数(当然也可以用在PyTorch)_哔哩哔哩_bilibili 二.简述…

抖音运营技巧

1、视频时长 抖音的作品是否能够继续被推荐,取决于综合数据,包括完播率、点赞率、评论率、转发率和收藏率等。其中,完播率是最容易控制的因素。对于新号来说,在没有粉丝的初期,发布过长的视频可能会导致无人观看。因此…

金田金业带你一文了解现货黄金开户注意事项

现货黄金作为一种受欢迎的投资品种,吸引了越来越多的投资者。然而,在进行现货黄金开户时,有一些重要的注意事项需要牢记。本文将为您详细介绍现货黄金开户的九大关键要点,确保您能够在投资过程中做出明智的决策。 第一&#xff0c…

汇编——SSE对齐

SIMD是(Single Instrument Multi Data),MMX实现了SIMD;SSE是(Streaming SIMD Extension),它取代了MMX;后来AVX(Advanced Vector Extension,高级向量扩展)对SSE进行了扩展…

Java- maven下载jar包,提示找不到,Could not find artifact

1、执行下面命令行 mvn install:install-file -Dfile/home/quangang/桌面/isv-sdk-2.0.jar -DgroupIdcom.jd -DartifactIdisv-sdk -Dversion2.0 -Dpackangjar 2、然后这里要加上jar包

C语言:strlen和sizeof的适用场景

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

macOS上QT打开麦克风和摄像头的权限问题

同样的代码在Windows上可以轻松操作麦克风和摄像头,特别是用QT这种跨平台的框架。但是对macOS这种权限要求完善的系统还需要进行一些配置,那就是增加Info.plist属性配置文件。如果是之前的早期5.x版本的QTCreator因为使用的是qmake构建系统,估…

No dashboards are active for the current data set.

再次记录一下这个离谱的问题 之前出现这个问题是因为目录没写对 今天遇到这个问题的原因是目录是对的,跟目录是否带有中文也没关系 是writer写入的时候写的是空的,离谱的是写入是空的情况下也会生成events日志文件,看起来好像成功写入了一样&…

Spring源码解析上

spring源码解析 整体架构 defaultListableBeanFactory xmlBeanDefinitionReader 创建XmlBeanFactory 对资源文件进行加载–Resource 利用LoadBeandefinitions(resource)方法加载配置中的bean loadBeandefinitions加载步骤 doLoadBeanDefinition xml配置模式 validationMode 获…