2.1 图像平滑处理

图像平滑处理:

              是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和高频干扰成分的图像

              处理方法,

              目的是使图像亮度平缓渐变,减小突变梯度,改善图像质量。

              平滑处理时需要滤波器

归一化滤波器

              最简单的滤波器,输出像素值是核窗口内像素值的均值。

              blur(Mat src, Mat det, Size(xradius,yradius),Point(-1,-1));

              src:输入图像

              dst:输出图像

              Size(w,h):定义内核大小,宽度,高度

              Point(-1,-1):指定锚点位置(被平滑点),如果为负值,取核的中心为锚点。

高斯滤波器

              GaussianBlur(Mat src,Mat dst,Size(i,i),sigmax,sigmay);

              其中Size(x,y),x,y必须是正数而且是奇数。

              Size(w,h):定义内核大小(需要考虑邻域的范围),w,h必须是正奇数,否则将使用sigmax

              和sigmay参数来计算内核大小。

              sigmax:x方向标准差,如果是0则sigmax用内核大小计算得到。

              digmay:y方向标准差,如果是0则sigmay用内核大小计算得到。

 中值滤波器

             统计排序滤波器

             中值模糊对椒盐噪声(极大值,极小值)有很好的抑制作用。

             medianBlur(src,dst,ksize)

             ksize:内核大小(只需一个值,因为使用正方形)必须为奇数

 双边滤波器

             均值模糊无法克服边缘像素信息丢失缺陷,原因是均值滤波器是基于平均权重

              高斯模糊部分克服了该缺陷,但是无法完全避免因为没有考虑像素值的不同。

              高斯双边模糊 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变。

              bilaterFilter(src,dst,d,sigmaC,sigmaS)

              d:像素的邻域半径,半径之内的像素值会被纳入计算

             sigmaColor:颜色空间的标准方差,决定多少差值之内的像素会被计算。

             sigmaSpace:坐标空间的标准方差(像素单位),如果d的值大于0,则声明无效,

                                 否则用它来计算d的值。

         

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main() {
    Mat src, dst;
    src = imread("D:\OpenCVT\5.jpg");
    if (!src.data) {
        printf("could not load image!");
        exit(0);
    }
    char input_title[] = "input image";
    char output_title[] = "blur image";
    char gaussian_title[] = "Gaussian Blur";
    char median_title[] = "Median Blur";
    char bilater_filter[] = "gaussian filter";
    namedWindow(input_title,CV_WINDOW_AUTOSIZE);
    namedWindow(output_title, CV_WINDOW_AUTOSIZE);
    namedWindow(gaussian_title, CV_WINDOW_AUTOSIZE);
    namedWindow(median_title, CV_WINDOW_AUTOSIZE);
    namedWindow(bilater_filter, CV_WINDOW_AUTOSIZE);
    imshow(input_title, src);
    blur(src, dst, Size(9, 3), Point(-1, -1));
    imshow(output_title, dst);

    Mat gdst;
    GaussianBlur(src, gdst, Size(5, 5), 11, 11);
    imshow(gaussian_title, gdst);

    Mat mdst;
    medianBlur(src, mdst, 3);
    imshow(median_title, mdst);

    Mat fdst;
    bilateralFilter(src, fdst, 3, 150, 3);
    imshow(bilater_filter, fdst);
    waitKey(0);
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/zuoyou151/p/9593938.html