2016-10-12 13 views
3

私はMatlabに36x80の行列を持っています。 これは、点字のシンボルである3×2アレイで構成されています。すなわち、第3×2の部分行列は、 "P" の文字matlabの部分行列を "反復"する方法

0 0 
0 1 
0 1 

を表す

0 0 0 1 0 1 0 0 ..... 
0 1 0 0 1 0 0 0 ..... 
0 1 0 1 0 1 1 1 ..... 
..................... 

次にように "R" となります。 そして私は点字記号を表すこれらの "パターン" 3x2行列の多くを持っています。

英語の文字列に変換するにはどうすればよいですか?

答えて

2

あなたのようなセル配列にこの行列を変換することができます:

Bがあなたの元の行列である
Bs = mat2cell(B,repelem(3,size(B,1)/3),repelem(2,size(B,2)/2)); 

。あなたはあなたの行列にそれを比較することができますので、同じように点字コードを準備する必要があり

Bs以上

letters = {'p',[0 0;0 1;0 1];'r',[0 1;0 0;0 1]}; % ...and so on for all letters 

その後のことができますループ:

txt = char(zeros(size(Bs))); % the result 
for k = 1:numel(Bs) 
    for l = 1:size(letters,1) 
     if isequal(Bs{k},letters{l,2}) 
      txt(k) = letters{l,1}; 
      break 
     end 
    end 
end 

そしてここにもう一つありますマトリックス配列をセル配列に変換せずに、次のオプションを使用します。

BB = reshape(reshape(B,3,[]),3,2,[]); 
txt = char(zeros(size(B,1)/3,size(B,2)/2)); % the result 
for k = 1:size(BB,3) 
    for l = 1:size(letters,1) 
     if isequal(BB(:,:,k),letters{l,2}) 
      txt(k) = letters{l,1}; 
      break 
     end 
    end 
end 

Thi特にデータがたくさんある場合は、高速化する必要があります。

+0

ありがとう、それは私が欲しかったものです! – Vitali

関連する問題