2015-07-13 89 views
0

我正在處理圖像,並將其劃分爲非重疊塊,接下來我要做的是對相同塊的每兩個相鄰塊應用一些更改。例如,我有一個塊B1,我將它分爲B11和B12。將圖像塊劃分爲兩個塊

這裏的目的是在B11和B12上應用SVD,並比較它們的奇異值:S11(2,2)S12(2,2)等等每隔一個塊。但我不知道如何處理鄰近的每兩個子塊,我只能對塊Bi應用SVD。

看來我需要一個循環for來處理每兩個子塊或功能mat2tiles這樣做嗎?

這是一個解釋我在說什麼的例子。

image divided into blocks

回答

0

我終於找到了路怎麼走我的目標,我的情況下,有人需要共享太:

%First this a function that help me to divide my image into non overlapping block 

function B=Block(IM,p,q) 
p=p %% number of rows 
q=q %% number of cols 
[m,n] = size(IM); 
IJ = zeros(p,q); 
z = 1; 
for m1 = 1:m/p 
for n1 = 1:n/q 
    if m1*p <= m; 
    if n1*q <= n; 

     for i = (m1-1)*p+1:m1*p 
     for j = (n1-1)*q+1:n1*q 
      IJ(i-(m1-1)*p,j-(n1-1)*q) = IM(i,j); 
      if (i-(m1-1)*p)==p&&(j-(n1-1)*q)==q; 
       OUT = IJ; 
       B{1,z} = OUT; 
       z = z+1; 
      end 
     end 
     end 
    end 
    end 
end 
end 

現在我要分開每個塊爲子塊和應用SVD

Block_Num = (m*n)/(p*q) % To get how many blocks we have 
fun= @svd % the function we use is SVD 
for i=1:Block_Num 
sv=blkproc(B{i},[4 4],fun) % in my case I wanted to apply SVD 
            of every sub-block of 4*4 
end 

這樣就完成了工作。希望它對你也有用