matlab对二进制(uint16)图像的读取和显示
项目场景:读取一幅二进制(uint16)raw原始图像并对其进行显示,以便后续的图像处理工作matlab代码:fid = fopen("F:\jihe0001.raw",'r'); %默认是小端存储data = fread(fid,[2048 12294],'uint16');%大小是2048*12294,取第一个通道data1 = mat2gray(data); %mat2gray将double
·
项目场景:
读取一幅二进制(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

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)