簡體   English   中英

如何在MATLAB中讀取RAW圖像?

[英]How can I read in a RAW image in MATLAB?

我想在MATLAB中打開並讀取.raw圖像。 我的文件可以在這里下載 我嘗試了以下三個代碼片段,但都沒有給出預期的結果。

代碼片段#1

    row=576;  col=768;
    fin=fopen('m-001-1.raw','r');
    I=fread(fin,row*col,'uint8=>uint8'); 
    Z=reshape(I,row,col);
    Z=Z';
    k=imshow(Z);

它顯示了這張圖片:

第一

代碼片段#2

    f=fopen('m-001-1.raw');
    a=fread(f);
    input_img = reshape(a,768, 576, 3);
    input_img = imrotate(input_img, -90);
    imwrite(input_img, 'm-001-1.jpg'); 

這將以.jpg格式保存空白(僅白色)圖像。

代碼片段#3

    id = fopen('m-001-1.raw', 'r');
    x = fread(id, [576,768], 'short');

當我使用imshow(x) ,這張圖片顯示:

第三

如何正確閱讀此圖片?

您的行/列大小相反。 由於MATLAB數組是列主要的,並且光柵圖像通常存儲為行主要,因此您需要將圖像作為[col row]矩陣讀取,然后轉置它。

row=576;  col=768;
fin=fopen('m-001-1.raw','r');
I=fread(fin, [col row],'uint8=>uint8'); 
Z=I';
k=imshow(Z)

圖像復制正在發生,因為每行短768-576 = 192像素,因此每行都會逐漸關閉該行。 在4行之后,你已經彌補了差異(4 * 192 = 768),因此你有一個4圖像復制。

彼得的代碼(謝謝btw!)假設你的圖像是灰度的。 對於彩色圖像,您需要做的是將所有字節作為單個1D數組讀取,因為我們不能使用fread來讀取數據作為3D矩陣(至少不是我所知......)。 然后,我們重新塑造它,使其成為3D矩陣。 在我們重新整形矩陣之后,請注意這是轉置結果。 因此,我們必須獨立地轉換每個通道,或者您可以巧妙地組合flipdimimrotate為我們進行3D轉置。 我會旋轉圖像,使其順時針旋轉90度,但這會使圖像鏡像反射到列上。 然后我使用flipdim和第二個參數為2因為我希望鏡像反射在列上以獲得原始圖像。

因此,您實際需要做的是:

row=576;  col=768;
fin=fopen('m-001-1.raw','r');
I=fread(fin, col*row*3,'uint8=>uint8'); %// Read in as a single byte stream
I = reshape(I, [col row 3]); %// Reshape so that it's a 3D matrix - Note that this is column major
Ifinal = flipdim(imrotate(I, -90),2); % // The clever transpose
imshow(Ifinal);
fclose(fin); %// Close the file

我得到的是這張圖片:

在此輸入圖像描述


或者,您當然可以使用Peter的代碼,但您可以使用它,以便您可以一次重建一個顏色平面的圖像。 換句話說,你可以這樣做:

row=576;  col=768;
fin=fopen('m-001-1.raw','r');
I1=fread(fin, [col row],'uint8=>uint8'); %// Red channel
I2=fread(fin, [col row],'uint8=>uint8'); %// Green channel
I3=fread(fin, [col row],'uint8=>uint8'); %// Blue channel
I1 = I1.'; I2 = I2.'; I3 = I3.'; %// Transpose each channel separately
Ifinal = cat(3, I1, I2, I3); %// Create 3D matrix
imshow(Ifinal);
fclose(fin);

您將獲得與上面完全相同的圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM