如何嵌入组合图像

时间:2011-03-07 09:34:38

标签: image matlab image-processing

是否有可能像傅立叶等一样的转换功能将多个图像文件(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);

这显然会导致错误!

另外,如何实现反向操作? Cramer的反向规则是否有助于解复用组合图像?如果是这样,如何操作Cramer对RGB图像的规则?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

  • 输出图像尺寸。简单的案例就是在网格中平铺图像。它是完全可恢复的,完全无损但也非常明显,因此可能无用。
  • 有损无损。有损方法可以让您实现更小的输出图像尺寸。
  • 可见性与可恢复性。嵌入数据越明显,恢复它就越容易(或至少检测到某些东西存在)。较不可见的嵌入信息通常对诸如仿射变换和诸如模糊的常见图像处理操作之类的事物更脆弱。有关详细信息,请参阅watermarks

这应该足以让你开始。