matlab
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
*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]]
終了行:
*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]]
ページ名: