0

やっと波及効果を得ることができました。私はそれをアニメーション化し、アニメーションをGIFファイルに保存したいと考えています。

しかし、私はファイルに固定画像を取得しgifます。

アニメーションは MATLAB でうまく機能しますが、なぜ保存されないのかわかりません。

im = imread('peppers.png'); 
[m,n,~] = size(im);
n = linspace(-4 * pi,4 * pi,n);
m = linspace(-4 * pi,4 * pi,m);
[X,Y] = meshgrid(m,n);
d = (X .^ 2 + Y .^ 2) .^ .5;
d = d / max(d(:));
d = (d - .5) * 2 * pi;
j = 1;
figure(1);
for i = 0 : .2 : 2 * pi
    Z = cos(2 * d + i) .* exp(-.01 .* d);
    h = warp(X,Y,Z,im);
    axis equal; axis off;
    f = getframe;
    [I,~] = frame2im(f);
    [I,cm] = rgb2ind(I,256);
    if j == 1
        imwrite(I,cm,'B.gif','gif', 'Loopcount',inf);
    else
        imwrite(I,'B.gif','gif','WriteMode','append','DelayTime',1/24);
    end
    j = 0;
end

ここに画像の説明を入力

質問 1どうすれば保存できますか (または現在のコードの問題点は何ですか)?

質問 2白地がないように保存するにはどうすればよいですか?

(たとえばview([0 45])、少しズームして)

ありがとう、

編集@Ayb4btu のおかげで、いくつかの改善を行いました。

ここに画像の説明を入力

ただし、使用すると速度が低下し、デスクトップがキャプチャclose allされることもあります!getframe

4

1 に答える 1

1

何らかの理由で、imwrite は Figure がどのように更新されているかを好みません。次の洗練されていないコードは、Figure を閉じて新しいものを描画することによって機能します。

clear all, close all, clc

I = imread('peppers.png'); 
[m,n] = size(I);
n = linspace(-4 * pi,4 * pi,n);
m = linspace(-4 * pi,4 * pi,m);
[X,Y] = meshgrid(m,n);
d = (X .^ 2 + Y .^ 2) .^ .5;
d = d / max(d(:));
d = (d - .5) * 2 * pi;
j = 1;

for p = 0 : .2 : 4 * pi
    figure(1)
    Z = cos(2 * d + p) .* exp(-.01 .* d);
    h = warp(X,Y,Z,I);
    axis equal; axis off;   

    frame = getframe(1);
    im = frame2im(frame);
    [A,map] = rgb2ind(im,256);

    if j == 1
        imwrite(A,map,'B.gif','gif', 'Loopcount',Inf,'DelayTime',1/24);
    else
        imwrite(A,map,'B.gif','gif','WriteMode','append','DelayTime',1/24);
    end

    j = 0;
    close all
end

これを基礎として使用すると、問題がどこにあるかを把握できる場合があります。

あなたの質問 2 に関しては、このコードは図の背景色を使用していますが、imwrite には色のプロパティがあると思います。

于 2014-11-21T08:41:47.597 に答える