2011-03-02 38 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