项目场景:

读取一幅二进制(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

Logo

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

更多推荐