1

我有一个这样的索引向量来映射单元格。例如(1 -> 310),(2 -> 910),....(1024 -> 67)

它将8*8 cell图像的(例如:第一个单元格)映射到8*8 cell(例如:第 310 个单元格)。

我有1024 8*8 cells并且我想扭转这个过程以获得他们的第一个索引。

我的意思是,在这个映射之后它重新排序到基本顺序。(例如:第 310 个单元到第 1 个,第 910 个单元到 2)。

任何人都可以帮忙吗?

是的,我写我的程序,例如我有这些图像块用于图像。

             % dividing of main image to 8*8 blocks:
           U = floor(M1/8);    
           V = floor(M2/8);
          I_div = cell(U,V);
          K = 1; L = 1;
          for u = 1:U
          for v = 1:V
           I_div{u,v} = I2(K:K+7,L:L+7);
          I_div_DCT{u,v} = dct2(I_div{u,v});  %%%  the main blocks 
           L = L + 8;
         end
      K = K + 8;
        L = 1;
   end




       a=reshape(I_div_DCT',[],1)';
       b=cell(1,1024);
       for i=1:1024   
       b(i)=a(index(i));
       end

%%% 索引是 1*1024 数组,如下所示:

        %%%  1     2     3       4       5       6       7       8   .... 
         %%% 367  910   274     308     275     429     403      276   ....

如果第一个图像块是 a(1,1)=[8*8 double]; 在实现 b(i)=a(index(i)) 之后,它进入第 367 个 [8*8] 块,例如第 787 个 [8*8] 块进入第一个块,(只是一个简单的映射)。在实施我的更改后,我想将这些块恢复到原来的状态!

4

1 回答 1

4

假设你有一张前向地图

fMap = [367, 910, 274, 308, 275, 429, 403, 276, ...

这样该索引k就映射到fMap( k ).

现在你与将映射fMap(k)k.
或者换句话说k == revMap( fMap( k ) )

为简单起见,我假设fMap是一个排列。然后

revMap( fMap ) = 1:n

一个小例子:

>> fMap 
 fMap =
 1     4     5     3     2

>> rMap( fMap ) = 1:5
 rMap =
 1     5     4     2     3
于 2013-07-15T08:22:54.967 回答