首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BPCS隐写术

BPCS隐写术
EN

Stack Overflow用户
提问于 2014-05-22 17:22:43
回答 1查看 524关注 0票数 0

我正在做BPCS隐写术..我有单独的秘密块(4096- 8*8块)和共轭块( 64 - 8*8块)可以嵌入。每一个都可以通过调用

代码语言:javascript
复制
secret_block(:,:,1),
secret_block(:,:,2),
secret_block(:,:,3) 

等和

代码语言:javascript
复制
conju_block(:,:,1),
conju_block(:,:,2),
conju_block(:,:,3)

在bpcs嵌入过程中,对封面图像进行位平面切片,并将其存储为c1( lsb plane ),c2,c3,c4 c5,c6,c7,c8 ( and平面)。我需要选择lsb位平面到msb平面,并将每个位平面划分为8*8个块,selected_block(:,:,i))和其中的复杂块最初用secret_block (:,:,i)替换,然后在conju_block(:,:,i)上替换,直到所有4096+64块都到达。

请任何人告诉我如何用另一个块(conju_block(:,:,i) or secret_block(:,:,i))替换selected_block(:,:,i)的特定块?是否可以使用replace_block()来实现同样的目的,那么“sys”参数是什么意思?

EN

回答 1

Stack Overflow用户

发布于 2014-05-22 18:29:35

我会首先将所有位平面放在一个单元中,

代码语言:javascript
复制
C{1} = c1;
C{2} = c2;
etc

因此,您可以以自动的方式遍历位平面。

代码语言:javascript
复制
for i = 1:8
    curr_plane = C{i};
end

有许多方法可以将二维数组拆分为块。一个方便的方法是mat2cellweb documentation为您提供了一个直观的示例,说明它是如何工作的。

请注意,由于您需要8x8数据块,因此行和列都必须能被8整除。您有3个选项:

  • 只允许行数和列数被8整除的图像,
  • 自动将图像重新缩放到这样的大小,或者
  • 使用这样的大小获取图像矩阵的最大切片,进行隐写并将修改后的图像放回原始图像的切片中。

我们继续假设您有一张行数和列数可被8整除的图片。让我们称您的初始封面图片为cover

代码语言:javascript
复制
row = size(cover, 1)/8;
col = size(cover, 2)/8;
blocks = mat2cell(curr_plane, ones(1, row)*8, ones(1, col)*8);

blocks现在是一个包含位平面curr_plane的所有8x8块的单元。例如,如果位平面的大小为16x48,则现在有2x6个块。您可以简单地使用以下命令遍历它们

代码语言:javascript
复制
for bi = 1:size(blocks,1)
    for bj = 1:size(blocks,2)
        my_8x8_block = blocks{bi,bj};
    end
end

你就快到了。为了总结我们所做的工作,我们从一个位平面到另一个位平面,并将每个位平面拆分为8x8个块。现在,对于每个my_8x8_block,您可以将其输入到一个函数中,该函数可以计算它是否足够复杂。如果是,您可以简单地用第k个秘密或共轭块覆盖它。

代码语言:javascript
复制
blocks{bi,bj} = secret_block(:,:,k);

最后,一旦您完成了整个位平面,您就可以将块放回以构建修改后的位平面

代码语言:javascript
复制
C{i} = cell2mat(blocks);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23802697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档