0

値が乱数で与えられる同心円で構成される画像を生成するプログラムを作成しました。

cx=20;cy=20;ix=40;iy=40;
[x,y]=meshgrid(-(cx-1):(ix-cx),-(cy-1):(iy-cy));  
a=zeros(40,40);
x1=rand(1,20);

for j= 1:20
%%inner radius
R=j-1;
c1=((x.^2+y.^2)<=R^2);
n1=not(c1);
%%outer radius
R=j;
c2=((x.^2+y.^2)<=R^2);
rj=bitand(c2,n1);
rj=rj.*x1(1,j);
a=imadd(a,rj);
end
imshow(a)

問題は、リグが整然と動いているかのように連続した画像を取得したいということです。だから私は circshift 関数を採用し、私のコードは次のようになりました:

cx=20;cy=20;ix=40;iy=40;
[x,y]=meshgrid(-(cx-1):(ix-cx),-(cy-1):(iy-cy));  
a=zeros(40,40);
x1=rand(1,20);
for i= 1:20
xc=circshift(x1,[1 i-1]);
%%inner radius
R=j-1;
c1=((x.^2+y.^2)<=R^2);
n1=not(c1);
%%outer radius
R=j;
c2=((x.^2+y.^2)<=R^2);
rj=bitand(c2,n1);
rj=rj.*xc(1,j);
a=imadd(a,rj);
end
imshow(a)

そしてプログラムは実行されません。誰でも私を助けてもらえますか?よろしくお願いします。

4

1 に答える 1

0

「i」をループしていますが、前のコードのように、ループでは i と j の両方を使用していますが、Matlab はこれを認識せず、虚数単位であると解釈する可能性があります。とにかく、すべての j を使用するとうまくいきます。円が大きくなるのを確認できるように、コードを少し変更しました。

clear all
clc
close all

cx=20;cy=20;ix=40;iy=40;

[x,y]=meshgrid(-(cx-1):(ix-cx),-(cy-1):(iy-cy));
a=zeros(40,40);
x1=rand(1,20);

for j= 1:20
    xc=circshift(x1,[1 j-1]);
    %%inner radius
    R=j-1;
    c1=((x.^2+y.^2)<=R^2);
    n1=not(c1);
    %%outer radius
    R=j;
    c2=((x.^2+y.^2)<=R^2);
    rj=bitand(c2,n1);
    rj=rj.*xc(1,j);
    a=imadd(a,rj);

    imshow(a) % Put imshow in the loop
    pause(0.05) % little pause (0.05 seconds)
end
于 2014-09-30T21:14:35.150 に答える