MATLABの初心者マトリックスアクセス
-
20-12-2019 - |
質問
今やオフ、これが行列と呼ばれていると確信していません、そして私はMATLABにとって新しいです。しかし、私はこのような「行列」を持っていると言ってみましょう:
for n=1:10
...
someImage = mat(:,:,n) %The "matrix"
...
end
.
n
は、例えばビデオ内のフレームである可能性があり、最初の2 ':'
は2D画像の行と列データです。
データの最初の':'
(行?列?要素?)だけが必要な場合は、それだけにアクセスするのでしょうか。
直感的に、私は次のようなものと思います:
row1 = mat(:,0,0)
row2 = mat(0,:,0)
row3 = mat(0,0,:)
.
しかしそれは働いていないようです。
p.S。私はこれらが本当に列ではないことを知っています、これすべての用語も大幅に感謝されるでしょう
また、これと関係ない場合がありますが、MATLAB GUIを使用しています。
handles.mat(:,:,n)
.
私の実際の質問と関係があるとは思わないが、それはここにそれを置くかもしれません
- 忍者!
解決
1点を起動する前にしたいと思います:Matlabは 1 で索引付けを開始し、 0 ではありません。これは、C / Java / Pythonプログラミングの背景を持っているほとんどの人がMATLABに入ることができます。
また、次のようにします。
row1 = mat(:,1,1);
.
これは最初の列のすべての行とあなたのビデオの最初のフレームにアクセスします。これにより、M x 1
ベクトルが生成されることに注意してください。ここで、M
はビデオ内のフレームの行数を表します。
また:
row2 = mat(1,:,1);
.
これは最初のフレームの最初の行のすべての列にアクセスします。これにより1 x N
ベクトルが生成されることに注意してください。ここで、N
はビデオ内のフレームの列数を表します。
また:
row3 = mat(1,1,:);
.
これは、1行目と列1の全ビデオシーケンスのすべてのピクセルにアクセスします。これは、ビデオシーケンスの左上隅の時間スライスと考えることができます。これにより、1 x 1 x T
ベクトルが生成されることに注意してください。ここで、T
はビデオ内のフレーム数です。あなたのビデオ内の単一のピクセルの場所にアクセスすると、最初の2つの寸法は余分なものであるため、squeeze
コマンドを使用してすべてのシングルトンの寸法を縮小することができます。言い換えれば、これを行う:
row3 = squeeze(mat(1,1,:));
.
FWIW、あなたは正しい用語を持っています。行と列は、常に画像/ビデオ処理で使用されます。 「行列」に関しては、このa 時間的シーケンスまたはフレームシーケンスを呼び出すことができます。それは確かに3D行列ですが、このドメインの人々はそれが本当に互いの上に積み重ねられた画像/フレームのシーケンスです。