电子科技大学 格拉斯哥学院 2017级欧阳韬

卷积在图像加密中的简单应用

  • 线性滤波/卷积
  • 实际应用——加密
    • 二维前缀和思想
    • 更复杂的卷积核——更好的加密效果
  • 补充
  • 参考资料

线性滤波/卷积

(注:这部分摘自这篇博客)
线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。
线性滤波过程
对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关。卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻转,但如果矩阵是对称的,那么两者就没有什么差别了。

实际应用——加密

很多我们熟知的图像处理其实都可以由由滤波和卷积简单做到。比如锐化,软化,浮雕及高斯模糊,具体效果及原理可看这篇文章
加密是社会中一项很重要的应用,也是信息传播中的一项重要安全措施。对于这个问题,本人思考了下滤波在图像加密中的应用。滤波和卷积都存在对应的逆操作,要想对图像加密的话,选定一个甚至多个卷积核对图像进行变换从而可以得到一个隐含内容的无规则图样。解密的时候需要按照对应的顺序进行对应的逆操作便能得到原图样。但是逆滤波和逆卷积涉及的知识面都比较深在下还没怎么弄懂orz。想要更深入学习的可以参考逆滤波及反卷积。
这里介绍一种在下自己思考的一种比较简单的加密算法。

二维前缀和思想

假如我们选定卷积核为中心及中心的左上区域都为1的矩阵对图像进行操作,可以想见加密图样的每个像素点都是对应位置的原图像及其左上方一定区域内的信息之和,我们称之为前缀和,需要注意的是这个前缀和不是某位置及左上部分所有信息之和而是有一定范围内的。下图展示了4*4的图像矩阵的滤波过程。
滤波1
可以看到左上第一个像素点由于左上没有其他信息了,所以加密后的对应点信息就是其本身。它右边面第一个像素点加密后则有其本身和最左上像素点信息之和。减去最左上信息则可得到第二个点的原信息。依次类推,我们可以还原图像的全部信息。参考代码如下:

#include<stdio.h>
#include<algorithm>
using namespace std;
int m;//原图像大小m*m 
int s1[200][200];//原图像
int s2[200][200]={	{0,1,3,5},{4,10,14,18},{12,26,30,34},{20,42,46,50}};//加密图像 
int n;//卷积核大小n*n
int r;//卷积核半径 
int c[200][200]={	{1,1,0},{1,1,0},{0,0,0}};//convolution kernel 卷积核 
void read()
{scanf("%d",&m);for(int i=0;i<m;i++){for(int j=0;j<m;j++){scanf("%d",&s2[i][j]);}}
}
void read_kernel()
{scanf("%d",&n);r=(n+1)/2;//默认卷积核边长为奇数 for(int i=0;i<r;i++){for(int j=0;j<r;j++){c[i][j]=1;}}
}
int main()
{//read();//read_kernel();m=4;n=3; r=2;for(int i=0;i<m;i++){for(int j=0;j<m;j++){s1[i][j]=s2[i][j];for(int x=max(i-r+1,0);x<=i;x++){for(int y=max(j-r+1,0);y<=j;y++){if(x==i&&y==j) continue;s1[i][j]-=s1[x][y];}}}}for(int i=0;i<m;i++){for(int j=0;j<m;j++){printf("%d\t",s1[i][j]);}printf("\n");}return 0;
}

这份代码的时间复杂度为O(m2r2)的,其实还有很多可优化的地方,有兴趣可以自行优化一下。

更复杂的卷积核——更好的加密效果

形如上述所说的卷积核会使一部分的信息直接相加,其实在实际中加密效果可能并不理想,甚至还是可以看得出原图像的大致内容。所以我们考虑将卷积核中的参数变化来使变换更无规则可循。如果理解了上述代码,其实可以发现前缀和这个性质其实没有得到太大的利用。每次还原(i,j)像素点的时候,其左上所有像素点都已成功还原,而我们则是用对应加密信息一个个减去左上像素点的原本信息来还原该像素点原本信息。如果这个卷积核的左上部分不是1,是不是也能用同样的方法来消除其他点对待处理像素点信息的影响呢。其实我们可以把卷积核中的数值视作权值,再用待处理像素点加密信息来加上其他点乘以对应权值的相反数,最后再乘上它本身对应权值的倒数就可以得到其原本信息了。
滤波2
参考代码如下

