avicmp.m

AVI ファイルの映像比較をする.処理速度は遅い.

コード

% 映像入力
defaultpath = 'c:\data\video\';
[ fname, dpath, filterindex ] = uigetfile( ...
	{'*.avi', 'AVI Files (*.avi)'; ...
	 '*.*',   'ALL Files (*.*)'} , ...
	'select file1', defaultpath);
if ( filterindex ~= 0 )
	file1 = fullfile( dpath, fname );
	fprintf( 1, 'file1: %s\n', file1);
else
	disp( 'file1: error');
	return;
end
[ fname, dpath, filterindex ] = uigetfile( ...
	{'*.avi', 'AVI Files (*.avi)'; ...
	 '*.*',   'ALL Files (*.*)'} , ...
	'select file2', defaultpath);
if ( filterindex == 1 )
	file2 = fullfile( dpath, fname );
	fprintf( 1, 'file2: %s\n', file2);
else
	disp( 'file2: error');
	return;
end

% ハンドル
video1 = mmreader( file1 );
disp( 'video1: loaded' );
video2 = mmreader( file2 );
disp( 'video2: loaded' );

% フレーム数比較
num1 = get( video1, 'numberOfFrames' );
fprintf( 1, 'video1: %d\n', num1);
num2 = get( video2, 'numberOfFrames' );
fprintf( 1, 'video2: %d\n', num2);
if ( num1 == num2 )
	disp( 'numberOfFrames: ok' );
else
	disp( 'ng' );
	return;
end

% フレーム比較
for n = 1 : num1
	% そのままでは uint8 なので,符号付きにする.
	% 差をとるので,サイズを大きくする.
	frame1 = int16( read ( video1, n ) );
	frame2 = int16( read ( video2, n ) );
	frame1 = frame1 - frame2;
	% 非ゼロ要素があれば最初の添え字を得る.ないとき empty
	if ( isempty( find( frame1 , 1) ) ~= 1 )
		% 非ゼロ要素があるとき,終了
		fprintf( 1, 'isempty: find: %d\n', n);
		disp( 'avicmp.m: ng');
		return;
	end
end
disp( 'avicmp.m: ok');