GNU Octaveで離散コサイン変換
GNU Octave関連の記事が人気を集めているようです。
File:Dandelion clock quarter dft dct.png - Wikimedia Commonsというのがありました。
Wikipedia/Wikimedia Commonsで学ぶGNU Octave (準備編) - ayucat.ch
再現してみようということになり、Ubuntu 9.04 もどき上の端末で
[...]
とするだけでは、imreadやim2doubleがないと怒られますので、octave-imageを入れました。
さらに、dct2がないと怒られたので、octave-signalを追加で入れました。
という感じで、いわゆるDCT(離散コサイン変換)を楽しんでいました。Ubuntu 9.10が出た今もおそらく同じ方法で同じことができるはずです。
% read the image RGB = imread('Dandelion_clock.jpg'); % 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 magnitude of the DCT C = abs(dct2(I)); % use log scale C = log(1 + C); C = log(1 + C); % normalize C = C/max(C(:)); % show all the results imshow(F), colorbar, colormap(jet); figure, imhist(F); figure, imshow(C), colorbar, colormap(jet); figure, imhist(C);
という具合でいいはず。
当時は放置してしまっていた、
[...] GNU Octaveおよびoctave-forgeではimcropが未実装ですので、[...]
Wikipedia/Wikimedia Commonsで学ぶGNU Octave (準備編) - ayucat.ch
がどうなっているのか、そろそろチェックしておいてもいいかもなぁ。
ググってみたら、
cropped_image = original_image(top_row:bottom_row, left_column:right_column, :);
Error 410
というのがあったので、MATLABの
F = imcrop(F,[0 0 Y X]);
は、GNU Otaveで
F = original_image(0:Y, 0:X, F);
が使えるかもしれません。。。試していませんが。