具有多个输入矩阵的块处理
Posted
技术标签:
【中文标题】具有多个输入矩阵的块处理【英文标题】:block processing with multiple input matrices 【发布时间】:2011-07-07 04:27:14 【问题描述】:我正在使用 matlab 处理图像以进行隐写术。到目前为止,在我的工作中,我一直在使用块处理命令 blockproc 将图像分解成块来处理它。我现在希望开始使用两个图像,即秘密和封面,但无论如何我都找不到使用带有两个输入矩阵而不是一个输入矩阵的 blockproc。
有人知道怎么做吗?
【问题讨论】:
【参考方案1】:blockproc 仅允许您迭代单个图像,但不会阻止您操作您想要的任何数据。用户函数的签名将“块结构”作为输入,其中不仅包含数据字段(在所有块过程示例中使用),还包含其他几个字段,其中之一是“位置”。您可以使用它来确定输入图像中的“您所在的位置”,并确定您需要对该块进行操作的其他数据。
例如,以下是您如何在 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)
使用块结构的“位置”字段,您可以找出该特定块所需的第二、第三、第四等数据集的适当部分。
希望这会有所帮助!
-布伦丹
【讨论】:
感谢您以一个称职、详尽的答案开始您的 Stack Overflow 帐户 :)【参考方案2】:我最近在同样的事情上苦苦挣扎,并通过将我的两个输入矩阵组合成一个 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
【讨论】:
【参考方案3】:我认为您的问题的解决方案在于创建一个包含两个输入矩阵的新矩阵。
例如A(:,:,1) = I1; A(:,:,2) = I2;
现在您可以在 A 上使用blockproc
。
【讨论】:
所以你建议创建一个 3d 矩阵和处理这个的 blockproc 命令?好主意,我试试看能不能用以上是关于具有多个输入矩阵的块处理的主要内容,如果未能解决你的问题,请参考以下文章