1.概述
在深度学习出现之前,主要有中值滤波、均值滤波、高斯滤波等.
2.理论对比
3.参数设置
blur()
::
- 也称为均值滤波。
- 此函数通过对矩形区域内的像素值进行平均化来平滑图像。
- 语法:
cv::blur(src, dst, Size(k, k)),
其中k是kernel的大小(奇数整数)。GaussianBlur()
:
- 使用高斯滤波器进行模糊处理。
- 像素的新值来自它的邻居,根据高斯函数,为更接近它的近邻赋予更多的权重。
- 语法:
cv::GaussianBlur(src, dst, Size(k, k)
。值sigmaX
和sigmaY
表示 X 和 Y 方向上的标准差。通常,只指定了sigmaX
,而将sigmaXY
设置为零。medianBlur()
:
- 将每个像素的值替换为其相邻像素的中位数。
- 对椒盐噪声特别有效。
- 语法:
cv::medianBlur(src, dst, k),
其中k是kernel的大小(大于1 的奇数整数)。Bilateral Filtering
src: Source image
- dst: Destination image
- d: The diameter of each pixel neighborhood.
- σ_Color: Standard deviation in the color space.
- σ_Space: Standard deviation in the coordinate space (in pixel terms)
4.代码实现
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv) {
if(argc != 2) {
std::cerr << "Usage: " << argv[0] << " <image_path>" << std::endl;
return -1;
}
// Load the noisy image
cv::Mat noisyImage = cv::imread(argv[1]);
if(noisyImage.empty()) {
std::cerr << "Error: Couldn't read the image. Check the path and try again." << std::endl;
return -1;
}
cv::imshow("Noisy Image", noisyImage);
// Apply averaging blur
cv::Mat averageBlurred;
cv::blur(noisyImage, averageBlurred, cv::Size(5,5));
cv::imshow("Averaging Blur", averageBlurred);
// Apply Gaussian blur
cv::Mat gaussianBlurred;
cv::GaussianBlur(noisyImage, gaussianBlurred, cv::Size(5,5), 0);
cv::imshow("Gaussian Blur", gaussianBlurred);
// Apply median blur
cv::Mat medianBlurred;
cv::medianBlur(noisyImage, medianBlurred, 5);
cv::imshow("Median Blur", medianBlurred);
// Wait for a key press and then close
cv::waitKey(0);
return 0;
}