Home

Octave

サンプル

画像ファイルを読みだして表示する

      	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