2022年高校大数据挑战赛B题图像信息隐藏求解全过程论文及程序

2022年高校大数据挑战赛

B题 图像信息隐藏

原题再现:

  互联网的快速发展,给图像、视频的传播方式带来巨大变化。图像作为媒体的重要载体,每天有大量的原创图像公开在互联网上,如何保护图像版权的同时不破坏原始的图像一直是图像处理方向的研究热点。
在这里插入图片描述
  近年来,图像水印算法逐渐成为保护图像版权的重要手段。一般的图像水印算法分为嵌入算法和提取算法。图 1 展示了图像水印算法的基本架构。黄色部分代表嵌入算法,将具有可辨识的信息(Alice)融合到需要保护的图像(Image)中,得到嵌入信息的图像(Image’)。与此同时,嵌入算法不对保护图像造成大的影响。从人类视觉角度无法分辨Image与Image’之间的差别。蓝色部分为水印提取算法,其作用是在发生版权纠纷时能通过算法提取出嵌入的信息(Alice),从而确定图像的版权归属。
  附件 1 训练样本中包含 images_original和image_message两个文件夹,还有嵌入的信息列表保存在message.txt中。为了简化问题,每张image_message图片中只嵌入 26 + 26 + 10 = 62 个(az,AZ,0~9)字符中的一个字符。分别提供了9950 张图片和对应的标签信息,请你查阅相关文献,回答以下问题。
  问题 1:图像信息隐藏算法的图像质量评价指标很多,其中影响视觉效果的指标具有不可见性,可用来衡量嵌入水印的图像与原始图像之间的差异性。现请你根据附件 1 中的数据,使用多种图像质量评价指标说明原始图像与嵌入水印之后图像之间的差别,并使用合适的统计方法说明差别图像之间至少 3 种共同的特征。参考图 2 的方式展示,论文中仅需要展示“im100067. jpg” 和“im10234. jpg”两张图像的差别图像。
在这里插入图片描述
  问题 2: 运用提供的 9950 张图片和对应的标签信息,尽量使用问题 1 中的共同特征来设计图像信息隐藏的检测算法,检测任意一张嵌入信息图片中存在的信息,并对你的算法进行校验。检验量化指标为 :9950 张图像中被正确检测信息的图像数量。
  问题 3:使用检测算法对“附件 2”文件夹下 test_images 中包含的 50张图片(包含嵌入和没有嵌入信息的图像 ) ,请先判断是否嵌入信息( 信息为a-z,A-Z,0-9 中的某一个字母或数字)。如果嵌入了信息请检测出对应信息,并将检测结果填写到表 1 中。

在这里插入图片描述
在这里插入图片描述
  注:表 1 中的“嵌入的信息”列为需要填写的检测结果,其中有信息嵌入的直接填写对应的字符,没有信息嵌入的填写“无”。
说明:
  1. 项目程序建议在 python3.6 及以上环境下搭建,其他语言不做统一要求,但是需要在运行说明中写明软件名称及版本。无需提交赛题自带的图像。
  2. 除了论文外,还需要提供完整程序代码、运行说明(包括依赖包及其版本)、模型文件(若有)等,以压缩包的形式提交。提交的支撑材料不得超过 20Mb。
  3.本研究可以用机器学习方法,包括各种深度学习方法,如CNN、DNN算法、VGG、U-Net等。

