【问题标题】:How to embed combine images together如何嵌入组合图像在一起
【发布时间】:2016-06-20 18:13:33
【问题描述】:

是否可以通过傅立叶等转换功能将多个图像文件(3D)组合成一个文件,比如数字相册。文件的这种组合应该是可逆的操作,以便可以分离各个图像。

我尝试了这个,但我确信它与它应该是什么接近:

img1=imread('lena_gray.jpg');
img2=imread('pic1.jpg');
img3=imread('pic2.jpg');

defimage=pow2(get(0,'DefaultImageCData'),47);
mag=200;
imshow(bitslice(defimage,47,51),'initialmag',mag);
r=bitslice(img1,50,50);
g=bitslice(img2,50,60);
b=bitslice(img3,100,100);
imshow(cat(3,r,g,b),'initialmag',mag);

这显然会导致错误!

还有,如何实现反向操作?克莱默的逆规则有助于解复用组合图像吗?如果是这样,如何对 RGB 图像执行 Cramer 规则?

【问题讨论】:

  • 您需要更具体地了解您想要实现的什么以及为什么。您是否尝试将图像混合在一起?或者您是否尝试将潜在图像嵌入到载体图像中以用于类似隐写术的应用程序?
  • @misha :它是隐写术应用的先驱,但还处于初级阶段。
  • @SKM : 你在尝试有损或无损方法吗?
  • @misha:最好是无损方法。
  • @SKM :您的主要意图是隐藏潜在图像,还是仅仅合并多个图像到单个图像中?另外,从您的代码中,您到底遇到了什么错误?

标签: image matlab image-processing


【解决方案1】:

我认为您正在尝试实现多路复用和多路分解。尝试菲涅耳变换而不是傅里叶变换

【讨论】:

  • 是的,我一直在寻找数学解释,我认为可以通过菲涅耳变换来实现。但同样,如何在 Matlab 中做到这一点,以及为什么同样可以按照 Jonas 的建议通过 bitslice 完成。
【解决方案2】:

如果您的图像是 8 位无符号整数,您可以将多个图像存储在非有效位中。示例见this blog post by Steve Eddins

【讨论】:

  • 我阅读了博客文章并尝试了一些东西,我已经修改了我的问题以及代码 sn-p 但它甚至没有远程关闭并给出错误。图片是uint8的。请帮忙。
【解决方案3】:

根据您提供的信息,我可以为您推荐几种方法:

  • 将每个图像存储在单独的颜色通道中。这是迄今为止最简单的方法。您可以通过这种方式最多存储 3 张图像(一张用于 RGB 或 YUV)。如果您的文件格式支持 Alpha 通道,则可以存储 4 张图像。这假设您使用的是每像素 8 位。
  • Interlace你的图片。如果您无损地执行此操作,输出图像尺寸将增加(乘以您正在组合的图像数量)。如果您以有损方式执行此操作,您将失去空间分辨率(例如,如果您对两个图像进行扫描线交错,则垂直分辨率将降低到其原始值的一半)。
  • Jonas 已经建议将数据隐藏在低位位中,所以我不会多说,只是说这是一种有损方法
  • 查看图像像素的random shuffling 以伪装连接的图像。该链接适用于 Python,但 matlab 应该有类似的内容。

基本上,您的问题是必须在以下方面进行权衡:

  • 输出图像大小。微不足道的情况只是将图像平铺在网格中。它是完全可恢复的,完全无损,但也非常明显,因此可能无用。
  • 有损与无损。有损方法可让您获得更小的输出图像尺寸。
  • 可见性与可恢复性。嵌入数据越明显,恢复它就越容易(或者至少检测到那里有东西)。对于仿射变换和模糊等常见图像处理操作,较不可见的嵌入信息通常更脆弱。阅读 watermarks 了解更多信息。

这应该足以让你开始。

【讨论】:

  • 在您的方法中,要点 1,我需要使用位片。那么,由于问题中提供的代码出现错误,我该怎么做。
猜你喜欢
  • 2021-12-31
  • 2021-06-10
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 2012-06-19
  • 2016-11-01
相关资源
最近更新 更多