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);
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;
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
久しぶりにつかってみたら、参照渡し(Call by reference?)ができないことに気づく。 あれ、値渡しのみなのかい・・・。
function [result, val] = function(array) .... .... val = ....; result = array;
int[][] wrapperFunction(int[][] src) { function(src); return src; }
じゃ、こんなの?
int[][] wrapperWaveletDecompose(int[][] src, int level){ WaveletTransform2D wavelet; wavelet = new WaveletTransform2D(src, false); for(int iLevel=0; iLevel<level, iLevel++) wavelet.decompose(); return src; }
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
@function_name
#urlbookmark(below)