سؤال

أحصل على مصفوفة RGB من المعالج الدقيق الذي يخرج صورة بتنسيق RGB565. أريد قراءة هذا في MATLAB ، وتحويله إلى تنسيق RGB24 ، وإخراج الصورة. كيف أقوم بهذا العمل؟

هل كانت مفيدة؟

المحلول

عليك أولاً قراءة بياناتك من الملف النصي إلى مصفوفة في Matlab. بما أنني لا أعرف التنسيق الذي يوجد فيه ملفك النصي ، لا يمكنني إلا أن أقترح أنك ستحتاج على الأرجح إلى استخدام الوظيفة fscanf للقراءة في كل القيم الخاصة بك (ربما من النوع uint16) ، على الأرجح سيتعين عليك إعادة تشكيل القيم في مصفوفة صورة n-by-m باستخدام الوظيفة reshape.

لنفترض أنك فعلت كل ذلك ، ولديك الآن مصفوفة n-by-m img من أعداد صحيحة 16 بت غير موقعة. أولاً ، يمكنك استخدام الوظيفة bitand لاستخراج البتات للمكونات الحمراء والأخضر والأزرق ، والتي يتم توضيح مواقعها في عدد صحيح 16 بت هنا:

alt text

بعد ذلك ، يمكنك استخدام الوظيفة bitshift والضرب بعامل المقياس لتوسيع نطاق القيم الحمراء والأخضر والأزرق إلى نطاق من 0 إلى 255 ، ثم تحويلها إلى عدد صحيح غير موقعة 8 بت باستخدام الوظيفة uint8. سيعطيك هذا ثلاثة مصفوفات مكون من نفس الحجم img:

imgR = uint8((255/31).*bitshift(bitand(img, 63488), -11));  % Red component
imgG = uint8((255/63).*bitshift(bitand(img, 2016), -5));    % Green component
imgB = uint8((255/31).*bitand(img, 31));                    % Blue component

الآن يمكنك استخدام الوظيفة cat لوضع مكونات الألوان الثلاثة في مصفوفة صورة N-by-m-by-3-3 imwrite:

imgRGB = cat(3, imgR, imgG, imgB);  % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp');     % Output the image to a file

مثال:

باستخدام مصفوفة 100 × 100 من قيم UINT16 وتطبيق التحويلات أعلاه ، وهنا النتائج:

img = randi([0 65535], 100, 100, 'uint16');
% Perform the above conversions to get imgRGB
subplot(1, 2, 1);
imshow(img);
title('Random uint16 image');
subplot(1, 2, 2);
imshow(imgRGB);
title('Corresponding RGB image');

alt text

نصائح أخرى

RGB565 يعني 5 بت أحمر ، 6 بت أخضر و 5 بت الأزرق. RGB24 مصنوع من 8 بت أحمر ، 8 بت الأخضر والأزرق 8 بت.

باستخدام Bitget و BitSet يمكنك تحويل بياناتك.

http://www.mathworks.de/access/helpdesk/help/techdoc/ref/bitget.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top