类和图像类型 🎨 给图像“贴标签”:像素的“身份卡”与图像的“类型名”

226次阅读

一、“类”:像素的“数据身份卡”🆔

关键字:数据类、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
正文完
 0