如果您想先进行低频滤波,再对图像进行高频增强,可以按照以下步骤实现:
低频滤波:可以使用高斯模糊(Gaussian Blur)来去除图像中的高频噪声。这个过程将平滑图像并保留主要的轮廓信息。
高频增强:在此基础上,使用拉普拉斯算子提取高频部分,并将其与低通滤波后的图像相结合。
以下是代码示例:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
// 读取输入图像
Mat image = imread("Data/img_test_out/1.第一面正视图/1-1.bmp", IMREAD_GRAYSCALE);
if (image.empty()) {
cerr << "Error: Could not open or find the image!" << endl;
return -1;
}
// 进行低频滤波(高斯模糊)
Mat lowPassImage;
GaussianBlur(image, lowPassImage, Size(5, 5), 0);
// 创建输出图像用于存储拉普拉斯结果
Mat laplacianImage;
// 应用拉普拉斯算子获取高频信息
Laplacian(image, laplacianImage, CV_16S, 3);
// 转换为可显示的8位格式
Mat absLaplacianImage;
convertScaleAbs(laplacianImage, absLaplacianImage);
// 增强高频部分(将原始图和拉普拉斯结果相加)
Mat enhancedImage;
double alpha = 0.5; // 低频权重(原始平滑图权重)
double beta = 0.5; // 高频权重(可调节)
addWeighted(lowPassImage, alpha, absLaplacianImage, beta, 0, enhancedImage);
// 显示结果
imshow("Original Image", image);
imshow("Low Pass Image", lowPassImage);
imshow("Laplacian Image", absLaplacianImage);
imshow("Enhanced Image", enhancedImage);
// 保存输出(可选)
imwrite("enhanced_image.bmp", enhancedImage);
waitKey(0); // 等待按键
return 0;
}
分析
低频滤波: 使用
GaussianBlur()
函数对输入图像进行模糊处理,以获得较为平滑的版本。Size(5, 5)
指定了卷积核的大小,您可以根据需要调整。提取高频信息: 使用
Laplace()
提取边缘或细节。通过将其转换为绝对值形式,得到可显示的8位格式。加权合成: 使用
addWeighted()
将低通和经过增强的高通部分组合在一起。在这里,通过调整alpha
和beta
值,可以控制最终效果。显示和保存结果: 最后,通过 OpenCV 的
imshow()
显示每个阶段的结果,并且可以选择性地保存增强后的图像。
调整建议
- 您可以试着调整模糊参数、卷积核大小以及加权系数,以便获得理想效果。
- 尝试不同类型的低通滤波器,如均值滤波或中值滤波,根据具体情况选择最适合的方法。
如果还有其他问题或需求,请随时问我!
内容由零声教学AI助手提供,问题来源于学员提问