2010-08-26 13 views
6

RGB565 biçiminde bir görüntü çıkaran bir mikroişlemciden bir RGB matrisi alıyorum. Bunu MATLAB'a okumak, RGB24 formatına dönüştürmek ve görüntüyü çıkarmak istiyorum. Bunu nasıl yaparım?MATLAB'da RGB565 ve RGB24 görüntü formatları arasında nasıl dönüştürebilirim?

+0

http://www.mathworks.com/access/helpdesk (eğer [IMREAD] kullanarak MATLAB içine RGB565 görüntüyü okuma denediniz /help/techdoc/ref/imread.html)? Bunu yaptığınızda 'X' ve' map' için hangi bilgiler listelenir ?: '[X, map] = imread ('your_file.bmp'); whos' – gnovice

+0

hiçbir dosya.bmp yoktur. Bu, bir uP – NewImageUser

+0

'dan gelen ham RGB değerleridir, peki bu değerleri MATLAB'a nasıl alıyorsunuz? Onları bir değişkene koymayı zaten başardıysanız, bu değişkenler ne tür? Uint16 mı? – gnovice

cevap

8

Önce MATLAB'da bir matris içine metin dosyasından veri okumak zorunda. Ben metin dosyası içinde ne biçim bilmiyorum, ben o zaman büyük olasılıkla yeniden şekillendirmek zorunda kalacak, muhtemelen (muhtemelen tip uint16 arasında) değerlerinizin tüm okumak için işlevini fscanf kullanmanız gerekecektir düşündürmektedir sadece edebilirsiniz reshape işlevini kullanarak N-by-M görüntü matrisine değerler.

Tüm bunları yaptığınızı varsayalım ve şimdi N-by-M matris img işaretsiz 16 bitlik tam sayılara sahip olursunuz.

alt text

Daha sonra, işlevini kullanabilirsiniz: Öncelikle, kimin pozisyonları 16 bit tamsayı burada gösterilmektedir, kırmızı, yeşil ve mavi bileşenler için bitlerini ayıklamak için işlevini bitand kullanabilirsiniz bitshift ve kırmızı, yeşil ve mavi değerleri 0 ila 255 aralığına ölçeklendirmek için bir ölçek faktörü ile çarpma, sonra uint8 işlevini kullanarak işaretsiz bir 8 bit tam sayıya dönüştürün. Daha sonra,

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 

Artık, bir N-ile-M-ile-3 RGB görüntü matrisi içine üç renk bileşenlerini koymak için işlev cat kullanabilir: Bu img aynı boyutta matrisler sen üç renk bileşeni verecek

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

Örnek: işlevi imwrite kullanarak bir RGB24 bitmap dosyası görüntü kaydetmek

kullanarak rasgele oluşturulmuş bir 100-by-100 UInt16 matrisi değerler ve yukarıdaki dönüşümleri uygulayarak, burada sonuçlarıdır:

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

Harika bir cevap ver! Gerçekten yardımcı oldu! – NewImageUser

İlgili konular