uu们!大家好,2025年的新年就要到来,咸鱼哥在这里祝大家在2025年每天开心快乐,天天挣大钱,自由自在,健健康康,万事如意!(要是咸鱼哥嘴笨的话,还望大家多多包涵!因为咸鱼哥不太机灵。。。没办法(单纯就是不太会表达自己的意思,所以过年不太讨喜emmm...))在本章,咸鱼哥主要是针对于锐化空间滤波的概念和方法来进行实验的操作和代码的讲解,uu们!我们开始本章实验吧!
一、基础知识
1.拉普拉斯变换(算子):
在数字图像处理中:
(实际上这个算式很好理解,在3*3的蒙板中,我们的中心为(x,y),而算式中的前四个就是和(x,y)四邻接的四个方块的值,实际上就是十字上的处中心的值相加,然后再减去中心(x,y)的4倍值就可以计算出来了。)
注:这个蒙板只是一个例子,并不是规定中心一定为负数,还有以下的形式,包括中心点为正,还有和不为零等情况。
增强方法:
2、sobel变换(算子):
二、具体要求
1、依据拉普拉斯算子,选用模板1~8对自选图(不能选图例1)进行锐化处理;依据Sobel算子选用模板9~10对自选图(不能选图例2)进行边缘检测。
2、应用拉普拉斯算子时,每种模板的对应输出图包 含“原图”、“依据模板X(X代表模板数)滤波后”、“拉普拉斯锐化后”3个子图,因此对于拉普拉斯锐化有8 个输出图,一共24个子图,每个子图都要有上述对 应的3个子图名。 应用Soble算子时,为1张输出图,包含3个子图:“原图”、“行检测”、“列检测”。
三、应用编程
输入透射CT(全身或局部)图像,设计一个算法流程, 进行层次化的图像增强,得到增强效果更好的结果图像。
要求如下:
1. 使用高斯滤波进行预处理,减少noise;
2. 使用拉普拉斯滤波进行细节增强;
3. 使用Sobel 边缘检测增强边缘;
4. 对比度受限的低对比度区域使用自适应直方图 均衡化提升对比度;
5. 用中值滤波去除噪声点;
6. 分析比较不同阶段的图像效果;
7. 将上述所有滤波方法进行优化组合获得增强图。
四、编程
img = imread('1.png'); % 替换为你的图像路径 % 从指定路径读取图像文件
img_gray = rgb2gray(img); % 转换为灰度图像 % 将读取的彩色图像转换为灰度图像
A=-8; % 定义一个变量A,用于后续模板中的计算
% 拉普拉斯模板(示例,你可以根据需要定义其他模板)
laplacian_templates = { % 定义一个cell数组,存储不同的拉普拉斯模板
[0 1 0; 1 -4 1; 0 1 0], % 模板1
[1 1 1; 1 -8 1; 1 1 1], % 模板2
[0 -1 0; -1 4 -1; 0 -1 0], % 模板3
[-1 -1 -1; -1 8 -1; -1 -1 -1], % 模板4
% 增强模板5(负中心,增强边缘检测效果)
[0 1 0; 1 (A-4) 1; 0 1 0], % 模板5,中心系数为A-4
% 增强模板6(负中心,同样增强边缘检测效果)
[1 1 1; 1 (A-8) 1; 1 1 1], % 模板6,中心系数为A-8
% 增强模板7(正中心,用于强调中心像素)
[0 -1 0; -1 (A+4) -1; 0 -1 0], % 模板7,中心系数为A+4
% 增强模板8(正中心,增强中心像素的影响)
[-1 -1 -1; -1 (A+8) -1; -1 -1 -1] % 模板8,中心系数为A+8
};
% 拉普拉斯算子处理并显示结果,每个模板一个窗口
for i = 1:length(laplacian_templates)
figure; % 创建新窗口 % 为每个模板的处理结果创建一个新的显示窗口
% 原图
subplot(1, 3, 1); % 在1行3列的子图中占据第1个位置
imshow(img_gray); % 显示灰度图像
title(['原图 - 模板' num2str(i)]); % 设置标题,显示当前处理的模板编号
% 依据模板滤波后
filtered_img = imfilter(double(img_gray), laplacian_templates{i}, 'same', 'replicate'); % 使用拉普拉斯模板进行滤波
subplot(1, 3, 2); % 在1行3列的子图中占据第2个位置
imshow(filtered_img, []); % 显示滤波后的图像,使用空矩阵[]自动调整显示范围
title(['依据模板' num2str(i) '滤波后']); % 设置标题
% 拉普拉斯锐化后
sharpened_img = double(img_gray) - filtered_img; % 通过原图减去滤波后的图像进行锐化
sharpened_img = uint8(sharpened_img); % 将结果转换为uint8类型
subplot(1, 3, 3); % 在1行3列的子图中占据第3个位置
imshow(sharpened_img); % 显示锐化后的图像
title(['拉普拉斯锐化后 - 模板' num2str(i)]); % 设置标题
end
结果:
应用代码:
% Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1]; % Sobel算子的x方向模板
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1]; % Sobel算子的y方向模板
% 行检测(注释说明了不推荐手动执行卷积操作的原因)
edge_x = imfilter(double(img_gray), sobel_x, 'same', 'replicate'); % 使用Sobel x方向模板进行滤波
edge_x = uint8(255 * mat2gray(edge_x)); % 将滤波结果归一化到0-255范围并转换为uint8类型
% 列检测(同理,使用Sobel y方向模板进行滤波)
edge_y = imfilter(double(img_gray), sobel_y, 'same', 'replicate'); % 使用Sobel y方向模板进行滤波
edge_y = uint8(255 * mat2gray(edge_y)); % 将滤波结果归一化到0-255范围并转换为uint8类型
% 显示结果
figure; % 创建一个新的显示窗口
% 原图
subplot(1, 3, 1); % 在1行3列的子图中占据第1个位置
imshow(img_gray); % 显示灰度图像
title('原图'); % 设置标题
% 行检测
subplot(1, 3, 2); % 在1行3列的子图中占据第2个位置
imshow(edge_x); % 显示行检测的结果
title('行检测'); % 设置标题
% 列检测
subplot(1, 3, 3); % 在1行3列的子图中占据第3个位置
imshow(edge_y); % 显示列检测的结果
title('列检测'); % 设置标题
结果:
代码:
% 读取CT图像
ct_img = imread('1.png'); % 替换为你的CT图像路径
ct_img_gray = rgb2gray(ct_img); % 转换为灰度图像
% 1. 使用高斯滤波进行预处理,减少噪声
filtered_img = imgaussfilt(ct_img_gray, 2); % 对灰度图像进行高斯滤波
% 2. 使用拉普拉斯滤波进行细节增强
laplacian_kernel = [0 -1 0; -1 4 -1; 0 -1 0]; % 拉普拉斯算子
detail_enhanced = imfilter(double(filtered_img), laplacian_kernel, 'same', 'replicate'); % 对滤波后的图像进行拉普拉斯滤波
detail_enhanced = double(filtered_img) - detail_enhanced; % 使用原图减去拉普拉斯滤波结果进行细节增强
detail_enhanced = uint8(detail_enhanced); % 转换为uint8类型
% 定义Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1]; % Sobel算子的x方向分量
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1]; % Sobel算子的y方向分量
% 3. 使用Sobel 边缘检测增强边缘
edge_x = imfilter(double(detail_enhanced), sobel_x, 'same', 'replicate'); % 对细节增强后的图像进行x方向Sobel滤波
edge_y = imfilter(double(detail_enhanced), sobel_y, 'same', 'replicate'); % 对细节增强后的图像进行y方向Sobel滤波
edge_magnitude = sqrt(edge_x.^2 + edge_y.^2); % 计算边缘强度
edge_magnitude = uint8(255 * (edge_magnitude - min(edge_magnitude(:))) / (max(edge_magnitude(:)) - min(edge_magnitude(:)))); % 归一化到0-255范围
% 4. 对比度受限的低对比度区域使用自适应直方图均衡化提升对比度
adapthisteq_img = adapthisteq(detail_enhanced); % 对细节增强后的图像进行自适应直方图均衡化
% 5. 用中值滤波去除噪声点
final_img = medfilt2(adapthisteq_img, [3 3]); % 对自适应直方图均衡化后的图像进行中值滤波
% 6. 分析比较不同阶段的图像效果
figure;
subplot(2, 3, 1);
imshow(ct_img_gray);
title('原图');
subplot(2, 3, 2);
imshow(filtered_img);
title('高斯滤波后');
subplot(2, 3, 3);
imshow(detail_enhanced);
title('拉普拉斯细节增强后');
subplot(2, 3, 4);
imshow(edge_magnitude);
title('Sobel边缘检测后');
subplot(2, 3, 5);
imshow(adapthisteq_img);
title('自适应直方图均衡化后');
subplot(2, 3, 6);
imshow(final_img);
title('最终增强图');
% 7. 将上述所有滤波方法进行优化组合获得增强图(已在上一步完成)
结果:
五、结语
uu们!本章实验的实验结果到此就结束了,临近春节,给自己放个假才让我们更好的去面对崭新的2025,uu们,下一章我们见!