Matlab读和写图像需要注意的问题

图像处理基础教程
本文介绍了图像处理中的基本操作,包括读取、显示和保存图片的方法,并详细解释了如何调整图片的灰度级及JPEG和TIFF格式图片的质量与分辨率。

(本人注:尤其是最后一行的imwrite,参数缺一不可。)


1.读入图片:imread('filename')

如:f=imread('chest.jpg');

注意:1.括号内为单引号,注意与C区分

2.命令行最后为冒号,否则会吃苦头的哦,呵呵

3.保证图片chest.jpg在当前目录下,否则要给出图片的完全路径

如:f=imread('D:\myimages\chest.jpg');

4.filename后要跟图片格式后缀。

2.显示图片:imshow(f,[ ])

注:上述为推荐使用方式,即使用imshow(f),也可以,二者之间的区别可以从下面两幅图的显示上看出

imshow(f)imshow(f,[ ])

第一幅图片的灰度级较小,而,通过imshow(f,[ ])后它的灰度级范围得到拉伸。

imshow(f,[ ])是imshow(f,[ min  high])的特例,即将f的实际最小对应到min,而其最大灰度级对应到max。

而对于f中小于等于min的灰度级显示为黑色,大于等于max的灰度级显示为白色。

3.写入图片:imwrite(f,'filename')

其中对于JEPG格式的图片有

imwrite(f,'filename.jpg','quality',q)               0<=q<=100

下面看一个简单的小程序:

for q=0:5:100

filename=sprintf('series_%3d.jpg',q);

imwrite(f,filename,'quality',q);

end

此程序写入quality=0,5,10.......共21种quality的图片,下面看下quality分别为0、5、15、25、50以及原图的显示

其中对于TIF格式的图片有:

imwrite(g,'filename.tif','compression','parameter','resolution',[colres   rowres])

注:compression:压缩比率

parameter:none/packbits/ccitt

resolution:分辨率

例如:原始图片为:jpg格式,200dpi,450*450

由450/200=2.25,知 宽*高=2.25*2.25,要使其变为宽*高=1.5*1.5,不损失pixels,知compression为none

resolustion=200*2.25/1.5=300

于是:  imwrite(f,'jinpeng.tif','compression','none','resolution',[300 300])

也可以如下显示:

res=round(200*2.5/1.5);

imwrite(f,'jinpeng.tif','compression','none','resolution',res);

### 使用 MATLAB 取 14-bit 红外图像 对于处理特定深度的图像文件,如14位深度的红外图像,在MATLAB中有多种方式可以实现取操作。通常情况下,这类图像可能不会直接被支持为常见的图像格式(例如JPEG或PNG),而是以更专业的格式保存,比如TIFF或其他专有格式。 如果这些14位深度的红外图像是以TIFF格式存储,则可以直接利用`imread`函数来加载它们,并通过指定合适的参数确保正确解释其位深: ```matlab % 假设文件名为 'infrared_image.tif' filename = 'path_to_your_file/infrared_image.tif'; img = imread(filename, 'tiff', 'BitDepth', 14); ``` 然而,当面对非标准格式的数据集时——特别是那些由特殊硬件产生的数据——往往需要更加定制化的解决方案。这涉及到理解所使用的成像系统的具体细节以及它如何编码像素值到文件中去。例如,某些设备可能会将原始传感器输出写入二进制文件而没有任何头部信息指示每条记录代表什么类型的数值[^1]。 在这种情形下,为了能够成功导入并解析这样的二进制流作为有效的图像表示形式,就需要知道确切的信息,诸如字节序(big-endian还是little-endian)、每个样本占用多少比特数、是否有任何偏移量或者其他预处理步骤等。一旦掌握了上述必要条件之后,就可以编相应的代码片段来进行解码工作了: ```matlab fid = fopen('your_binary_data.bin','r'); % 打开二进制文件准备只模式 if fid == -1 error('无法打开文件'); end try width = ...; height = ... ; % 设置宽度高度 bitdepth = 14; bytesPerSample = ceil(bitdepth / 8); % 计算所需字节数 rawdata = fread(fid,width*height,'uint8=>uint16')'; % 按无符号整型取全部内容 fclose(fid); img = reshape(rawdata,height,width); % 调整形成为二维数组 catch ME disp(['Error occurred while reading file: ',ME.message]); finally if isfileopen(fid) fclose(fid); end end ``` 值得注意的是,这段脚本假设输入是一个连续排列的一维向量,并且按照列优先顺序填充到了最终形成的矩阵里。实际应用当中还需要考虑更多因素,包括但不限于校正曲线的应用、坏点修复算法等等[^3]。 另外,考虑到ENVI软件常用于处理高光谱影像数据的情况,其中提到的标准HDR/DAT组合也可能是适用的选择之一。尽管DAT文件看起来像是不可辨认的内容,但在配合对应的HDR描述文件后,可以通过专用工具包轻松转换为可分析的形式。不过针对当前讨论的主题而言,除非确认目标文件确实遵循此类结构,否则不必特别关注这一点[^2]。 最后提醒一点,由于不同的制造商可能采用各异的方法来打包他们的产品生成的结果,因此最可靠的做法始终是从官方文档获取指导说明或是联系技术支持团队寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值