函数imadjust和stretchlim 🎨 给图像“调调色”:灰度变换的“魔法工具”

252次阅读

一、imadjust:灰度变换的“手动调色盘”🎛️

关键字:imadjust、灰度映射、gamma 参数、亮度 / 对比度调整

🧠 类比:就像手机里的“亮度 / 对比度”滑块——你可以手动指定“哪些灰度对应哪些新值”~

课本里的基础语法:

g = imadjust(f, [low_in high_in], [low_out high_out], gamma)

各参数的作用:

  • f:输入图像;
  • [low_in high_in]:输入图像中要处理的灰度范围(默认[0 1]);
  • [low_out high_out]:映射后的新灰度范围(默认[0 1]);
  • gamma:映射曲线的“弯曲程度”(默认 1,即线性映射)。

✋ 新手必试案例(课本例 2.1):

  1. 明暗反转(负片):把亮的变暗、暗的变亮
    % 输入[0 1]→输出[1 0],实现反转
    >> g1 = imadjust(f, [0 1], [1 0]);

    (也可以用 g = imcomplement(f) 直接实现~)

  2. 灰度扩展:把感兴趣的灰度范围放大(比如[0.5 0.75]→[0 1])
    % 突出 0.5 到 0.75 之间的细节
    >> g2 = imadjust(f, [0.5 0.75], [0 1]);
  3. gamma 调整:调亮 / 调暗图像(gamma<1 调亮,gamma>1 调暗)
    % gamma=2,压缩暗部、扩展亮部(图像变暗)>> g3 = imadjust(f, [], [], 2);

☁️ 注意:imadjust 的输入范围是[0 1](不管 f 是 uint8 还是 double)——比如 uint8 的 255 对应 1,0 对应 0。

二、stretchlim:自动找“调色范围”的“智能助手”🤖

关键字:stretchlim、自动对比度、tol 参数

✋ 手动调范围太麻烦?stretchlim 能自动找出“最适合的灰度范围”,让对比度最大化~

课本里的基础语法:

Low_High = stretchlim(f)

作用:返回一个 自动计算的灰度范围(默认去掉最暗和最亮的 1% 像素,避免极端值干扰)。

✋ 自动对比度调整(结合 imadjust):

% 步骤 1:自动找最佳范围
>> LH = stretchlim(f);
% 步骤 2:用这个范围做 imadjust,自动增强对比度
>> g = imadjust(f, LH, []);

效果:图像的细节会更清晰(比如课本图 2.3(e))。

🧠 进阶:用 tol 参数自定义“去掉的极端值比例”:

% tol=[0.02 0.98],去掉最暗 2% 和最亮 2% 的像素
>> LH = stretchlim(f, [0.02 0.98]);

若 tol 是标量(比如 tol=0.01),则去掉最暗 1% 和最亮 1%(即 low_frac=0.01,high_frac=0.99)。

三、实战:从“灰蒙蒙”到“清清爽爽”的图像增强 🌟

✨ 完整流程:读入暗图→自动找范围→imadjust 增强→显示对比

% 1. 读入一张偏暗的图像(比如 f)>> f = imread('dark_img.jpg');
% 2. 转成 double 类(方便计算)>> f_double = im2double(f);
% 3. 自动找最佳灰度范围
>> LH = stretchlim(f_double);
% 4. 用 imadjust 增强对比度
>> g_double = imadjust(f_double, LH, []);
% 5. 转回 uint8 并显示
>> g = im2uint8(g_double);
>> imshowpair(f, g, 'montage'); % 并排显示原图和增强图

四、新手总结:imadjust+stretchlim 的“使用场景”📝

  • 手动调亮 / 调暗:用 imadjust+gamma 参数;
  • 突出某段灰度细节:用 imadjust 指定[low_in high_in];
  • 一键增强对比度:用 stretchlim 自动找范围 +imadjust。
正文完
 0