MPEG -1 압축 - 매크로 블록 생성
-
13-09-2019 - |
문제
MPEG-1 압축에서 기본적인 문제가 있습니다. 이미지 내에서 거대 블록을 생성해야합니다. 매크로 블록은 16 x 16 픽셀로 구성됩니다. 여기서 4 x 8x8은 휘도, 1 x 8x8은 CB 및 1 x 8x8 cr입니다. Matlab에서 나는 이것을 포함하는 셀 매트릭스를 생성하고 싶습니다. 제안이 있습니까?
해결책
다양한 수집하는 가장 좋은 방법을 알아 내려고하는 것 같습니다. 8-8 단일 변수로 매트릭스. 이 작업을 수행 할 수있는 몇 가지 방법이 있습니다 (첫 번째 옵션은 내가 귀하의 케이스를 위해 선택할 것입니다).
데이터를 3 차원 매트릭스로 연결합니다.
당신은 사용할 수 있습니다 고양이 주어진 치수를 따라 같은 크기의 매트릭스를 스택하는 것. 예를 들어, 4가있는 경우 8-8 변수의 휘도 행렬
L1
,L2
,L3
, 그리고L4
, 다음은 그것들을 an에 연결할 것입니다 8-8- x 4 행렬:luminance = cat(3,L1,L2,L3,L4);
추가를 추가 할 수도 있습니다
Cb
그리고Cr
생성을위한 행렬 8 x 8- x 6 행렬:macroBlock = cat(3,L1,L2,L3,L4,Cb,Cr); %# OR... macroBlock = cat(3,luminance,Cb,Cr); %# Using luminance variable from above
그런 다음 색인 할 수 있습니다
macroBlock
다음과 같은 방법으로 무엇이든 접근 할 수 있습니다 8-8 필요한 행렬 :L2 = macroBlock(:,:,2); %# Get the second luminance matrix Cb = macroBlock(:,:,5); %# Get the Cb matrix
셀 어레이에 데이터 저장 :
모든 행렬은 크기가 같기 때문에 위의 연결 옵션이 가장 좋습니다. 그러나 또 다른 옵션 (다양한 크기, 유형 또는 차원의 데이터를 저장하려는 경우 특히 유용함)은 사용하는 것입니다. 셀 어레이. 다음은 a 1-6 상기 행렬을 포함하는 셀 어레이 :
macroBlock = {L1 L2 L3 L4 Cb Cr};
그런 다음 색인 할 수 있습니다
macroBlock
다음과 같은 방법으로 무엇이든 접근 할 수 있습니다 8-8 필요한 행렬 :L2 = macroBlock{2}; %# Get the second luminance matrix Cb = macroBlock{5}; %# Get the Cb matrix
구조로 데이터 저장 :
또 다른 옵션은 a를 사용하는 것입니다 구조 당신의 저장 8-8 매트릭스. 구조는 데이터에 액세스 할 수있는 이점이 있습니다. 필드 이름으로 인덱스 값을 기억하는 것과는 반대로. 구조를 초기화하는 방법은 다음과 같습니다.
macroBlock = struct('L1',L1,'L2',L2,'L3',L3,'L4',L4,'Cb',Cb,'Cr',Cr); %# OR... macroBlock = struct(); macroBlock.L1 = L1; macroBlock.L2 = L2; macroBlock.L3 = L3; macroBlock.L4 = L4; macroBlock.Cb = Cb; macroBlock.Cr = Cr;
위의 두 구문은 필드 이름을 가진 구조를 만듭니다.
'L1'
,'L2'
,'L3'
,'L4'
,'Cb'
, 그리고'Cr'
. 그런 다음 색인 할 수 있습니다macroBlock
다음과 같은 방법으로 무엇이든 접근 할 수 있습니다 8-8 필요한 행렬 :L2 = macroBlock.L2; %# Get the second luminance matrix Cb = macroBlock.Cb; %# Get the Cb matrix
다른 팁
나는 당신이 필요한 것을 얻지 못했습니다. 이미지를 해당 블록에 분할하는 코드?
당신이 만들어야 할 것은 매트릭스 I (i, j, m, n)입니다. 여기서 m, n은 이미지의 n 's and m'st 8x8 블록을 의미하고 i, j는 블록 내의 특정 픽셀을 나타냅니다.