ضغط MPEG-1 - إنتاج ماكينات كهرباء
-
13-09-2019 - |
سؤال
أنا عالق مع مشكلة أساسية في ضغط MPEG-1 الخاص بي. لا بد لي من إنتاج ماكينات ماكيين داخل الصورة. يتكون Macroblock من 16 × 16 بكسل - حيث 4 × 8x8 هو الإنارة، 1 × 8x8 هو CB و 1 × 8x8 كر. في MATLAB أريد إنتاج مصفوفة خلية تحتوي على هذا. أي اقتراحات؟
المحلول
يبدو أنك تحاول معرفة أفضل طريقة لجمع مختلف 8-8 مصفوفات في متغير واحد. هناك بعض الطرق التي يمكنك القيام بها (مع كون الخيار الأول الذي سأختاره لحالتك):
قم بتسليم البيانات إلى مصفوفة ثلاثية الأبعاد:
يمكنك استعمال ال قطة وظيفة إلى مصفوفات كومة من نفس الحجم على طول بعد معين. على سبيل المثال، إذا كان لديك 4 الخاص بك 8-8 مصفوفات الإنارة في المتغيرات
L1
,L2
,L3
, ، وL4
, ، سوف يلقي ما يلي في 8-8-8--4 مصفوفة:luminance = cat(3,L1,L2,L3,L4);
يمكنك أيضا إضافة الإضافية
Cb
وCr
المصفوفات لإنشاء 8--8-8-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
تخزين البيانات في صفيف خلية:
نظرا لأن جميع المصفوفات الخاصة بك هي نفس الحجم، فإن خيار التسليط أعلاه ربما هو الأفضل. ومع ذلك، خيار آخر (وهو مفيد بشكل خاص إذا كنت ترغب في تخزين بيانات مختلفة الحجم أو النوع أو البعد) هو استخدام صفائف الخلية. وبعد مما يلي يخلق 1 -6-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
تخزين البيانات في هيكل:
خيار آخر هو استخدام بنية لتخزين الخاص بك 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'th و m'th 8x8 من الصورة، و j يشير إلى بكسل معين داخل الكتلة.