離散コサイン変換のフェーズに挑戦
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);