*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]]