自定义线性滤波器
来源:互联网 发布:在线画板软件 编辑:程序博客网 时间:2024/05/23 12:03
目标:
使用OpenCV中的函数cv::filter2D 自定义线性滤波器。
理论:
卷积
在一个非常普遍的意义上,卷积是一个图像的每一个部分和一个核之间的操作。
什么是核?
一个核实质上是一个固定大小矩阵,中心点被称为锚点,如下图所示。
如何利用卷积核进行卷积 ?
假设您想知道图像中某个特定位置的结果值。卷积的值以下列方式计算:
1) 将核的锚点(中心点)放在要计算像素上,卷积核剩余的部分对应在图像相应的像素上。
2) 用卷积核中的系数和图像中相应的像素值相乘,并求和。
3) 将最终结果赋值给锚点对应的像素。
4) 通过将核在整个图像滑动,重复以上计算过程直到处理完所有的像素。
用一个表达式表示以上过程如下:
代码
#include "opencv2/imgproc.hpp"#include "opencv2/highgui.hpp"#include <stdlib.h>#include <stdio.h>using namespace cv;/* @function main */int main ( int argc, char** argv ){ Mat src, dst; Mat kernel; Point anchor; double delta; int ddepth; int kernel_size; char* window_name = "filter2D Demo"; int c; src = imread( argv[1] ); if( !src.data ) { return -1; } namedWindow( window_name, WINDOW_AUTOSIZE ); anchor = Point( -1, -1 ); delta = 0; ddepth = -1; int ind = 0; while( true ) { c = waitKey(500); if( (char)c == 27 ) { break; } kernel_size = 3 + 2*( ind%5 ); kernel = Mat::ones( kernel_size, kernel_size, CV_32F )/ (float)(kernel_size*kernel_size); filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT ); imshow( window_name, dst ); ind++; } return 0;}
结果
执行一个normalized box filter。例如核的大小为3.如下图:
代码执行时和的大小为3,5,7,9和11的结果如下:
0 0
- 自定义线性滤波器
- 卷积,使用filter2D创建自定义线性滤波器
- 使用filter2D创建自定义线性滤波器
- (24)Air Band OpenCV2.4.13_自定义线性滤波器
- opencv-线性滤波器filer2D
- opencv 线性滤波器
- 【转载】线性相位滤波器
- 实现自己的线性滤波器
- 实现自己的线性滤波器
- Python OpenCV 线性滤波器 简介(七)
- 求线性滤波器的频率响应.m
- Opencv中的3种线性滤波器
- 5.1 线性相位FIR滤波器的特性
- imgproc模块--filter2D实现线性滤波器
- 线性滤波器(linear filter)与非线性滤波器(non-linear filter)
- 图像处理-线性滤波-3 高斯滤波器
- 图像处理-线性滤波-3 高斯滤波器
- 图像处理-线性滤波-3 高斯滤波器
- CentOS7中启动/停止/重启服务命令
- 微信开发第二天(创建第一个微信小程序)
- C语言程序练习三
- Linux学习之:七种运行级别
- NOIP模拟题 2016.11.8 (2) [线段树] [动态逆序对] [矩阵快速幂] [数论] [欧拉函数]
- 自定义线性滤波器
- 基于websocket写的一个在线联机小游戏:六子冲棋
- 选择排序法
- IIC通信协议
- FFMPEG解码流程理解搜集整理及tutorial5的理解,主要是音视频同步
- Android API Level、sdk版本与发行日期 对照表
- java中父类和子类初始化顺序
- 【嵌入式】STM32的库函数使用
- 欢迎使用CSDN-markdown编辑器