我正在做BPCS隐写术..我有单独的秘密块(4096- 8*8块)和共轭块( 64 - 8*8块)可以嵌入。每一个都可以通过调用
secret_block(:,:,1),
secret_block(:,:,2),
secret_block(:,:,3) 等和
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”参数是什么意思?
发布于 2014-05-22 18:29:35
我会首先将所有位平面放在一个单元中,
C{1} = c1;
C{2} = c2;
etc因此,您可以以自动的方式遍历位平面。
for i = 1:8
curr_plane = C{i};
end有许多方法可以将二维数组拆分为块。一个方便的方法是mat2cell。web documentation为您提供了一个直观的示例,说明它是如何工作的。
请注意,由于您需要8x8数据块,因此行和列都必须能被8整除。您有3个选项:
我们继续假设您有一张行数和列数可被8整除的图片。让我们称您的初始封面图片为cover。
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个块。您可以简单地使用以下命令遍历它们
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个秘密或共轭块覆盖它。
blocks{bi,bj} = secret_block(:,:,k);最后,一旦您完成了整个位平面,您就可以将块放回以构建修改后的位平面
C{i} = cell2mat(blocks);https://stackoverflow.com/questions/23802697
复制相似问题