ayucat.ch 2015-16

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

GNU Octaveで離散コサイン変換

GNU Octave関連の記事が人気を集めているようです。

File:Dandelion clock quarter dft dct.png - Wikimedia Commonsというのがありました。
再現してみようということになり、Ubuntu 9.04 もどき上の端末で
[...]
とするだけでは、imreadやim2doubleがないと怒られますので、octave-imageを入れました。
さらに、dct2がないと怒られたので、octave-signalを追加で入れました。

Wikipedia/Wikimedia Commonsで学ぶGNU Octave (準備編) - ayucat.ch

という感じで、いわゆる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);

が使えるかもしれません。。。試していませんが。