*Matlab [#l4beae27]
** YUVを扱う [#h0ff622f]
- VQEG format:4:2:2 (Abekas YUV)
 function imageY = imgShowVQEG(nameSequence, fnum)
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %   imshow Images of VQEG
 %        for 4_2_2_format
 %        Cb Y Cr Y Cb Y Cr ....
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %fname = selectSequence(nameSequence);
 fname=nameSequence;
 framesize = [1440 486];  %width, height   
 precision = 'uint8=>uint8';  
 fid = fopen(fname,'rb');
     offset = fnum*1440*486;
     status = fseek(fid,offset,'bof');
     p = fread(fid,framesize,precision);
     imageY = p(2:2:1440,:).'; % only gray pixels'
     imageU = p(1:4:1440,:).'; % Cb
     imageV = p(3:4:1440,:).'; % Cr
 fclose(fid);
 figure, 
      imshow(imageY);

- format:4:2:0(berkeley YUV)
 function [imgY, imgU, imgV] = imgShowQcif(nameSequence, fnum, isShow)
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %   imshow Images of Qcif
 %        for 4_2_0_format
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 fname = nameSequence;
 framesize = 176*144*1.5;  %the number of Y*U*V   
 
 offsetY=176*144;
 offsetU=offsetY+176*144/4;
 
 precision = 'uint8=>uint8';  
 fid = fopen(fname,'rb');
     offset = fnum*framesize;
     status = fseek(fid,offset,'bof');
     p = fread(fid,framesize,precision);
     imgY = p(1:offsetY);
     imgU = p(offsetY+1:offsetY+176*144/4);
     imgV = p(offsetU+1:offsetU+176*144/4);
 fclose(fid);
 clear p
 
 imgY = reshape(imgY,176,144)';
 imgU = reshape(imgU,176/2,144/2)';
 imgV = reshape(imgV,176/2,144/2)';
 
 if(isShow)
   figure, imshow(imgY);
   figure, imshow(imgU);
   figure, imshow(imgV);
 end;


** psedo noise [#nc991593]
 function out = pnsamp1(r,g,number)
 % PN Sequence Generator
 % 関数書式 / out = pnsamp1(s,g,m,number)
 % r : 初期状態 
 % g : 回路構成多項式
 % number : PNシーケンス信号のサイズ
 % out : PNシーケンス信号
 % 
 % 例1
 % init = [1 1 1 1 1 1 1 1 1];	% シフトレジスタの初期状態量
 % poly = [1 0 0 0 0 1 0 0 0 1];	% フィードバック回路(多項式)
 % number = 51;			% PNシーケンス信号の長さ
 % out = pnsamp1(init,poly,number); % PNシーケンス信号作成
 
 br = zeros(1,length(r));
 for t=1:number
     br(1) = mod(r*[g(2:end)]',2);
     br(2:end) = r(1:end-1);
     out(t) = r(end);
     r = br;
 end

** no return でおながいします [#b9619577]
久しぶりにつかってみたら、参照渡し(Call by reference?)ができないことに気づく。
あれ、値渡しのみなのかい・・・。

*** Matlab Function [#z252bf16]
- function.m
 function [result, val] = function(array)
 ....
 ....
 val = ....;
 result = array;
***Wrapper [#td00f655]
-らっぱー作れば解決。

 int[][] wrapperFunction(int[][] src) {
    function(src);
    return src;
 }

-(ゥ)ラッパーは、C、もしくはJAVAサイドで用意しないとだめだよね?きっと。
--そのとおり。
-コンストラクタに、入力されてしまう場合はどうする?
--といいますと?
--いいのか。(ゥ)ラッパーメソッド内でNewすればいいだけか。
--- でも、それはそのクラス内にメソッド追加でいいか。無理に(ゥ)ラッパーしなくてもいいのか
-- 本質的に必要でないメソッド追加よりは,Matlab専用ラッパーのほうが無理がないともいえる。
---なるほど。1つmatlabへのwrapper用クラスを作って、そこにバンバンwrapperMethodsを追加していけばいいのか。使う側はそのクラスだけを理解していれば使えるし。
--クラスの名前を決めないとなぁ
---WrapperFunctionsToMatlab.java ?
---MatlabWrapper.java

じゃ、こんなの?
 int[][] wrapperWaveletDecompose(int[][] src, int level){
    WaveletTransform2D wavelet;
    wavelet = new WaveletTransform2D(src, false);
    for(int iLevel=0; iLevel<level, iLevel++)    
        wavelet.decompose();
    return src;
 }
** javaを使いたいんです、wavelet、mctfとかを使い回したいんです [#c0bca3a2]
jarさえ作ってしまえばあとは簡単。ほとんどjava。でも、参照渡しできないんだったら、ちょっと扱いづらいような…。
 javaaddpath /home/xxx/work/java/myclasses.jar
 import packageA.* packageB,*;

たとえばこんな感じ (m_script.m)
 import j2kwrapper.*;
 
 array=ones(240,320,'single');
 isInplace = false;
 wavelet = WaveletTransfrom2D(array, isInplace);  %new
 wavelet.decompose();  % 1-level decompose
 
 参照渡しなら結果がarrayに更新。
 でも、されない…
 array = wavelet.getDataInt(); % return int32
 array = wavelet.getDataFloat(); % return single
 


- まじめに、import から記述したのは初めてかも。eclipseありがとう。
**なんだ?関数ハンドルとは [#p0011c20]
 @function_name
**リンク [#i9870847]

//#urlbookmark(below)


-[[ドキュメント:http://www.cybernet.co.jp/matlab/support/helpdesk/r14/toolbox/matlab/index.shtml]]  --   SIZE(10){2005-11-03 01:46:02 (木)}
-[[関数引数:http://www.cybernet.co.jp/matlab/support/helpdesk/r14/toolbox/matlab/matlab_prog/ch_mfi16.shtml#213099]]  --   SIZE(10){2005-11-03 01:45:14 (木)}
-[[テクニカルノート:http://www.cybernet.co.jp/matlab/support/technote/index.shtml]]  --   SIZE(10){2005-11-03 01:44:17 (木)}
**その他 [#gb035f9c]
[[FIR]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS