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