项目场景:
读取一幅二进制(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.youkuaiyun.com/FX677588/article/details/53301740