4

newim = rippleim(im)画像を受け取り、波及効果のある新しい画像を返す関数を書きたいと思います。

からのすべてのポイントの距離を計算し(p,q)、次に を乗算すると、sin(d).*exp(-d)波がフェージングする効果が得られると考えました。

n = 800;
m = 800;
im = zeros(n,m,3);
p = [round(m*.5) round(n*.5)];
[x y] = meshgrid(1:m,1:n);
x = x - p(1,1);
y = y - p(1,2);
d = (x .^2 + y .^2).^.5;
R = cos(.05*d) .* exp(-.005*d);
G = cos(.05*d) .* exp(-.005*d);
B = cos(.05*d) .* exp(-.005*d);
im = cat(3,R,G,B);
imshow(im);

そして、私は、

ここに画像の説明を入力

に正規化すると[0 1]、少し良くなり、

ここに画像の説明を入力

それはまだ正しくないようです。

アニメーションについて、グーグルで検索して、python hereでいくつかの同様のケースを見つけました。しかし、私は固定効果が欲しいだけです。

Q1効果を高めるには?

Q2既存の画像に適用するには?

ありがとう、

4

2 に答える 2

4

最初の質問についてですが、試行錯誤して自分の好みに合う関数を見つけるのではなく、自分の頭にあるルックアップテーブル「関数」を手動で作成し、上位の関数を適合させることをお勧めします。それに多項式。

2番目の部分については、適用するということはマスクとして使用することを意味していると思います. この場合、正規化されたバージョンの波及効果を画像に単純に掛けることができます。

imp = double(imread('peppers.png'));
n = size(imp,1);
m = size(imp,2);
p = [round(m*.5) round(n*.5)];
[x,y] = meshgrid(1:m,1:n);
x = x - p(1,1);
y = y - p(1,2);
d = (x .^2 + y .^2).^.5;
mask = cos(.05*d) .* exp(-.005*d);
im = (mask-min(mask(:)))./ ( max(mask(:))-min(mask(:)));
I = bsxfun(@times,im,imp);
imshow(I/255);

ここに画像の説明を入力

于 2014-11-16T08:11:38.130 に答える