matlab对二进制(uint16)图像的读取和显示

项目场景:

读取一幅二进制(uint16)raw原始图像并对其进行显示,以便后续的图像处理工作


matlab代码:

fid = fopen("F:\jihe0001.raw",'r'); %默认是小端存储
data = fread(fid,[2048 12294],'uint16');%大小是2048*12294,取第一个通道
data1 = mat2gray(data); %mat2gray将double数据归一化到[0 1]
data2 = data1*255; %反归一化,映射到[0 255]
% data2 = im2uint8(data1);round(data1*255)等价
figure,imshow(data2);%显示

% 也可以使用以下的方式读取,原始图像为8个通道
inputimg = multibandread('F:jihe0001.raw',[12294,2048,8],'uint16',0,'bsq','ieee-le' );

遇到的问题:

  • im2uint8(data1)round(data1*255)等价的前提是data1为[0 1]的double类型矩阵。
  • uint8(I)会将大于255的元素全部赋值为255,如果直接用uint8()将16位转化为8位会产生信息丢失。

关于mat2gray、im2uint8、uint8、double、mat2double函数的详细描述可以参考https://blog.csdn.net/FX677588/article/details/53301740

你可能感兴趣的:(问题解决,matlab)