1.灰度上的伪彩色增强
设计思路
我们通过使用特定的三角函数将灰度值映射到RGB颜色空间,以增强图像的可视化效果。使用三角函数是因为它们能够根据灰度值的变化平滑地调整每个颜色通道的强度,从而在视觉上区分不同的灰度级别。
实现方法
在Matlab中,首先读入一个灰度图像,然后创建三个与原图像同样大小的矩阵,分别对应R、G、B通道。根据灰度值,计算每个像素的RGB值:蓝色通道使用 cos 函数的前1/4周期,红色通道使用 sin 函数的前1/4周期,绿色通道使用 sin 函数的前1/2周期。我们可以对这些映射做适当的放缩。最后,将这三个矩阵合成为一个彩色图像并显示。
Matlab代码
% 读入图像
I = imread('G.png');
gray = rgb2gray(I); % 确保图像是灰度的
% 初始化RGB三个通道
[R, G, B] = deal(zeros(size(gray)));
% 确保运算的统一性,转换为double类型
gray_double = double(gray);
max_gray = double(max(gray(:)));
% 计算RGB各通道的值
R = sin(pi * gray_double / max_gray / 2.2);
G = sin(pi * gray_double / max_gray / 1.2);
B = cos(pi * gray_double / max_gray / 2.2);
% 合成彩色图像
pseudo_color_image = cat(3, R, G, B);
% 显示原图和伪彩色增强图像
figure;
subplot(1, 2, 1); % 创建1行2列的子图,这是第1个
imshow(I);
title('原始图像');
subplot(1, 2, 2); % 创建1行2列的子图,这是第2个
imshow(pseudo_color_image);
title('伪彩色增强图像');
% 定义灰度值的范围
gray_scale = linspace(0, 255, 256); % 创建一个从0到255的线性空间,256个点
% 计算映射函数
R_func = sin(pi * gray_scale / max(gray_scale) / 2.2);
G_func = sin(pi * gray_scale / max(gray_scale) / 1.2);
B_func = cos(pi * gray_scale / max(gray_scale) / 2.2);
% 绘制映射函数图
figure;
hold on;
plot(gray_scale, R_func, 'r', 'LineWidth', 2); % 红色曲线
plot(gray_scale, G_func, 'g', 'LineWidth', 2); % 绿色曲线
plot(gray_scale, B_func, 'b', 'LineWidth', 2); % 蓝色曲线
legend('Red Channel', 'Green Channel', 'Blue Channel');
xlabel('Gray Scale Value');
ylabel('Channel Intensity');
title('Channel Mapping Functions');
grid on;
hold off;
效果
2.频域上的伪彩色增强
设计思路
在频域上的伪彩色增强中,目的是通过将频率分布不同区域的信息映射到不同的颜色,从而加强图像特定频率成分的视觉识别。使用调制的逻辑斯蒂增长和衰减函数来调整不同频率成分的颜色强度,以便在视觉上可以更明显地区分高频和低频信息。
实现方法
首先通过傅里叶变换将图像转换到频域,然后根据频率的高低使用不同的sigmoid函数映射到RGB颜色空间的不同通道。最后,将这些映射后的颜色信息合并回图像数据中,并逆傅里叶变换回空间域,生成最终的伪彩色增强图像。
Matlab代码
% 读入灰度图像
I = imread('G.png');
gray = rgb2gray(I);
% 应用傅里叶变换
F = fftshift(fft2(double(gray)));
magnitude = abs(F); % 获取幅度信息
phase = angle(F); % 获取相位信息
% 计算频率对应的行和列
[x, y] = meshgrid(linspace(-50, 50, size(gray, 2)), linspace(-50, 50, size(gray, 1)));
freq = sqrt(x.^2 + y.^2);
% 设置映射函数参数
a = 0.2;
b = 0.01;
k = 10;
% 映射函数
% 红色通道:递减
R = 1 ./ (1 + exp(a * (r - k)));
% 蓝色通道:递增
B = 1 ./ (1 + exp(-a * (r - k)));
% 绿色通道:递增后递减
G = exp(-b * (r - k).^2);
% 应用映射函数到幅度上并重建频域图像
RF = R .* magnitude .* exp(1i * phase);
GF = G .* magnitude .* exp(1i * phase);
BF = B .* magnitude .* exp(1i * phase);
% 逆傅里叶变换回空间域,每个通道分别变换
R_channel = abs(ifft2(ifftshift(RF)));
G_channel = abs(ifft2(ifftshift(GF)));
B_channel = abs(ifft2(ifftshift(BF)));
% 归一化每个通道到0-1范围
R_channel = mat2gray(R_channel);
G_channel = mat2gray(G_channel);
B_channel = mat2gray(B_channel);
% 合成彩色图像
pseudo_color_image = cat(3, R_channel, G_channel, B_channel);
% 显示原始和各通道的灰度图,以及合成图
figure;
subplot(2, 3, 1);
imshow(gray);
title('Original Gray Image');
subplot(2, 3, 2);
imshow(R_channel);
title('Red Channel');
subplot(2, 3, 3);
imshow(G_channel);
title('Green Channel');
subplot(2, 3, 4);
imshow(B_channel);
title('Blue Channel');
subplot(2, 3, 5);
imshow(pseudo_color_image);
title('Pseudo-Color Image');
% 绘制映射函数图
figure;
hold on;
plot(linspace(0, 100, 10000), 1 ./ (1 + exp(a * (linspace(0, 100, 10000) - k))), 'r', 'LineWidth', 2); % 红色递减
plot(linspace(0, 100, 10000), 1 ./ (1 + exp(-a * (linspace(0, 100, 10000) - k))), 'b', 'LineWidth', 2); % 蓝色递增
plot(linspace(0, 100, 10000), exp(-b * (linspace(0, 100, 10000) - k).^2), 'g', 'LineWidth', 2); % 绿色递增后递减
legend('Red Decay', 'Blue Growth', 'Green Growth and Decay');
xlabel('Normalized Frequency')
ylabel('Channel Intensity');
title('Color Mapping Functions');
grid on;
hold off;
效果
3.真彩色增强
设计思路
真彩色增强的设计思路基于对彩色图像的 HSI (色相 H, 饱和度 S, 亮度 I) 分量的单独处理,以增强图像的视觉效果。通过转换图像到 HSI 色彩空间,我们可以单独调整色相、饱和度和亮度,从而在不影响其他颜色属性的情况下增强特定的视觉特征。色相调整可以改变图像的色调,饱和度调整可以使颜色更加鲜明或更加柔和,而亮度调整可以改变图像的明暗程度。
实现方法
- 转换到 HSI 色彩空间:首先将输入的 RGB 彩色图像转换到 HSI 色彩空间。
-
增强 HSI 分量:
- 色相 (H) 调整:通过对色相分量进行轻微旋转(例如增加或减少一定角度),可以改变图像的总体色调。
- 饱和度 (S) 增强:通过提高饱和度值,使图像的颜色更加鲜艳。
- 亮度 (I) 增强:调整亮度分量,可以使图像看起来更亮或更暗,根据需要调整。
-
转换回 RGB 色彩空间:对每个增强后的 HSI 分量独立地转换回 RGB 色彩空间,从而观察每种增强效果对最终图像的影响。
Matlab代码
original_img = imread("B.jpg");
% 转换到 HSI 色彩空间
hsi_img = rgb2hsv(original_img);
% 色相 (H) 调整
hue_shift = 50;
hue_adjusted_img = hsi_img;
hue_adjusted_img(:,:,1) = mod(hsi_img(:,:,1) + hue_shift, 1);
% 饱和度 (S) 增强
saturation_factor = 2;
saturation_adjusted_img = hsi_img;
saturation_adjusted_img(:,:,2) = min(hsi_img(:,:,2) * saturation_factor, 1); % 饱和度不超过 1
% 亮度 (I) 增强
brightness_factor = 1.5;
brightness_adjusted_img = hsi_img;
brightness_adjusted_img(:,:,3) = min(hsi_img(:,:,3) * brightness_factor, 1); % 亮度不超过 1
% 转换回 RGB 色彩空间
hue_adjusted_rgb = hsv2rgb(hue_adjusted_img);
saturation_adjusted_rgb = hsv2rgb(saturation_adjusted_img);
brightness_adjusted_rgb = hsv2rgb(brightness_adjusted_img);
% 显示原始图像和增强后的图像
subplot(2,2,1), imshow(original_img), title('原图');
subplot(2,2,2), imshow(hue_adjusted_rgb), title('色相调整');
subplot(2,2,3), imshow(saturation_adjusted_rgb), title('饱和度增强');
subplot(2,2,4), imshow(brightness_adjusted_rgb), title('亮度增强');