均值滤波

【OpenCV】27 边缘保留滤波算法 – 均值迁移模糊

那年仲夏 提交于 2020-03-11 16:46:01
27 边缘保留滤波算法 – 均值迁移模糊 代码 import cv2 as cv import numpy as np src = cv . imread ( "../images/example.png" ) cv . namedWindow ( "input" , cv . WINDOW_AUTOSIZE ) cv . imshow ( "input" , src ) h , w = src . shape [ : 2 ] dst = cv . pyrMeanShiftFiltering ( src , 15 , 30 , termcrit = ( cv . TERM_CRITERIA_MAX_ITER + cv . TERM_CRITERIA_EPS , 5 , 1 ) ) result = np . zeros ( [ h , w * 2 , 3 ] , dtype = src . dtype ) result [ 0 : h , 0 : w , : ] = src result [ 0 : h , w : 2 * w , : ] = dst cv . imshow ( "result" , result ) cv . waitKey ( 0 ) cv . destroyAllWindows ( ) 实验结果 解释 均值迁移模糊是图像边缘保留滤波算法中一种

视频处理学习笔记(四)——几种常见的时域滤波

好久不见. 提交于 2019-12-16 23:17:09
时域与频域 视频处理归根到底还是得对图像进行处理,常见的图像处理可以大致分为时域上处理和频域上处理,为此,我们先了解一下什么是时域,什么是频域 时域是真实世界,是唯一真实存在的域,自变量是时间,即横轴是时间,纵轴是信号的变化,其动态信号x(t)是描述信号在不同时刻取值的函数; 频域最重要的性质就是它不是真实的,仅仅是一个数学构造,自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说的频谱图。 更多关于时域与频域的请阅读以下文章 - 什么是时域和频域 - 信号时域频域及转换 相关图像噪声可以 点击这里 均值滤波 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值 通俗的所就是用选定区域的平均值来代替该点的像素值,比如选定的区域是(3,3)的,不考虑边界,第一个区域就是(1+2+1+1+2+2+5+7+6)/9=3,所以该点的值为3。边界值不变(如果考虑边界要进行补零操作),显然这有点类似卷积,给定一个3 3(当然也可以是其他大小的区域,一般都是3 3)的卷积核如下 这就可以实现均值滤波了,当然,可以更换卷积核来实现加权平均的效果,根据上面的原理可以自己编写均值滤波的函数,网上已有很多博客实现了,这里就不在多说了

均值模糊与高斯模糊

折月煮酒 提交于 2019-12-06 18:48:30
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; using namespace std; const int g_nTrackbarMaxValue = 9; //定义轨迹条最大值 int g_nTrackbarValue; //定义轨迹条初始值 int g_nKernelValue; //定义kernel尺寸 Mat src, dst; //均值滤波 void on_kernelTrackbar(int,void *) { //根据输入值重新计算kernel尺寸 g_nKernelValue = g_nTrackbarValue * 2 + 1; //均值滤波函数 blur(src, dst, Size(g_nKernelValue, g_nKernelValue)); imshow("均值滤波", dst); } //高斯滤波 void on_kernelTrackbar2(int, void*) { //根据输入值重新计算kernel尺寸 g_nKernelValue = g_nTrackbarValue * 2 + 1; //均值滤波函数 GaussianBlur(src, dst, Size(g_nKernelValue, g

循环数据的均值滤波方法

江枫思渺然 提交于 2019-12-05 17:04:00
对于角度传感器的输出值进行均值滤波时,在角度的循环点处因数据值的非连续性,如果不对原始数据进行处理做会出现错误数据,如(354 + 5)/2= 179.5,正常值应为359.5。采用把角度值转化为三角函数值滤波后再通过反函数(结合象限)求值的方法较多,此外对于两个数据值的滤波可通过差值判断的方法也可以解决,对于多数据的滤波有什么更高效的方法呢? 对落入阈值范围(360度情况下如:330-360;0-30)的数据采取标记的方法,在要平均的数据中只有在两种数据都存在的情况下对数据进行处理就可以了。 int num = 5; //滤波值数量 int i = 0; //输入值放入数组循环 int m = 0; //标记 int n = 0; //标记 double[] data = new double[5]; //将滤波值置入数组 double temp, output; void Filter(double input) { data[i] = input; if (m > 0) m--; if (n > 0) n--; if (input > 330) m = num; if (input < 30) n = num; temp = 0; if (m > 0 && n > 0) { for (int j = 0; j < num; j++) if (data[j] < 30)

图像处理――(源)均值滤波(blue)、高斯滤波(GaussianBlue)函数编程实现

匿名 (未验证) 提交于 2019-12-02 23:48:02
1 #include <opencv2/opencv.hpp> 2 #include <opencv2/core/core.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 #include <iostream> 5 #include <stdlib.h> 6 using namespace cv ; 7 using namespace std ; 8 9 10 void MeanFilter_my1 ( const Mat & src , Mat & dst , int ksize ) //均值滤波 11 { 12 CV_Assert ( ksize % 2 == 1 ); 13 14 int * kernel = new int [ ksize * ksize ]; 15 for ( int i = 0 ; i < ksize * ksize ; i ++) 16 kernel [ i ] = 1 ; 17 Mat tmp ; 18 int len = ksize / 2 ; 19 tmp . create ( Size ( src . cols + len , src . rows + len ), src . type ()); //添加边框 20 dst . create ( Size ( src . cols , src .