2011-03-02 39 views
5

我正在从事matlab处理图像以进行隐写。在我到目前为止的工作中,我一直在使用块处理命令blockproc将图像分解成块来处理它。我现在想要开始处理两个图像,秘密和封面,但我无法找到使用两个输入矩阵而不是一个输入矩阵的blockproc。使用多个输入矩阵处理块

会有人知道一种方法来做到这一点?

回答

6

blockproc允许您使用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) 

使用块结构可以计算出的第2,第3,第4,等适当部位的“位置”字段您需要为该特定块设置数据集。

希望这有助于!

-brendan

+1

开始您的堆栈溢出帐户与一个胜任的,详细的答案:) – ypnos 2011-03-02 15:37:57

+0

哈非常感谢。我是blockproc的粉丝! – brendan 2011-03-02 18:41:58

2

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

例如现在A(:,:,1) = I1; A(:,:,2) = I2;

你可以A.

+0

所以你建议创建一个3d矩阵和blockproc命令在这个工作?这是一个好主意,我会尝试一下,看看它是否有效 – 2011-03-02 11:30:04

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