ayucat.ch 2015-16

id:ayucatのぶろぐ (Nexus 5 (2015) / iPhone 6s / Galaxy S6 edge / iOS 9 / Ubuntu Trusty / Android 6.0 Marshmallow / Thunderbird / AWS / クラブ / 祭り / 花火 / 海 / 野外フェス)

離散コサイン変換のフェーズに挑戦

File:Dandelion clock quarter dft dct.png - Wikimedia Commonsというのがありました。
[...]

http://d.hatena.ne.jp/ayucatch/20090322/gnu_octave

という感じで、いわゆるDCT(離散コサイン変換)を楽しんでいました。 [...]

http://d.hatena.ne.jp/ayucatch/20091117/gnu_octave_on_karmic

ということで、MATLABでも遊んでみました。

今回の目的: フェーズ

amplitude(強度)だけでなく、phase(位相)も見てやろうというのが、今回の目的。

結果

私が用意した画像ではうまく位相の差が出てこなかった。ln(対数)を取ってみたけれども、変わらず。
うーん、対数を取ってしまったのがまずかったのか、むしろ?
と思って、常数で見てみたけど、何も変わらず。うーむ、困った。

もう少し簡単な画像例からやっていくべきか。

DFTで最初試して、その後DCTに移行したけど、特に面白いことは分からず。。。
真面目に専門書(というか大学学部の教養レベル、あるいはサルでも分かる本?だろーけど)でも読むべきかね。

ソースコードは以下。

% read the image
RGB = imread('foobar.png');
% convert pixels to the [0 1] range
RGB = im2double(RGB);
% convert to grayscale
I = rgb2gray(RGB);

% evaluate magnitude of the DFT
F = abs(fft2(I));
% use log scale
F = log(1 + F);
F = log(1 + F);
% normalize
F = F./max(F(:));

% evaluate phase of the DFT
FP = angle(fft2(I));
FP = FP./max(FP(:));

% evaluate magnitude of the DCT
C = abs(dct2(I));
% use log scale
C = log(1 + C);
C = log(1 + C);
% normalize
C = C./max(C(:));

% evaluate phase of the DCT
CP = angle(dct2(I));
CP = CP./max(CP(:));

% show all the results
imshow(F), colorbar, colormap(jet);
figure, imshow(FP), colorbar, colormap(jet);
figure, imshow(C), colorbar, colormap(jet);
figure, imshow(CP), colorbar, colormap(jet);