matlab中的反向映射索引

时间:2013-07-15 07:12:44

标签: matlab mapping

我有一个映射细胞的索引向量。 例如(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

%%% index是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))之后,它进入第367th [8 * 8]块,例如第787th [8 * 8]块到达第一个块,(只是一个简单的映射)。 在实施我的更改后,我想将这些块恢复到原始的默认值!

1 个答案:

答案 0 :(得分: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