2017-09-08 17 views
0

画像の特定部分を抽出したいと思います。たとえば、何らかの種類のテンプレートやフレームでインデックスされている部分だけを考えてみましょう。ループのない画像のフレーム/パターンを取得するMATLAB

GRAYPIC = reshape(randperm(169), 13, 13); 
FRAME = ones(13); 
FRAME(5:9, 5:9) = 0; 
FRAME_OF_GRAYPIC = []; % the new pic that only shows the frame extracted 

私は、forループを使用してこれを達成することができます

for X = 1:13 
for Y = 1:13 
    vlaue = FRAME(Y, X); 
    switch vlaue 

     case 1 
      FRAME_OF_GRAYPIC(X,Y) = GRAYPIC(X,Y) 
     case 0 
      FRAME_OF_GRAYPIC(X,Y) = 0 
    end 
end 
end 
imshow(mat2gray(FRAME_OF_GRAYPIC)); 

しかし、それはすなわち、ベクトル演算のいくつかの種類でそれを使用することが可能である:

FRAME_OF_GRAYPIC = GRAYPIC(FRAME==1); 

けれども、これは残念ながら働かない。

提案がありますか?コメントのためにあまりにも長い間、あなたの答えを

どうもありがとう、 最高、 クレメンス

+0

'FRAME_OF_GRAYPIC = FRAME * GRAYPIC;' – rahnema1

+0

あなたはほとんどそこにいます。 .. FRAME_OF_GRAYPIC(FRAME == 1)= GRAYPIC(フレーム== 1); '。または、より論理的に(hehe ...)論理的(FRAME)。 FRAME_OF_GRAYPIC(フレーム)= GRAYPIC(フレーム); '。 – beaker

+0

こんにちは、私はいくつかのことを試しました。 Sardar、私は試しました:[r、c] = find(FRAME> 0); FRAME_OF_GRAYPIC(r、c)= GRAYPIC(r、c); しかし、私はそこにはあまり行きません。 rahnema1、このまっすぐ前方提案のためにたくさんありがとう、それはうまく動作しますが、それは1または論理であるインデックスに操作を制限します。ビーカー、私はあなたの提案をテストしますが、それは、13x13の希望ではなく、グレー値を持つ1x169ベクトルになります。これまでのところあなたの助けに感謝します。もう少し明確にするために、私は他の値とも同じように動作させたいと思います。例:FRAME_OF_GRAYPIC(FRAME == 7)= GRAYPIC(フレーム== 7); –

答えて

1

...ここで注意すべき

GRAYPIC = reshape(randperm(169), 13, 13); 
FRAME = zeros(13);   
FRAME(5:9, 5:9) = 0;  
FRAME_OF_GRAYPIC = zeros(size(GRAYPIC); % MUST preallocate new pic the right size 
FRAME = logical(FRAME); % ... FRAME = (FRAME == 1) 
FRAME_OF_GRAYPIC(FRAME) = GRAYPIC(FRAME); 

3つのこと:

  • FRAMEでなければなりません論理配列。 true()/false()でそれを作成し、またはlogical()を使用して、それをキャスト、または真のあなたは、それ以外の場合はベクトルに変わります、適切な寸法に最終的なイメージを事前に割り当てる必要がありますFRAME = (FRAME == true_value);
  • を使用する値を選択します。
  • あなたは割り当ての両方サイドの画像インデックスを必要とする:
    FRAME_OF_GRAYPIC(FRAME) = GRAYPIC(FRAME);

出力:

FRAME_OF_GRAYPIC = 
    38 64 107 63 27 132 148 160 88 59 102 69 81 
    14 108 76 58 49 55 51 19 158 52 100 153 39 
    79 139 12 115 147 154 96 112 82 73 159 146 93 
    169  2 71 25 33 149 138 150 129 117 65 97 17 
    43 111 37 142  0  0  0  0  0 128 84 86 22 
    9 137 127 45  0  0  0  0  0 68 28 46 163 
    42 11 31 29  0  0  0  0  0 152  3 85 36 
    50 110 165 18  0  0  0  0  0 144 143 44 109 
    114 133  1 122  0  0  0  0  0 80 167 157 145 
    24 116 60 130 53 77 156 35  6 78 90 30 140 
    74 120 40 26 106 166 121 34 98 57 56 13 48 
    8 155  4 16 124 75 123 23 105 66  7 141 70 
    89 113 99 101 54 20 94 72 83 168 61  5 10 
+0

ありがとうございました!本当に値を選択する方法のビットは、私のために役立ちます特に!ビーカーに感謝します。 ベスト、C –

関連する問題