我有一个映射细胞的索引向量。
例如(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]块到达第一个块,(只是一个简单的映射)。 在实施我的更改后,我想将这些块恢复到原始的默认值!
答案 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