#include<stdio.h>
#include<iostream>
#include<time.h> 
#include<algorithm>
using namespace std;
int m;//原图像大小m*m 
int s1[200][200];//原图像
int s2[200][200]={	{0,3,11,19},{12,29,30,31},{0,33,34,35},{-12,37,38,39}};//加密图像 
int n;//卷积核大小n*n
int r;//卷积核半径 
int c[200][200]={	{-1,-6,0},{5,3,0},{0,0,0}};//convolution kernel 卷积核 
void read()
{scanf("%d",&m);for(int i=0;i<m;i++){for(int j=0;j<m;j++){scanf("%d",&s2[i][j]);}}
}
void read_kernel()
{scanf("%d",&n);r=(n+1)/2;//默认卷积核边长为奇数 for(int i=0;i<r;i++){for(int j=0;j<r;j++){c[i][j]=1;}}
}
int main()
{//read();//read_kernel();m=4;n=3; r=2;for(int i=0;i<m;i++){for(int j=0;j<m;j++){s1[i][j]=s2[i][j];for(int x=0;x<r;x++){for(int y=0;y<r;y++){if(i-r+1+x<0||j-r+1+y<0) continue;if(x==r-1&&y==r-1) continue;s1[i][j]-=c[x][y]*s1[i-r+1+x][j-r+1+y];}}if(c[r-1][r-1]!=0) s1[i][j]/=c[r-1][r-1]; }}for(int i=0;i<m;i++){for(int j=0;j<m;j++){printf("%d\t",s1[i][j]);}printf("\n");}return 0;
}

补充

可以观察到其实卷积核中非零部分不一定要在左上,在另外三个方向也是没有关系的。我们也可以用多种不同的卷积核对图像进行多方向多重加密使加密效果更加优秀。解码时也仅需反过来按顺序进行多次逆运算就能还原图像了。

参考资料

[1]https://blog.csdn.net/zouxy09/article/details/49080029
[2]https://blog.csdn.net/haoji007/article/details/53911940
[3]https://blog.csdn.net/qq_16234613/article/details/79387345)
[4]https://blog.csdn.net/mmmmmk_/article/details/82942783
[5]https://baike.baidu.com/item/图像处理/294902?fr=aladdin#2

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

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

相关文章

英国格拉斯哥大学赵德宗教授课题组招收无人驾驶方向全奖博士生

来源&#xff1a;AI求职 格拉斯哥大学 格拉斯哥大学肇建于 1451 年&#xff0c;英国顶尖学府&#xff0c;位于苏格兰第一大城市&#xff0c;是在全世界享有盛誉的研究型大学&#xff0c;英国罗素大学集团创始成员&#xff0c;居 QS 世界大学排名榜单第 73 位。2021 年英国大学完…

格拉斯哥团队用 GaAs 制造“电子皮肤”

柔性光电探测器可以赋予机器人新的能力 一种新形式的柔性光电探测器可以为未来的机器人提供能够“看到”人类视觉范围之外的光的电子皮肤。 格拉斯哥大学的一组工程师支持这项开发&#xff0c;其中涉及一种新开发的方法&#xff0c;将由 GaAs 制成的微型半导体打印到柔性塑料…

格拉斯哥学院

调研报告 调研人:尉子谦,王奎元,王臻,周路尧 课题:格拉斯哥学院学生月生活费情况 调查形式:线上匿名填写调查问卷+现场采访; 任务分配:每人去校园采访至少五人 问卷填写结果: 1.每月的生活费 2.住址所在地 3.生活费用途 4.每月是否有结余 5.对现在的生活费是…

格拉斯哥大学开发新算法,预测病毒的原始宿主

文章来源&#xff1a;ATYUN AI平台 科学家已经开发出一种机器学习算法&#xff0c;可以帮助找到病毒的原始宿主。新工具有希望帮助做出针对致命疾病的预防措施。 这项由格拉斯哥大学领导的新研究采用了一种新算法&#xff0c;该算法旨在利用病毒基因组序列预测广谱RNA病毒的…

格拉斯哥邮箱收件服务器,橄榄邮SSL邮件客户端设置帮助

为满足客户需求&#xff0c;橄榄邮正式推出了SSL邮件收取和发送功能&#xff0c;目前仅提供给橄榄邮付费用户使用&#xff0c;设置方法如下&#xff1a; ● office OUTLOOK 2007版本设置 1.点击【windows开始菜单】—— 搜索【office outlook】—— 打开outlook —— 点击【工具…

格拉斯哥计算机什么专业好,2021格拉斯哥排名全英前十的专业有哪些

2021年格拉斯哥大学的四大学院——人文学院、社会科学学院、科学与工程学院以及医学、兽医与生命科学学院均有优势学科上榜2021年完全大学指南的前10名&#xff0c;这些专业包括&#xff1a; 1.Music 音乐 2.English 英语 3.Computer Science 计算机科学 4.Food Science 食品科…

Python实战:导出聊天记录分析你和你的对象聊了什么

导出聊天记录生成词云看看你和对象聊了什么&#xff08;可惜我没女朋友&#xff09; 导出聊天记录打开消息管理器 导出的格式选择txt格式&#xff08;我这里选择导出的路径是桌面所以在桌面上生成了一个包含聊天记录的.txt文件&#xff09; 干货主要有&#xff1a; ① 200 多…

爱情大数据 | 你的专属微信聊天记录统计

微信聊天记录数据分析 或许每个人的微信列表里都有几个不舍删除的聊天记录&#xff0c;经年累月&#xff0c;这些聊天记录越积越多&#xff0c;终将成为你和这个人之间的美好回忆。这些回忆中有许多信息值得挖掘&#xff0c;尤其是情侣之间&#xff0c;将这些信息统计出来做一份…

