문제

우선, 이것이 행렬이라고 불리는지조차 확신할 수 없습니다. 저는 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,:)

하지만 그건 작동하지 않는 것 같습니다.

추신나는 이것이 실제로 행이 아니라는 것을 알고 있습니다. 이 모든 것에 대한 용어도 크게 감사하겠습니다.

또한 이것과 아무 관련이 없을 수도 있지만 MATLAB GUI도 사용하고 있으며 "행렬"은 다음과 같이 저장됩니다.

handles.mat(:,:,n)

내 실제 질문과 관련이 없다고 생각하지만 여기에 넣을 것입니다.

-감사해요!

도움이 되었습니까?

해결책

시작하기 전에 한 가지 말씀드리고 싶은 점은 다음과 같습니다.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 동영상의 프레임 수입니다.비디오에서 단일 픽셀 위치에만 액세스하는 경우 처음 두 차원은 불필요하므로 다음을 사용할 수 있습니다. squeeze 모든 싱글톤 차원을 축소하여 다음과 같이 단순화하는 명령 T x 1 벡터.즉, 다음을 수행합니다.

row3 = squeeze(mat(1,1,:));

FWIW, 올바른 용어가 있습니다.행과 열은 이미지/비디오 처리에 항상 사용됩니다."행렬"에 관해서는 이것을 다음과 같이 부를 수 있습니다. 시간적 순서 또는 프레임 순서 영상처리 측면에서요.그것은 확실히 3D 매트릭스이지만 이 영역의 사람들은 실제로 서로 위에 쌓인 일련의 이미지/프레임이기 때문에 이를 둘 중 하나로 표시합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top