2013-01-17 41 views
5

दोनों बाइट्स को पढ़ना मेरे पास एक बाइनरी बैंड अनुक्रमिक (1-बैंड, बीएसक्यू फ़ाइल) है, जो एक हस्ताक्षरित 16-बिट (2-बाइट) पूर्णांक है।MATLAB: एक असाइन किए गए 16-बिट बाइनरी फ़ाइल

वर्तमान में मैं multibandread के माध्यम से पूरे (छवि) पढ़ रहा हूँ:

img=multibandread('IMAGE.bsq',[400 400 1],'uint16',0,'bsq','n'); 

MATLAB में क्या प्रक्रिया मुझे दोनों को व्यक्तिगत रूप से बाइट्स पढ़ने के लिए अनुमति होगी? यानी मैं MATLAB में फ़ाइल को 2 नए सरणी में पढ़ना चाहता हूं उदा। बाइट 1 (400x400x1) और बाइट 2 (400x400x1)।

क्या यह fread के माध्यम से हासिल किया जा सकता है? मैं 'सटीक' खंड में नोट करता हूं कि स्रोत मानों को छोड़ना संभव है (उदा। 'N*source=>output'), लेकिन मुझे सटीक प्रक्रिया के बारे में अनिश्चितता है।

+0

क्या आपने 'uint16 'के बजाय' uint8'' निर्दिष्ट करने का प्रयास किया, परिणाम प्राप्त किया और फिर इसे दो छवियों में विभाजित किया? या वैकल्पिक रूप से बिटवायर ऑपरेशंस का उपयोग कर अपने वर्तमान परिणाम को दो छवियों में विभाजित कर रहे हैं? –

+0

मुझे 'uint16' सरणी से दोनों बाइट निकालने की आवश्यकता है - इसे 'uint8' के रूप में पढ़ना होगा? (हालांकि मैं दूसरे बाइट में निहित डेटा में अधिक रुचि रखता हूं) – MBL

उत्तर

4

एक तरीका आपके मौजूदा img को बिटवाई ऑपरेशंस के साथ विभाजित करेगा। LSB छवि होगा:

img1 = bitand(img, 255); %// 0x00FF 

और MSB छवि होगा:

img2 = bitsra(img, 8); 

अनिवार्य नहीं है, लेकिन हो सकता है आप भी uint8 रों में इन परिवर्तित करने के लिए चाहता हूँ:

img1 = uint8(img1); 
img2 = uint8(img2); 
+2

'img2 = बिट्सरा (आईएमजी, 8); 'बेहतर होगा। –

+2

ऐसा लगता है कि ऐसा किया गया है। मैं केवल एमएसबी में वास्तव में रूचि रखता हूं जो ऐसा लगता है कि यह 'img1 = bitand (ए, 255) का उपयोग करके उचित मूल्यों के साथ आता है; % // 0x00FF'। चीयर्स – MBL

+0

@BenVoigt सुधार के लिए धन्यवाद! –

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

  • कोई संबंधित समस्या नहीं^_^