使用多个输入矩阵进行块处理

时间:2011-03-02 10:47:04

标签: matlab image-processing steganography

我正在使用matlab处理图像以进行隐写术。到目前为止,在我的工作中,我一直在使用块处理命令blockproc来将图像分成块来处理它。我现在正在寻找开始使用两个图像,秘密和封面,但无论如何我都找不到使用带有两个输入矩阵的blockproc而不是一个。

有人知道这样做的方法吗?

3 个答案:

答案 0 :(得分:6)

blockproc允许您仅对单个图像进行迭代,但不会阻止您从操作处理您想要的任何数据。用户函数的签名将“块结构”作为输入,其不仅包含数据字段(在所有blockproc示例中使用),还包含其他几个字段,其中一个是“location”。您可以使用它来确定输入图像中的“您所在的位置”,并确定在该块上操作所需的其他数据。

例如,这里是你如何在2个相同大小的图像上进行逐元素乘法。这是一个非常笨重的例子,但只是为了证明这看起来如何:

im1 = rand(100);
im2 = rand(100);
fun = @(bs) bs.data .* ...        
    im2(bs.location(1):bs.location(1)+9,bs.location(2):bs.location(2)+9);
im3 = blockproc(im1,[10 10],fun);
im4 = im1 .* im2;
isequal(im3,im4)

使用块结构的“位置”字段,您可以找出该特定块所需的第2,第3,第4等数据集的相应部分。

希望这有帮助!

-brendan

答案 1 :(得分:3)

我最近在同样的事情上苦苦挣扎并通过将我的输入矩阵组合成单个3D矩阵来解决它,如下所示。在将块处理引入之前,注释掉的行是我的原始代码。我遇到的另一个问题是在函数中使用了除图像矩阵之外的变量:我必须首先进行计算的这一部分。如果有人可以简化它,请告诉我!

%%LAB1 - L*a*b nearest neighbour classification
%distance_FG = ((A-FG_A).^2 + (B-FG_B).^2).^0.5;
%distance_BG = ((A-BG_A).^2 + (B-BG_B).^2).^0.5;

distAB = @(bs) ((bs.data(:,:,1)).^2 + (bs.data(:,:,2)).^2).^0.5;
AB = A - FG_A; AB(:,:,2) = B - FG_B;
distance_FG = blockproc(AB, [1000, 1000], distAB);
clear AB
AB = A - BG_A; AB(:,:,2) = B - BG_B;
distance_BG = blockproc(AB, [1000, 1000], distAB);
clear AB

答案 2 :(得分:2)

我认为你的问题的解决方案在于创建一个包含两个输入矩阵的新矩阵。

e.g。 A(:,:,1) = I1; A(:,:,2) = I2;

现在您可以在A上使用blockproc