整体求解过程概述(摘要)

  随着互联网的快速发展,图像作为重要信息载体其传播范围也越来越广。水印算法作为一种图像信息隐藏技术,能够实现在用户视觉无法分辨的情况下添加版权信息,有效保证了图像的版权安全和图像质量。本文在附件一所提供的 9950 组带有包含 60 种类别水印字符标签的原始图像和嵌入水印图像的数据集上,利用差值图像作为主观可视化评价指标,分析得出嵌入水印的图像想比原图增加了部分前景边缘信息。利用 MSE、RMSE、PSNR、SSIM、信息熵等客观非可视化评价指标分析了嵌入水印图像与原始图像之间的区别,即嵌入水印的图像的信噪比和结构一致性有所降低。对于差别图像进行统计分析得出其包含一定量的纹理特征,灰度分布服从正态分布,并且利用 HOG、ORB、LBP 等多种特征描述符表示了差值图像的共同特征,其中 HOG 特征点数量范围为[154,218],ORB 特征点数量范围在[34,96],LBP 特征点数量范围在[206,462]。为了实现水印类别检测算法,本文将问题一中统计的差值图像以及其 HOG、ORB、LBP特征指标相结合作为训练输入。构建了基于支持向量机(SVM)、随机森林(RF)和深度卷积神经网络 CNN(ResNet50)的分类模型并进行对比,结果表明随机森林模型准确率均值较低为 79.2965%,并且 ResNet50 模型存在不稳定问题,因此最终选择 SVM模型作为图像水印隐藏信息检测模型,在 9950 张图像中被正确检测信息的图像数量为9848 张,即准确率达到 98.9749%。
  针对附件二中的 50 张不明确是否嵌入水印的图像,传统的基于 DCT、SVD 原理的算法针对性较强,不适应数据集中的隐式水印掩膜映射处理的图像数据。因此本文根据CVAE 变分自动编码器重构模型和 CUT 风格迁移网络原理构建了基于深度学习的水印去除模型。假设 50 张图像全部嵌入了水印信息,将模型输入设定为 50 张待判定图像,输出为模拟水印去除后的结果图。随后利用输入和输出的差值图像指标判定输入的图像是否嵌入了水印信息,并对嵌入水印的图像利用问题二构建的 SVM 分类模型进行类别预测,同时输出对应的置信度。最终分类结论为:对于附件二中的 50 张图像,其中未嵌入信息的图像数量为 7,嵌入信息的图像总数为 43,嵌入 a~z 的图像数量为 21,嵌入A-Z 的图像数量为 17,嵌入 0-9 的图像数量为 5。
  最后,本文对所构建的基于 SVM 和差值图像描述符的分类模型和基于 CVAE 的模拟水印去除网络模型进行了评价与推广,提出了模型的改进方向。在模型功能完善的情况下,能够利用本文的方案实现基于水印嵌入和水印提取的图像信息隐藏技术,具有良好的应用前景和实际价值。

模型假设:

  根据题目所给的信息以及相关要求,做出如下假设:
  1. 假设训练标签与训练集图像数据一一对应;
  2. 假设嵌入水印的过程中图像的原始信息保存完好;
  3. 假设图像数据集中不包含标签中未出现的字符;
  4. 假设水印的添加方式为隐式字符映射 One-Hot 向量编码掩膜模型;
  5. 假设机器学习和深度学习方式能够感知和捕获到图像的隐藏信息;
  6. 假设重采样的样本均衡方式可以解决分类标签数量差别对分类结果的影响;

问题分析:

  问题一分析
  通过附件 1 中的数据,绘制出原始图像与嵌入信息图像的差别图像,选取合适的图像评价指标进行差异性分析(每种图像均为 9950 张),同时利用合适的统计方法说明两种图像之间的三个共同特征。
  步骤一:使用 OpenCV 库函数获得差别图像,并获取相关的图像质量评价指标。
  步骤二:选择合适的图像质量评价指标进行差异性分析,并且记录下来。
  步骤三:采取统计学方法获取差别图像间的共同特征,得出结果。
  问题二分析
  该问题需要根据提供的 9950 张图片获取的图像质量评价指标,也就是其对应的标签信息。然后根据其共同特征来选择合适的模型,获取已经隐藏信息的图像以及将图像进行筛选分类,得到隐藏了信息的图像数量及隐藏信息。根据题意应应选择两类模型进行求解,分别用来分辨图片、统计数量获取隐藏信息。
  步骤一:先利用题意求解的共同特征构建合适的模型,将附件一中的 image_message和差别图像根据嵌入信息的种类进行分类,获得分类后的数据集。
  步骤二:然后构建适当的检测与分类模型,调整好参数进行训练,获得最佳模型,再利用模型进行嵌入信息的检测与分析,获得隐藏的信息。
  步骤三:利用合适的统计方法对隐藏的信息及其数量进行记录。
  问题三分析
  根据题意可知,需要调用问题二中构建的模型,首先调用识别图像的模型,将测试集输入该模型中,判断否为隐藏信息的图像,判断成功后再将通过测试的数据集调用分类的模型进行分类并获取隐藏信息,并对测试结果进行分析。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序如下:
import cv2
import pandas as pd
import matplotlib.pyplot as plt
import math
#%matplotlib inline
from skimage.metrics import mean_squared_error as compare_mse
from skimage.metrics import peak_signal_noise_ratio as compare_psnr
from skimage.metrics import structural_similarity as compare_ssim
data = pd.DataFrame(columns=['PSNR','SSIM','RMSE']) # ['PSNR','SSIM','MSE','RMSE']
data.to_csv('A.xlsx', index=False, encoding='utf-8')
#for i in range(1,9951,1):
for i in range(1,9951,1):
input1 = 'data/image_original/im1%04d.jpg'%i
input2 = 'data/image_message/im1%04d.jpg'%i
img1 = cv2.imread(input1)
img2 = cv2.imread(input2)
p_ = compare_psnr(img1, img2)
s_ = compare_ssim(img1, img2, channel_axis=2)
m_ = compare_mse(img1, img2)
rm_ = math.sqrt(m_)
p = pd.Series(p_)
s = pd.Series(s_)
m = pd.Series(m_)
#rm = pd.Series(rm_)
a = [[p_,s_,rm_]]
#a = [[p_,s_,m_,rm_]]
data_temp = pd.DataFrame(a)#横着拼
data_temp.columns = ['PSNR','SSIM','RMSE']
# ['PSNR','SSIM','MSE','RMSE']
data = pd.DataFrame(columns=['PSNR','SSIM','RMSE'])
#清空数据,表头 # ['PSNR','SSIM','MSE','RMSE']
data = pd.concat([data,data_temp],axis=0,ignore_index=0)#竖着拼
#print(data)
data.to_csv('A.xlsx', mode='a', index=False, encoding='utf-8',header=0)
import numpy as np
import cv2
import matplotlib.pyplot as plt
# %matplotlib inline
def grey_scale(img_gray ):
#归一化函数
rows, cols = img_gray.shape
flat_gray = img_gray.reshape((cols * rows,)).tolist()
A = min(flat_gray)
B = max(flat_gray)
print('A = %d,B = %d' % (A, B))
output = np.uint8(255 / (B - A) * (img_gray - A) + 0.5)
return output
origin = cv2.imread('data/image_original/im10067.jpg')
with_message = cv2.imread('data/image_message/im10067.jpg')
origin = cv2.cvtColor(origin, cv2.COLOR_BGR2RGB)
with_message = cv2.cvtColor(with_message, cv2.COLOR_BGR2RGB)
origin_gray = cv2.imread('data/image_original/im10067.jpg',0).astype(np.int32)
with_message_gray = cv2.imread('data/image_message/im10067.jpg',0).astype(np.int32)
difference_gray = with_message_gray - origin_gray
difference_gray = grey_scale(difference_gray)
fig,a = plt.subplots(1,3,figsize=(16,12),dpi=250)
#绘制平方函数
a[0].imshow(origin)
a[0].set_xticks([]) # 去掉 x 轴
a[0].set_yticks([]) # 去掉 y 轴
a[0].set_xlabel('original image',fontsize=18)
#绘制平方根图像
a[1].imshow(with_message)
a[1].set_xticks([]) # 去掉 x 轴
a[1].set_yticks([]) # 去掉 y 轴
a[1].set_xlabel('message image',fontsize=18)
#绘制指数函数
#a[2].imshow(difference_gray)
a[2].imshow(difference_gray,cmap='gray')
a[2].set_xticks([]) # 去掉 x 轴
a[2].set_yticks([]) # 去掉 y 轴
a[2].set_xlabel('residual',fontsize=18)
plt.show()
import numpy as np
from sklearn import svm
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
import scipy.io as sio
import matplotlib.pyplot as plt
import os
import re
import pandas as pd
import joblib
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' import glob
import cv2
import numpy as np
from PIL import Image
# 读取文件夹中图片
Image_dir = './data/image_residual/' # 添加绝对路径
Image_glob = os.path.join(Image_dir, "*.jpg")
Image_name_list = []
# 将符合条件的 png 文件路径读取到 Image_list 中去
Image_name_list.extend(glob.glob(Image_glob))
print(Image_name_list[::])
len_Image_name_list = len(Image_name_list)
image=[]
for i in range(len_Image_name_list):
image_path = Image_name_list[i]
image.append(cv2.imread(image_path,0).reshape(-1, 1))
image = np.array(image)
image = image.squeeze()
print(image)
data = pd.read_table('./data/message.txt', sep = '\t', header = None, names = ['file label'])
label=[]
for i in range(len(data)):
label.append(data.loc[i][0][-3])
train_data, test_data, trian_label, test_label = train_test_split(image, label,test_size=0.3)
#测试数据乱序重构
state1 = np.random.get_state() #获取生成器内部状态元组 保存状态,记录下数组被打乱
的操作(数组如何被打乱的)
np.random.shuffle(train_data) #乱序重构
np.random.set_state(state1) #相同的打乱方式 对标签进行同样操作
np.random.shuffle(trian_label) #乱序重构
#训练数据乱序重构
state2 = np.random.get_state()
np.random.shuffle(test_data)
np.random.set_state(state2)
np.random.shuffle(test_label)
clf = svm.SVC(decision_function_shape='ovo') #构造多分类 SVM
clf.fit(train_data,trian_label) #训练
joblib.dump(clf, "svm_model.m")
predict_res = clf.predict(image) #预测
print(predict_res)
data_cnt=[]
for i in range(predict_res.shape[0]):
data_cnt.append(i)
print('SVM accuracy')
print(accuracy_score(predict_res,label))
clf2 = RandomForestClassifier()
clf2.fit(train_data,trian_label)
joblib.dump(clf2, "rf_model.m")
res2 = clf2.predict(image)
print('Rondom_Forest')
print(accuracy_score(res2,label))
predict_res_pd=pd.DataFrame(data=predict_res)
res2_pd=pd.DataFrame(data=res2)
test_label_pd=pd.DataFrame(data=label)
print(predict_res)
print(type(predict_res))
print(predict_res_pd)
print(type(predict_res_pd))
predict_res_pd.to_csv('predict_res_pd.csv',encoding='gbk')
res2_pd.to_csv('res2_pd.csv',encoding='gbk')
test_label_pd.to_csv('test_label_pd.csv',encoding='gbk')
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 索引,优化,回表,执行计划等相关总结学习

