2013-07-15 6 views
1

У меня есть такой индексный вектор, который отображает ячейки. Например (1 -> 310),(2 -> 910),....(1024 -> 67)Индексы обратного отображения в matlab

Он отображает 8*8 cell (например: 1-й ячейку) изображения на 8*8 cell (например: триста десятые клетки).

У меня есть 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 .... 

, если первый блок изображения будет (1,1) = [8 * 8 двойной]; после реализации b (i) = a (index (i)) он переходит в 367-й блок [8 * 8], и, например, блок 787th [8 * 8] приходит в первый блок (простое сопоставление). Я хочу вернуть эти блоки в свои оригинальные вещи после реализации моих изменений!

+1

Можете ли вы предоставить макет пример (возможно, с помощью '2x2' вместо' 8x8'), но с фактической до и после цифр, так что мы можем увидеть, что именно ты имеешь в виду? Вы можете отредактировать исходный вопрос, чтобы добавить такой пример. – Dan

ответ

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 
+0

Спасибо за ответ, но он должен переупорядочить блоки ячеек, и когда я использовал ваши коды, я столкнулся с этим выражением: Ошибка с использованием subsindex Функция «subsindex» не определена для значений класса 'cell'. Ошибка в пак (строка 34) rMap (б) = 1: 1024 –

+0

@sahandziabari Вы можете, вероятно, использовать 'cell2mat' первый (и, возможно,' mat2cell' позже) –

+0

@sahandziabari 'revMap' должен быть похож на ваш' индекс 'array – Shai

Смежные вопросы