OpenCV图像模糊原理
? ? ? ?模糊操作是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时减低椒盐噪声。?图像模糊,也称为平滑操作,是一种简单且经常使用的图像处理操作,平滑主要是能减少噪声。
? ? ? ?要执行平滑操作,我们将对图像应用滤镜。最常见的滤波器类型是线性的,其中输出像素的值(即g(i ,j )被确定为输入像素值的加权和(即F(i + k ,j + l )):
h (k ,l ) 被称为内核,它是过滤器的系数。它有助于将滤波器可视化为在图像上滑动的系数窗口。
f() 表示输入的一副图像;
i、j 表示输入图像的行和列;
h(k,l) 表示卷积算子(卷积核,也可以叫掩膜),它的大小可以设定;
k, l 系数的大小又可以叫窗口大小(掩膜的大小,比如3*3);
g() 表示输出的像素值;
f() 的第一行,第一列像素点无法进入卷积算子的红色中心区域,不能进行卷积计算,只能进行相应的边缘像素处理。
假设把图像分解成6x6的图像像素点矩阵,卷积过程:
6x6图像上面有个3x3的卷积窗口,每次移动一个像素格,依次从左向右,从上向下移动,红色中心点的位置依次移动,黄色的每个像素点值之和,取平均值赋给中心红色像素点,作为它卷积处理之后新的像素值。
一.归一化盒子滤波(均值滤波)
API函数接口
blur(Mat src,Mat dst,Size(w,h),Point(-1,-1));
归一化过滤器是最简单的,每个输出像素是其内核邻居的平均值(所有这些像素都具有相同的权重)
参数说明: src : 源输入图像 dst : 目标图像 Size() : 定义要使用的内核的大小(宽度为w像素,高度为h像素) Point : 表示锚点(被评估的像素)相对于邻域的位置。如果存在负值,则将内核的中心视为锚点
二.高斯滤波器 (Gaussian Filter)
高斯滤波器是最有用的过滤器。通过将输入数组中的每个点与高斯卷积核核进行卷积,然后将它们相加以产生输出数组来完成高斯滤波。
?
API 函数接口
GaussianBlur(Mat src,Mat dst,Size(w,h),sigmax,sigmay) src:输入源图像 dst:目标图像 Size(w,h) : 要使用的内核的大小。w 和H必须是奇数和正数,否则将使用σX和σ?参数计算大小。 sigmax : x中的标准差。写0表示使用内核大小计算σx sigmay : y的标准差。写0表示使用内核大小计算σy。
===============================================================
代码实现:
#include"stdafx.h"
#include<opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv)
{
Mat src, dst;
src = imread("F:/photo/qx.jpg");
if (!src.data)
{
printf("could not load image");
return -1;
}
char input_title[] = "input image";
char output_title[] = "blur image";
namedWindow(input_title, 1);
namedWindow(output_title, 1);
imshow(input_title, src);
blur(src, dst, Size(5, 5), Point(-1, -1));
imshow(output_title, dst);
Mat gblur;
GaussianBlur(src, gblur, Size(11, 11), 11, 11);
imshow("gaussian blur", gblur);
waitKey(0);
return 0;
}
=================================================================
图像处理效果:
|