我想在 MATLAB 中打开并读取 .raw
图像。我的文件可以是downloaded here .我尝试了以下三个代码片段,但都没有给出预期的结果。
代码片段 #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 图像复制。
关于image - 如何在 MATLAB 中读取 RAW 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667140/