これが、この素敵な式を実装するための私の試みです。
http://dl.dropbox.com/u/7348856/Picture1.png
%WIGNER Computes Wigner-Distribution on an image (difference of two images).
function[wd] = wigner(difference)
%Image size
[M, N, ~] = size(difference);
%Window size (5 x 5)
Md = 5;
Nd = 5;
%Fourier Transform
F = fft2(difference);
%Initializing the wigner picture
wd = zeros(M, N, 'uint8');
lambda =0.02;
value = (4/(Md*Nd));
for x = 1+floor(Md/2):M - floor(Md/2)
for y = 1+floor(Nd/2):N - floor(Nd/2)
for l = -floor(Nd/2) : floor(Nd/2)
for k = -floor(Md/2) : floor(Md/2)
kernel = exp(-lambda * norm(k,l));
kernel = kernel * value;
theta = 4 * pi * ((real(F(x, y)) * (k/M) )+ (imag(F(x, y)) * (l/N)));
wd(x, y) = (wd(x, y)) + (cos(theta) * difference(x + k, y + l) * difference(x - k, y - l) * (kernel));
end
end
end
end
end
ご覧のとおり、外側の2つのループはスライディングウィンドウ用で、残りの内側のループは合計の変数用です。
さて、私の最愛のstackoverflowユーザーへの私のリクエストは、次のとおりです。時間のシェア以上の時間がかかるこれらの非常に厄介なforループを改善し、ベクトル化されたループに変換するのを手伝ってくれませんか?そして、その改善は大きな変化になるのでしょうか?
ありがとうございました。