1

ループをネストするべきではないことは理解していますが、5x5ウィンドウをさらに4つの3x3サブウィンドウに分割するために同じことを行いました。これについて、ネストされたループなしで5x5ウィンドウを4つの3x3サブウィンドウに分割する方法を教えてください。

コード:

i = 1:mの場合

j = 1:nの場合

  if(i<=(m-4) && j<=(n-4))

      % Reading 5 x 5 window in an image

v=1; 
for p=i:i+4
    u=1;
    for q=j:j+4
        P(v,u)=L(p,q);
        u=u+1;
    end
    v=v+1;
end

    % Sub dividing the 5 x 5 window into four 3x3 sub windows 

k=1;
for r=1:3
    l=1;
    for s=1:3
        v2(k,l)=P(r,s);
        v1(k,l)=P(r,s+2);   
        v3(k,l)=P(r+2,s);
        v4(k,l)=P(r+2,s+2);
        l=l+1;    
    end
    k=k+1;
end

さらに処理するには、この4つのベクトルv1、v2、v3、およびv4が必要です。コーナーピクセルの保持に関する以前の質問のリンク:

https://stackoverflow.com/questions/13793103/retain-corner-pixels-in-an-image

4

2 に答える 2

0

ウィンドウの分割に関する質問に答えるだけではありません。

  1. 次のような画像から 5x5 ウィンドウを読み取ります。

    P=L(i:(i+4),j:(j+4));

    (i,j)元の画像のウィンドウの左上隅です。

  2. この「分割」は、5x5 ウィンドウの TL、TR、BL、および BR(*) コーナーから 3x3 を取得するように見えます。これは、次のように簡単に実行できます。

    tl = P(1:3, 1:3); % this is v2 in your question
    tr = P(1:3, 3:5); % this is v1 (didn't you mix up v2 and v1 by any chance?)
    bl = P(3:5, 1:3); % this is v3
    br = P(3:5, 3:5); % this is v4

    より表現力豊かなので、tl, tr, bl, br代わりにこれを使用することをお勧めします。v1, v2, v3, v4

(*)(T=上、B=下、L=左、R=右)


更新: (ループを変更する方法は?)
L のすべてのウィンドウをカバーしたいので、最初のウィンドウはP=L(1:5, 1:5)、最後のウィンドウは になりますP=L((m-4):m,(n-4):n)。他のすべてはその間にあります。したがって、i の最初の値は i=1、最後の値は i=m-4、最初の j は j=1、最後の値は j=n-4 です。

次のように、matlab のコマンド プロンプトに demo L を入力して、これを手動で確認することもできます。

L=reshape([1:42], 6, 7); % a 6x6 test array
m=6; n=7;

i=1; j=1;
P_first=L(i:(i+4),j:(j+4)); % should contain 1

i=m-4; j=n-4;
P_last=L(i:(i+4),j:(j+4)); % should contain 42
于 2012-12-10T14:57:30.503 に答える
0

これが必要かどうかはよくわかりませんが、この解決策はどうですか:

% Some random matrices that are each one third the length and width of the total
LU3 = rand(10);
LM3 = rand(10);
LD3 = rand(10);
MU3 = rand(10);
MM3 = rand(10);
MD3 = rand(10);
RU3 = rand(10);
RM3 = rand(10);
RD3 = rand(10);

% Putting them together
I = [LU3 MU3 RU3;LM3 MM3 RM3;LD3 MD3 RD3];

% Splitting it up in four parts
LU2 = I(1:15,1:15)
RU2 = I(16:30,1:15)
LD2 = I(1:15,16:)
RD2 = I(16:30,16:30)

あまり一般化されていませんが、適応するのは難しくありません。

于 2012-12-10T14:37:58.180 に答える