如何在MATLAB中读取RAW图像?

Sim*_*our 3 matlab image image-processing

我想.raw在MATLAB中打开并读取图像.我的文件可以在这里下载.我尝试了以下三个代码片段,但都没有给出预期的结果.

代码片段#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);
Run Code Online (Sandbox Code Playgroud)

它显示了这张图片:

第一

代码片段#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'); 
Run Code Online (Sandbox Code Playgroud)

这样可以以.jpg格式保存空白(仅白色)图像.

代码片段#3

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

当我使用时imshow(x),这张照片显示:

第三

如何正确阅读此图片?

Pet*_*ter 6

您的行/列大小相反.由于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)
Run Code Online (Sandbox Code Playgroud)

图像复制正在发生,因为每行短768-576 = 192像素,因此每行都会逐渐关闭该行.在4行之后,你已经弥补了差异(4*192 = 768),因此你有一个4图像复制.