基于图像的隐写术能否在大小调整后存活?

时间:2015-06-05 08:41:51

标签: matlab image-processing video-streaming video-capture steganography

我正在使用 startech采集卡从源计算机捕获视频..我使用matlab对该视频进行了编码,因此该视频的每一帧都将包含该标记...我运行该视频在源计算机(HDMI输出)上通过HDMI连接到我的电脑(HDMI IN)一旦我将帧捕获为位图(1920 * 1080)我将其重新调整为1280 * 720我发送它进行处理,处理代码检查每一个该标记的像素。

问题是我的捕获卡只能捕获1920 * 1080 ,其中视频为1280 * 720 。因此,为了保留标记,我向下缩放捕获到1280 * 720 的帧,这反过来改变了我相信的整个像素阵列,因此我无法保留标记我输入到视频

在该捕获过程中,图像经过向上扩展,进而改变像素值。

我正在阅读关于隐写术的一些研究论文,但到目前为止它没有帮助。是否有任何技术可以在图像大小调整后存活,我可以保留像素值。

任何建议或指示都会非常感激。

2 个答案:

答案 0 :(得分:3)

我的建议是从搜索替代软件开始,该软件不会重新缩放,压缩或以其他方式修改任何提取的帧,然后再将其移交给您的控件。它可以为您节省许多麻烦几天的时间。如果你坚持实施,或者被迫实施一个能够在调整大小后继续存在的隐写算法,那就继续阅读。

我无法提供具体的解决方案,因为有很多方法可以实现(可能)并且它们很复杂。但是,我将描述解决方案最可能涉及的成分以及您采用这种方法的局限性。

调整封面图片的大小被视为攻击是企图破坏秘密。其他这样的示例包括有损压缩,噪声,裁剪,旋转和平滑。强大的隐写术就是这方面的药物,但它并不强大;它可以仅对特定类型的攻击提供抵抗力和/或仅对其进行小规模攻击。您需要找到或设计一个适合您需求的算法。

例如,让我们采用一个简单的像素lsb替换算法。它会将像素的lsb修改为与要嵌入的位相同。现在考虑一种攻击,其中有人随机应用像素变化为-1 25%的时间,0 50%的时间和+1 25%的时间。实际上,有一半的时间它会翻转你的嵌入位,但你不知道哪些是受影响的。这使提取变得不可能。但是,您可以更改嵌入算法以抵御此类攻击。你知道最大变化的绝对值是1.如果你在第3个lsb中嵌入你的秘密位s,并将最后2个lsbs设置为01,你就可以保证在攻击中幸存下来。更具体地说,你得到xxxxxs01二进制为8位。

让我们来看看为了在这样的攻击中幸存下来我们牺牲了什么。假设我们的嵌入位和可以修改的lsbs都具有统一的概率,用简单算法改变原始像素值的概率是

change | probability
-------+------------
   0   |    1/2
   1   |    1/2

并使用更强大的算法

change | probability
-------+------------
   0   |    1/8
   1   |    1/4
   2   |    3/16
   3   |    1/8
   4   |    1/8
   5   |    1/8
   6   |    1/16

如果我们嵌入了大量信息,那将会对我们的PSNR产生相当大的影响。但如果我们采用最佳像素调整方法,我们可以做得更好。该算法最小化原始值与修改值之间的欧几里德距离。简而言之,它最大限度地减少了绝对差异。例如,假设您有一个二进制值为xxxx0111的像素,并且您想要嵌入0.这意味着您必须制作最后3个lbs 001。通过天真​​替换,您获得xxxx0001,其距离原始值的距离为6。但是xxx1001只有2个。

现在,让我们假设攻击可以诱导0 33.3%的时间,1 33.3%的时间和2 33.3%的变化。在最后33.3%中,一半时间为-2,另一半为+2。我们上面描述的算法实际上可以在+2修改中存活,但不是-2。因此,16.6%的时间我们的嵌入式位将被翻转。但现在我们介绍error correcting codes。如果我们应用这样一个有可能每6位平均纠正1个错误的代码,我们就能成功地提取我们的秘密,尽管攻击会改变它。

