2010-08-26 16 views
6

मुझे एक माइक्रोप्रोसेसर से आरजीबी मैट्रिक्स मिल रहा है जो आरजीबी 565 प्रारूप में एक छवि आउटपुट करता है। मैं इसे MATLAB में पढ़ना चाहता हूं, इसे आरजीबी 24 प्रारूप में परिवर्तित करना चाहता हूं, और छवि को आउटपुट करना चाहता हूं। मैं यह कैसे करु?MATLAB में RGB565 और RGB24 छवि प्रारूपों के बीच मैं कैसे परिवर्तित कर सकता हूं?

+0

आप [IMREAD] का उपयोग कर MATLAB में अपने RGB565 छवि पढ़ने की कोशिश की है (http://www.mathworks.com/access/helpdesk /help/techdoc/ref/imread.html)? जब आप ऐसा करते हैं तो 'X' और' map' के लिए कौन सी जानकारी सूचीबद्ध होती है ?: '[X, map] = imread (' your_file.bmp '); whos' – gnovice

+0

कोई फ़ाइल नहीं है। bmp। यह यूपी – NewImageUser

+0

से कच्चे आरजीबी मूल्य आ रहा है ठीक है, तो आप इन मानों को MATLAB में कैसे प्राप्त कर रहे हैं? यदि आप पहले से ही उन्हें एक चर में रखने में कामयाब रहे हैं, तो वेरिएबल प्रकार क्या हैं? क्या यह uint16 है? – gnovice

उत्तर

8

आप पहली बार MATLAB में एक मैट्रिक्स में पाठ फ़ाइल से अपने डेटा को पढ़ने के लिए। चूंकि मुझे नहीं पता कि आपकी टेक्स्ट फ़ाइल किस प्रारूप में है, मैं केवल यह सुझाव दे सकता हूं कि आपको अपने सभी मानों में पढ़ने के लिए शायद fscanf फ़ंक्शन का उपयोग करने की आवश्यकता होगी (शायद uint16 टाइप करें), तो आपको संभवतः फिर से दोबारा बदलना होगा फंक्शन reshape का उपयोग कर एन-बाय-एम छवि मैट्रिक्स में मान।

मान लीजिए कि आपने यह सब किया है, और अब आपके पास हस्ताक्षर किए गए 16-बिट पूर्णांक के एन-बाय-एम मैट्रिक्स img हैं।

alt text

इसके बाद, आप फ़ंक्शन का उपयोग कर सकते हैं: सबसे पहले, आप, लाल, हरे और नीले घटकों, जिसका 16-बिट पूर्णांक में पदों यहां दर्शाए गए हैं के लिए बिट्स निकालने के लिए समारोह bitand उपयोग कर सकते हैं bitshift और लाल, हरे, और नीले मानों को 0 से 255 तक सीमित करने के लिए स्केल कारक द्वारा गुणा करके उन्हें uint8 फ़ंक्शन का उपयोग करके एक हस्ताक्षरित 8-बिट पूर्णांक में परिवर्तित करें। तो

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 

अब आप एक एन-दर-एम-दर-3 आरजीबी छवि मैट्रिक्स में तीन रंग घटकों डाल करने के लिए समारोह cat उपयोग कर सकते हैं, यह आप तीन रंग घटक दे देंगे img के रूप में एक ही आकार के matrices

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

उदाहरण:: समारोह imwrite का उपयोग कर एक RGB24 बिटमैप फ़ाइल करने के लिए छवि को बचाने

का प्रयोग यादृच्छिक रूप से जनरेट 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

+0

वाह महान जवाब! यह वास्तव में मदद की! – NewImageUser

2

आरजीबी 565 का अर्थ है 5 बिट लाल, 6 बिट हरा और 5 बिट नीला। आरजीबी 24 8 बिट लाल, 8 बिट हरा और 8 बिट नीला से बना है।

बिगेट और बिटसेट का उपयोग करके आप अपना डेटा बदल सकते हैं।

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

+0

तो एक बार मैंने इसे आरजीबी 24 में परिवर्तित कर दिया है, तो मैं इसे मैटलैब को एक छवि के रूप में कैसे दिखा सकता हूं? – NewImageUser

+1

'imshow (rgbImage)' – Jonas

संबंधित मुद्दे

 संबंधित मुद्दे