Golang -- openwechat微信发送消息、自动回复

开篇 马上就要到农历新年了&#xff0c;不妨写一段代码准时为好友们送上祝福。 该 Demo 使用开源项目 openwechat &#xff0c;实现获取好友列表、为好友发送消息、图片或文件&#xff0c;接收来自好友或群组的消息并设置自动回复等功能。 openwechat Github地址 openwechat 文…

话题通讯自定义msg

前言 在ROS通信协议中&#xff0c;ROS中通过std_msgs封装了一些原生的数据类型&#xff0c;比如&#xff1a;String&#xff0c;Int32,Char,Bool,Int64,Empty 但是这些数据一般只包含一个data字段&#xff0c;结构的单一意味着功能上的局限性&#xff0c;当传输一些复杂的数据…

微信关键字自动回复功能实现

具体实现过程请加入QQ群进行讨论获取 一、微信API解读 微信自动回复可以分为三种&#xff0c;一种是首次关注的欢迎语&#xff0c;一种是关键字自动回复&#xff0c;还有就是无法识别的回复。这三种模式在实现上是完全一样的&#xff0c;只是基于的事件不同而已。要想实现自动回…

Python实现微信自动回复信息的功能(根据不同信息回复对应的信息),手把手搭建加代码分析

目录 一.效果展示 二.前言介绍 三.进入正题 1.需要用到的包 2.下面进入到代码的部分 2.1导入所需要用到的包 2.2定义微信窗口控件 2.3调用寻找微信控件的方法 2.3绑定窗口的会话列表控件并读取数据 2.4使用while True:死循环监听信息 2.5获取最新的信息 2.6进入循…

微信开发之自动回复图文消息

最近开始做公司的微信项目&#xff0c;深切的感受到了微信的不同&#xff0c;做微信是需要从头开始好好学的&#xff0c;在此记录一下学习微信的过程&#xff0c;也希望以后能根据这些文章迅速掌握微信开发的知识。少踩坑&#xff0c;&#xff0c;&#xff08;laravel框架&…

微信公众号开发—自定义菜单、被动回复消息

自定义菜单 自定义菜单需要我们以POST的方式去请求接口&#xff0c;并且需要携带按钮信息&#xff08;格式为json)。 由于自定义菜单较为简单&#xff0c;这里使用微信官方提供的接口测试工具对按钮增加接口进行测试: 通过appid和secret获取access_token。生成按钮数据(JSON)…

msg文件自定义消息话题

以LVI-SAM为例&#xff0c;cloud_info.msg就是LVI-SAM自定义的消息类型&#xff1b;通常&#xff0c;都是利用msg文件&#xff0c;生成.h文件&#xff0c;然后cpp文件添加.h就可以正常使用自定义消息了&#xff1b; 自定义msg消息步骤 Step1&#xff1a;创建并编写msg文件&am…

微信公众号自定义回复(关键词回复:文本消息、图文消息)

要回复客户发到微信公共号的消息&#xff0c;首先要获取用户发来的消息&#xff0c; 接收地址就是微信公众号基本配置里写的服务器地址所在的文件地址&#xff1b; $postStr $GLOBALS["HTTP_RAW_POST_DATA"]; //微信返回的信息。包含用户所发的消息 $postObj si…

微信开发 (自动回复图片,自定义菜单)

微信是一个高大上的东西&#xff0c;恩&#xff0c;没错 首先输入网址mp.weixin.qq.com进入微信公众平台 注册账号和密码&#xff08;注意的是这里的账号和密码不是微信的账号密码&#xff09; 进入之后点击左侧开发/开发者工具 在右侧点击进入公众平台测试账号&#xff08…

大众CEO提前“毕业”,马斯克:软件是通向未来的关键

过去&#xff0c;软件是汽车的一部分&#xff0c;而如今&#xff0c;软件决定了汽车的价值。 近日&#xff0c;知名传统汽车厂商大众CEO赫伯特迪斯 (Herbert Diess) 提前卸任新闻引发人们热议&#xff0c;其好友特斯拉CEO马斯克发推表示&#xff1a;“软件是通向未来的关键。”…

“AI 不会取代程序员,而是其增长的加速器!”

ChatGPT 热潮下&#xff0c;关于 AI 是否会取代程序员的讨论不绝于耳&#xff0c;而本文作者认为&#xff1a;AI 反而会推动更多开发者的出现。 原文链接&#xff1a;https://interconnect.substack.com/p/ai-will-create-more-developers-not 未经允许&#xff0c;禁止转载&am…

谷歌终于也坐不住了 。。。

来源于51CTO技术栈 整理 | 言征 刚过去的一周&#xff0c;我们刚经历了三场对话式AI的大事&#xff1a;OpenAI的GPT-4&#xff0c;微软Office 365“核弹式”升级&#xff0c;百度的中文语言大模型“文心一言”&#xff0c;谷歌终于坐不住了&#xff0c;21日&#xff0c;谷歌首席…