纠错通常通过添加某种冗余来实现。因此,即使我们的比特流的一部分被破坏,我们也可以参考该冗余来检索原始信息。当然,您添加的冗余越多,纠错率就越高,但您可能需要将冗余加倍,以便将校正率提高几个百分点(这里只是任意数字)。

让我们欣赏您可以在1280x720(灰度)图像中隐藏多少信息。每个像素1位,每个字母8位,每个字约5个字母,你可以隐藏20k字。这是一部普通小说中值得尊敬的部分。它足以隐藏你在毕业照片中出版的恒星硕士论文,你甚至已经发表了这篇论文。但是,如果每1位实际信息有4位冗余,那么你只是想隐藏你曾经写过的那篇无聊的文章,这甚至没有在课堂上获得最好的成绩。

您可以通过其他方式嵌入您的信息。例如,频域中的特定方法可以更加抵抗像素修改。这些方法的缺点是编码算法的复杂性增加并且隐藏容量降低。这是因为一些频率系数可以抵抗变化,但是可以很容易地检测出嵌入修改,那么有些变化很脆弱但很难检测到,有些则处于所有这些中间。所以你妥协并只使用一小部分可用系数。隐写中使用的流行频率变换是离散余弦变换(DCT)和离散小波变换(DWT)。

总之,如果你想要一个强大的算法,那么出现的一致主题就是牺牲容量并对你的封面媒体应用更强的扭曲。关于水印的鲁棒隐写术已经进行了不少研究。这是因为你希望你的水印能够在任何攻击中存活下来,因此你可以证明内容的所有权和水印往往非常小,例如64x64二进制图像图标(仅4096位)。即便如此,一些算法足够强大,可以恢复几乎完整的水印,比如70-90%,因此它仍然可以与原始水印相媲美。在某些情况下,这被认为是足够好的。如果您想在100%的时间内无损地检索您的秘密数据,那么您需要一个更强大的算法(更大的牺牲)。

如果您想要这样的算法,您希望将文献梳理成一个并测试任何可能的候选人,看看他们是否满足您的需求。但是,不要指望任何只需要15行编码和10分钟阅读就能理解的东西。这篇论文看起来是一个好的开始:Mali et al. (2012). Robust and secured image-adaptive data hiding. Digital Signal Processing, 22(2), 314-323.遗憾的是,该论文不是开放域名,您需要订阅或学术访问才能阅读。但话说回来,那对大多数论文来说都是如此。你说过你已经阅读了一些论文,在之前的问题中,你已经说过你正在从事大学项目,所以很可能会访问你。

对于这篇特定论文,表4显示了抵制调整大小攻击的结果,第4.4节讨论了结果。他们没有明确表示100%恢复,但只是忠实的再生产。另请注意,攻击的大小为5-20%,并且只允许几千个嵌入位。最后,调整大小的方法(最近邻居,立方体等)在攻击中幸存下来很重要。

答案 1 :(得分:1)

我已经设计并实现了ChromaShift:https://www.facebook.com/ChromaShift/

如果操作正确,则隐写术可以在图像介质中弹性(即稳健地)对标识信息(例如,下载者用户ID)进行编码,同时基本上不会对其进行任何修改。与水印相比,隐写术是一种更巧妙但功能更强大的图像信息编码方式。

通过将像素色度移位到可配置的小凸点值,将信息动态多路复用到JPEG的Cb Cr结构中。由于人眼对亮度的变化比对色度的变化更敏感,因此色度移位实际上是不可察觉的,同时提供了一种在图像中编码任意信息的方法。 ChromaShift引擎同时执行水印和纯隐写术。这两个DRM子系统都可以通过一组丰富的选项进行配置。

该解决方案使用Linux平台的C语言开发,并使用SWIG编译为PHP可加载模块。因此,可以通过PHP脚本访问它,同时提供本机编译程序的速度。