一、“类”:像素的“数据身份卡”🆔
关键字:数据类、uint8、double、像素值范围
🧠 你可以把“类”理解为像素的“数据格式标签”——不同标签对应不同的数值范围和存储方式~
课本里的核心概念:MATLAB 中图像的像素值对应不同 数据类,比如:
uint8:最常用!像素值范围是[0,255](占 1 字节,适合普通图像);uint16:范围[0,65535](占 2 字节,适合高精度图像,比如医学影像);double:浮点型,范围通常归一到[0,1](占 8 字节,适合计算)。
✋ 新手类比:就像“图片格式”——JPG 用 uint8 存(省空间),科研图像用 uint16 存(更精细),计算时转成 double(方便运算)。
☁️ 实践代码:查看图像的“类”(比如读入的图像 f):
% 查看 f 的像素数据类
>> class(f)
运行后会显示类似 'uint8' 的结果~
二、“图像类型”:图像的“功能分类名”📂
关键字:灰度图、二值图、RGB 图、索引图
🤖 图像类型是按“显示 / 用途”分的类别,工具箱包里的函数会根据类型“对症下药”~
课本里的 4 种核心类型:
- 灰度图:单通道,像素值表示“明暗程度”(比如黑白照片);
- 二值图:只有 0(黑)和 1(白)的逻辑图(比如文字轮廓);
- RGB 图:三通道(红 / 绿 / 蓝),彩色图像(比如手机拍的照片);
- 索引图:用“颜色表”映射的图像(较少见,比如早期游戏画面)。
✋ 二值图的特殊点:在 MATLAB 中,只有 logical 类的数组才算真正的二值图!比如把数值数组转成二值图:
% 假设 A 是只有 0 和 1 的数值数组
>> B = logical(A); % 转成 logical 类的二值图
>> islogical(B) % 验证是否是二值图,返回 1(是)
🧠 新手区分:打开手机相册——黑白照是灰度图,截图里的文字是二值图,自拍是 RGB 图~
三、“类 + 类型”:图像的“完整身份牌”🎫
关键字:类与类型的组合、函数兼容性
✨ 图像的“全称”是“类 + 类型”,比如“uint8 灰度图”——既说明像素格式,又说明用途~
课本里的术语说明:比如“uint8 灰度图”= 像素是 uint8 类 + 用途是灰度图;“logical 二值图”= 像素是 logical 类 + 用途是二值图。
✋ 实践坑点:很多函数对“类 + 类型”有要求!比如im2bw(转二值图)需要输入灰度图,且输出是 logical 类~
☁️ 复杂场景:类型转换(比如把 RGB 图转灰度图):
% 读入 RGB 图 f
>> f = imread('color_cat.jpg');
% 转成 uint8 灰度图 g
>> g = rgb2gray(f);
% 查看 g 的类和类型:class(g)是 uint8,类型是灰度图
四、实用工具:类与类型的“转换神器”🔄
关键字:mat2gray、im2uint8、logical
🛠️ 处理图像时经常要转换类 / 类型,这些函数是“转换开关”~
常用转换函数(新手必记):
mat2gray(A):把任意类的数组 A 转成 [0,1] 范围的 double 类灰度图(计算后常用);im2uint8(g):把 double 类的灰度图 g 转成uint8 类(方便保存);logical(A):把数值数组 A 转成logical 类二值图(非 0 转 1,0 保持 0)。
✋ 示例代码:把计算后的 double 图存成 uint8 图:
% 假设 h 是 double 类的计算结果(范围 0 -1)>> h_uint8 = im2uint8(h); % 转成 uint8 类
>> imwrite(h_uint8, 'result.jpg'); % 保存为 JPG