画像表示の高速化はどのように行いますか?

5 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2013 年 2 月 1 日
画像のオブジェクトの、CData プロパティの更新による表示に時間がかかります。

採用された回答

MathWorks Support Team
MathWorks Support Team 2013 年 2 月 1 日
高速化のための方法がいくつかあります。
1. 行列の1要素あたりのサイズの小さいデータ型の使用
例えば、画面のサイズが同じ(縦*横が同じ、すなわち、画像のための行列の要素数が同じ)場合、"uint8" による画像データの表示は、"double" による画像データの表示よりも高速です。これは、"CData" プロパティを使用した方法の一部は、イメージデータのコピーとなっておりますので、データサイズが大きければ時間がかかるためです。データ型を小さくすることによりデータのコピーのための所要時間を減らすことができます。
2. 行列のサイズを小さくする
行列のサイズ(要素数)を最小限にします。高画質での画像の表示は要素数の多い行列データを必要とします。画質を落とすことにより必要なデータサイズを減らし、表示の速度を上げることができます。
3. axes と行列のサイズを一致させる
表示する axes のサイズを "CData" プロパティの行列のサイズと一致させます。画面のピクセルとデータの間のサイズを一致させることにより、サイズを合わせるための補間を回避することができますので、その分、高速化できます。たとえば、以下のようなプログラムにします。
set(gca,'Units','pixels')
pos = get(gca,'Position')
width = pos(3);
height = pos(4);
"CData" のサイズを "[width height]" に一致させますと、行列内の要素がそのままピクセルに反映されます。このため、補間のための処理が不要になります。
4. axes の limit mode プロパティ ("XLimMode", "YLimMode") を "manual" に設定します。これが "auto" の場合、image、line、patch などのオブジェクトは毎回データを更新するため、関連するプロパティを毎回計算する必要があります。たとえば、以下に修正すると、描画前の制限値の計算を省略できます。
image(firstimage);
set(gca, 'xlimmode','manual',...
'ylimmode','manual',...
'zlimmode','manual',...
'climmode','manual',...
'alimmode','manual');
5. "DoubleBuffer" プロパティの無効化
Figure の "DoubleBuffer" プロパティを "off" にします。"DoubleBuffer" を "on" にすることによりちらつきのないアニメーション描画を可能にしますが、描画速度は低下するためです。
set(gcf,'doublebuffer','off');
6. movie の使用
タスクを単純に高速化したい場合であれば、MATLAB のオブジェクトではなく、MATLAB の movie オブジェクトを使用する方法があります。これは、システムのグラフィックス機能を使用する方法で、"CData" の更新よりさらに高速な方法です。MOVIE関数の使用方法については、以下を実行し、ヘルプドキュメントを参考にしてください。
doc movie

その他の回答 (0 件)

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!