2015-07-13 94 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 

这样就完成了工作。希望它对你也有用