一、MySQL 执行流程 innoDB表引擎:默认的事务型引擎,最重要最广泛的存储引擎,性能非常优秀,数据村粗在共享表空间,可以通过配置分开,主键查询性能高于其他引擎 myISM表引擎:5.1版本前这个是默认的存储引擎&#xff0c…

inBuilder低代码平台新特性推荐-第十二期

各位CSDN的友友们,大家好~ 今天来给大家介绍一下inBuilder低代码平台社区版中特性推荐系列第十二期——新版本集成开发环境! 01 概述 编码规则定义规定了编号的生成格式,一条编码规则定义由基本信息和段列表组成:基本信息是对该编…

OCR原理解析

目录 1.概述 2.应用场景 3.发展历史 4.基于传统算法的OCR技术原理 4.1 图像预处理 4.1.1 灰度化 4.1.2 二值化 4.1.3 去噪 4.1.4 倾斜检测与校正 4.1.4.2 轮廓矫正 4.1.5 透视矫正 4.2 版面分析 4.2.1 连通域检测文本 4.2.2 MSER检测文本 4.3 字符切割 4.3.1 连…

视频后期特效处理软件 Motion 5 mac中文版

Motion mac是一款运动图形和视频合成软件,适用于Mac OS平台。 Motion mac软件特点 - 精美的效果:Motion提供了多种高质量的运动图形和视频效果,例如3D效果、烟雾效果、粒子效果等,方便用户制作出丰富多彩的视频和动画。 - 高效的工…

【力扣 面试题02.07链表相交】一种思路极其清晰的解法

力扣一单简单题,看完大佬的题解真是佩服得五体投地! 虽是一道简单题,当我吭哧吭哧写了几十行后,看到大佬仅仅几行直接秒掉,只能说算法的本质还是数学,数学逻辑思维真是太重要了,有时候真得慢慢去…

TZOJ 1429 小明A+B

答案&#xff1a; #include <stdio.h> int main() {int T0, A0, B0, sum0;scanf("%d", &T); //输入测试数据的组数while (T--) //循环T次{scanf("%d %d", &A, &B); //输入AB的值sum A B;if (sum > 100) //如果是三位数{…

使用 Go 构建高性能的命令行工具

命令行工具&#xff08;CLI&#xff09;在软件开发中扮演着重要的角色&#xff0c;尤其是在自动化工具、开发工具链和服务器管理等领域。Go 语言以其简洁性和高性能而闻名&#xff0c;非常适合用来创建强大且高效的 CLI 工具。本文将详细介绍如何使用 Go 语言来构建 CLI 应用&a…

基于hadoop下的hbase安装

简介 HBase是一个分布式的、面向列的开源数据库&#xff0c;该技术来源于Fay Chang所撰写的Google论文“Bigtable&#xff1a;一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统&#xff08;File System&#xff09;所提供的分布式数据存储一样&#xff0c;…

Python批量Git Pull,对文件夹批量进行Pull操作

效果展示 说明 本来是想写的完善一些&#xff0c;但由于是自用&#xff0c;所以写出来后发现已经解决了自己的问题&#xff0c;所有 2和3功能没有写。 执行的话&#xff0c;需要 cmd 之后 直接 Python BatchGitPull.py 运行下面代码即可。 里面同时涉及到其他Pyhon知识点(写给…

