✨ 第一部分:对数变换——把“爆炸”的亮度压缩成“温柔”的范围

关键字:对数变换、动态范围压缩、傅里叶频谱

🧠 初学者先想:你有没有见过一张图“亮的地方太亮,暗的地方啥也看不见”?比如拍夜景时,路灯亮得刺眼,周围黑成一片——这就是“动态范围太大”的问题。 内容详解: 📖 课本里说对数变换的公式是

g = c·log(1 + f)

(f是输入图像的灰度,c是常数)。咱们类比一下:就像把“1000ml的大桶奶茶”倒进“500ml的杯子”,得先“压缩”——对数能把

超大的数值范围(比如0到10⁶)缩小到很小的范围(比如0到14)

。 🤖 举个实践例子:傅里叶频谱(一种图像分析工具)的数值范围经常是0到10⁶,直接显示的话,只有最亮的点能看见(像图2.5(a)那样黑乎乎只剩一个白点)。但用对数变换后,就能把细节都“挤”出来(图2.5(b)能看到纹理啦)! 💻 代码怎么写?课本里给了MATLAB代码,咱们拆解给初学者:

% 步骤1:把图像转成浮点型(因为对数计算需要小数)
f_double = double(f);
% 步骤2:做对数变换(+1是避免log(0)出错)
log_result = log(1 + f_double);
% 步骤3:把结果缩放到0-1之间(mat2gray的作用),再转成8位图像(0-255)
g = im2uint8(mat2gray(log_result));
% 步骤4:显示结果
imshow(g);

☁️ 复杂情况:如果图像里有负数(比如某些处理后的结果),得先把数值“平移”到正数范围,再做对数变换哦!

👐 第二部分:对比度拉伸变换——让“模糊”的图像变“通透”

关键字:对比度拉伸、阈值化、S型曲线

🧠 初学者再想:你有没有拍过“灰蒙蒙”的照片,人像和背景糊在一起?对比度拉伸就是给图像“开美颜”——让暗的更暗、亮的更亮,把细节分开! 内容详解: 📖 课本里的对比度拉伸公式是

s = T(r) = 1 / [1 + (m/r)^E]

(r是输入灰度,m是中间灰度,E控制曲线斜率)。看一下图2.4(a)的S型曲线: → 当r比m小(暗部):(m/r)很大,分母很大,s接近0(更暗); → 当r比m大(亮部):(m/r)很小,分母接近1,s接近1(更亮); 这样就把“挤在一起的灰度”拉开了,图像对比度直接拉满! 🤖 极端情况:如果E特别大(比如E=20),曲线会变成“直角”——这就是

阈值化(图2.4(b))

:暗部直接变0,亮部直接变1,图像变成黑白二值图(比如把文字从背景里抠出来)。 💻 代码实践(MATLAB):

% 假设m是图像的平均灰度,E设为5(可调整)
m = mean2(double(f)); % 计算图像平均灰度
E = 5;
% 做对比度拉伸(注意f不能为0,否则m/r会出错)
g = 1 ./ (1 + (m ./ double(f)).^E);
% 转成8位图像并显示
g = im2uint8(mat2gray(g));
imshow(g);

☁️ 现实应用:拍医学影像(比如X光片)时,经常用对比度拉伸让病灶(暗的或亮的区域)更明显;监控摄像头的“夜视增强”功能,核心也是类似的变换!

🎯 总结:这俩变换咋选?

→ 当图像“数值范围太大,细节挤在一起”:用对数变换压缩范围; → 当图像“灰蒙蒙,对比度低”:用对比度拉伸拉开层次; 就像调奶茶:太甜了加冰(对数压缩),没味道了加糖(对比度拉伸)——最终都是为了“好喝”(好看)!