💻
Octave Programming Note
Octave Programming Note
画像ファイルを読みだして表示する
clear;
clf();
# read image
X = imread("cat3.png");
# display image
subplot(2, 2, 1);
imshow(X);
# grayscale
monotone = X(:,:,1)/3 + X(:,:,2)/3 + X(:,:,3)/3;
subplot(2, 2, 2);
imshow(monotone);
# do FFT
Y = fft2(X);
subplot(2, 2, 3);
imshow(abs(fftshift(Y)/10000));
# crop
Z = X(50:200, 50:200, :);
subplot(2, 2, 4);
imshow(Z);
RAW画像データを読む
xsize = 512;
ysize = 512;
[fid, msg] = fopen("./image.raw", "r");
if (fid == -1)
disp("Error: fopen");
endif
[D, count] = fread(fid, [xsize ysize], "int16=>int16");
fclose(fid);
RAWデータを読み込む
ピクセルが充填されたファイルを読み込む。
ピクセルは16ビット符号付整数で、512x512のマトリクスサイズとする。
xsize = 512;
ysize = 512;
[fid, msg] = fopen("image.raw", "r");
if (fid != -1)
[I, count] = fread(fid, [xsize ysize], "int16=>int16", 0, "ieee-be");
fclose(fid);
else
disp("Error: fopen");
endif
16ビット符号付き整数にてLUTを作成する
64k個作るのメモリ量を喰うので、とりあえず8k個分だけ作る。
領域を超えないように呼び出し側でwl/wwを調整する必要がある。
function lut = LUT(wl, ww)
# LUT領域確保
lut = zeros(8192, 1);
# オフセット
offset = 4096;
# LUTの開始/終了
_lower = floor(wl - ((ww+0.0)/2.0)) + offset;
_upper = _lower + ww;
# LUT充填
for i = (1:_lower-1)
lut(i) = 0.0;
endfor
slope 1.0/(ww+0.0);
for i = (_lower:_upper)
y = slope * ((i - _lower) + 0.0);
if (y > 1.0)
y = 1.0
endif
lut(i) = y;
endfor
for i = (_upper+1:8192)
lut(i) = 1.0
endif
endfunction
LUTを通過させ輝度画像を生成する
I = zeros(ysize, xsize, 3);
for y = (1:ysize)
for x = (1:xsize)
ivalue = lut(I(y, x) + 4096);
I(y, x, 1) = ivalue;
I(y, x, 2) = ivalue;
I(y, x, 3) = ivalue;
endfor
endfor
Discussion