MatLabで、ユーザーにビデオファイルのアップロードを求めるGUIを作成しています。次に、ウィンドウサイズが固定された軸で再生したいと思います。ただし、アップロードされたファイルが大きい場合、Matlabは軸を拡張し、GUIのほとんどを引き継ぎます。画像を縮小して軸に合わせる方法はありますか?
誰かがこれを解決する方法を知っていますか?
MatLabで、ユーザーにビデオファイルのアップロードを求めるGUIを作成しています。次に、ウィンドウサイズが固定された軸で再生したいと思います。ただし、アップロードされたファイルが大きい場合、Matlabは軸を拡張し、GUIのほとんどを引き継ぎます。画像を縮小して軸に合わせる方法はありますか?
誰かがこれを解決する方法を知っていますか?
この質問は古いですが、私はこれに出くわしました(何か他のものを探しています)ので、誰かが私が何をしたかを見るのに役立つかもしれません.
かなり大きな画像 (1024x 100k-200k ピクセル) のサイズを変更して、GUI がこれらの大きなデータ セットのビューでさまざまな色操作をすばやく実行できるようにしたいと考えていました。次のようにデータを手動でサブサンプリングしました(以下の関数)。
この例はイメージであることに注意してください。ビデオを空間的にサブサンプリングするために、ビデオをループして、過去に各フレームで同様のことを行いました。
[plotWidthPixels, plotHeightPixels] = getPlotAreaPixels(handles.figure1, handles.axes1);
[nSamplesPerLine nLines] = size(iqData);
colInds = decimateToNumber(nLines,plotWidthPixels);
rowInds = decimateToNumber(nSamplesPerLine,plotHeightPixels);
iqDataToPlot = iqData(rowInds,colInds);
まず、軸のサイズをピクセル単位で取得しました。
function [plotWidthPixels, plotHeightPixels] = getPlotAreaPixels(figHandle, axisHandle)
set(figHandle,'Units','pixels')
figSizePix = get(figHandle,'Position');
set(axisHandle,'Units','normalized')
axSizeNorm = get(axisHandle,'Position');
axisSizePix = figSizePix.*axSizeNorm;
plotWidthPixels = ceil(axisSizePix(3)-axisSizePix(1));
plotHeightPixels = ceil(axisSizePix(4)-axisSizePix(2));
次に、それを使用して、(大まかにほぼ)等間隔のインデックスのサブセットを取得することにより、画像の幅と高さを間引きました。
function inds = decimateToNumber(lengthOfInitialVector, desiredVectorLength, initialIndex)
if nargin < 3
initialIndex = 1;
end
if (lengthOfInitialVector-initialIndex+1) > desiredVectorLength*2
inds = round(linspace(initialIndex,lengthOfInitialVector,desiredVectorLength));
else
inds = initialIndex:lengthOfInitialVector;
end
通常、画像が大きすぎる場合、Matlab 軸はその位置を変更することは想定されていません。
考えられる問題として、次の 2 つが考えられます。