SSM项目实战-mapper实现

1、SysUserMapper.java package com.atguigu.schedule.mapper; import com.atguigu.schedule.pojo.SysUser; import org.springframework.stereotype.Repository; Repository public interface SysUserMapper {SysUser getSysUser(SysUser sysUser); }2、ScheduleMapper.java p…

“超越摩尔定律”,存内计算走在爆发的边缘

过去几十年来&#xff0c;在摩尔定律的推动下&#xff0c;处理器的性能有了显著提高。然而&#xff0c;传统的计算架构将数据的处理和存储分离开来&#xff0c;随着以数据为中心的计算&#xff08;如机器学习&#xff09;的发展&#xff0c;在这两个物理分离的单元之间传输数据…

3D云参观红色革命纪念馆允许更多人在线交流、体验

生活在和平年代的新一代青少年&#xff0c;可能对革命先烈英勇事迹难以有很深的体会&#xff0c;无法切实感受到中国共产党无畏牺牲、誓死保家卫国的红色精神&#xff0c;因此借助VR虚拟现实制作技术&#xff0c;让参观者们走近革命先烈中&#xff0c;感受老一辈无产阶级革命家…

YOLOv8 第Y7周 水果识别

1.创建文件夹&#xff1a; YOLOv8开源地址 -- ultralytics-main文件下载链接&#xff1a;GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 其余文件由代码生成。 数据集下载地址&#xff1a;Frui…

CF1877 E. Autosynthesis 基环树dp

传送门:CF [前题提要]:一道基环树dp,但是题目有点绕,当时卡了我整整半天,到了第二天换了和清醒的脑子然后和别人讨论才整明白,故记录一下 题目很绕,故不再介绍. 首先对于这种下标和值有关系的题目.其实不难想到建图(CF上有大量这种 t r i c k trick trick),随便举个类似的题…

HarmonyOs 4 (一) 认识HarmonyOs

目录 一 HarmonyOs 背景1.1 发展时间线1.2 背景分析1.2.1 新场景1.2.2 新挑战1.2.3 鸿蒙生态迎接挑战 二 HarmonyOS简介2.1 OpenHarmony2.2 HarmonyOS Connect2.3 HarmonyOS Next**2.4 ArkTS &#xff08;重点掌握&#xff09;****2.5 ArkUI** 三 鸿蒙生态应用核心技术理念**3.…

Gavin Wood:财库保守主义偏离了初心,应探索 Fellowship 等更有效的资金部署机制

波卡创始人 Gavin Wood 博士最近接受了 The Kusamarian 的采访&#xff0c;分享了他的过往经历、对治理的看法&#xff0c;还聊到了 AI、以太坊、女巫攻击、财库等话题。本文整理自 PolkaWorld 对专访编译的部分内容&#xff0c;主要包含了 Gavin 对治理、财库提案、生态资金分…

re:Invent大会,亚马逊云科技为用户提供端到端的AI服务

11月末&#xff0c;若是你降落在拉斯维加斯麦卡伦国际机场&#xff0c;或许会在大厅里看到一排排AI企业和云厂商相关的夸张标语。走向出口的路上&#xff0c;你的身边会不断穿梭过穿着印有“AI21Lab”“Anthropic”等字样的AI企业员工。或许&#xff0c;你还会被机场工作人员主…

PyQt基础_014_对话框类控件QFileDialog

基本操作 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class filedialogdemo(QWidget):def __init__(self, parentNone):super(filedialogdemo, self).__init__(parent)layout QVBoxLayout()self.btn QPushButton("…

【Linux】cp 命令使用

cp 命令 cp&#xff08;英文全拼&#xff1a;copy file&#xff09;命令主要用于复制文件或目录。 著者 由Torbjorn Granlund、David MacKenzie和Jim Meyering撰写。 语法 cp [选项]... [-T] 源文件 目标文件或&#xff1a;cp [选项]... 源文件... 目录或&#xff1a;cp [选…

SpringBoot 集成 ChatGPT,实战附源码

1 前言 在本文中&#xff0c;我们将探索在 Spring Boot 应用程序中调用 OpenAI ChatGPT API 的过程。我们的目标是开发一个 Spring Boot 应用程序&#xff0c;能够利用 OpenAI ChatGPT API 生成对给定提示的响应。 您可能熟悉 ChatGPT 中的术语“提示”。在 ChatGPT 或类似语…