图像滤波

OpenCv高斯滤波

不问归期 提交于 2019-11-29 00:47:35
/*入门学习 图像滤波 Filtering 是图像处理中的一个基本操作,其目的是为了提取图像中被认为重要的那些部分。 滤波可以去除图像中的噪声,提取感兴趣的视觉特征,允许图像重采样等。 这里我们了解一些基本的内容。 观察一幅图像时,我们看到不同的灰度(或彩色值)在图像中的分布。图像之间存在不同是因为他们有不同的灰度分布。 因此存在另一种进行图像处理的方式:观察图像中存在的灰度的变化。 一些图像中包含大面积恒定的灰度强度,另一些图片中灰度变化迅速。 因此观察图像中灰度或者像素点变化的频率构成了一种描述图像的方式,这种观点被称为频域。通过观察灰度的分布 来描述一幅图像 被称为空间区域。 空间域又称图像空间(image space)。由图像像元组成的空间。 在图像空间中以长度(距离)为自变量直接对像元值进行处理称为空间域处理。 以空间坐标作为变量进行的研究就是空间域。 频域分析按照高频到低频的次序 ,分解图像到频率内容。低频对应区域的图像强度变化缓慢,高频区域是由快速变化的图像 强度生成的。图像时二维的,他包含垂直频率(垂直方向的变化)和水平频率(水平方向的变化) 频域分析的框架下,滤波操作的作用是增强部分频段,同时限制或者衰减其他频段。 低频滤波器去除了图像中的高频成分,高通滤波器去除了低频成分。 这篇博客个人觉得讲的非常好:https://blog.csdn.net/qq

频率域滤波(1)

吃可爱长大的小学妹 提交于 2019-11-29 00:05:33
频率域滤波实际上是将图像进行傅里叶变换,然后在变换域进行处理,然后进行傅里叶反变换转换回空间域,原理是用傅里叶变换表示的函数特征完全可以通过傅里叶反变换来重建,而且不会丢失任何信息(因为任何周期或非周期函数都可以表示为不同频率的正弦函数和余弦函数之和的形式)。实际上,空间域滤波和频率域滤波经常是对应的:    空间滤波实际上是图像与各种空间滤波器(模板)的卷积,而空间卷积的傅里叶变换是频率域中相应变换的乘积,因此频率域滤波可以用图像的傅里叶变换乘以相应的频率域滤波器。 连续变量函数的傅里叶变换暂且不提,我们直接来看图像的二维离散傅里叶变换,令f(x,y)表示一幅大小为[M,N]像素的数字图像,由F(u,v)表示图像的二维离散傅里叶变换(DFT): 指数项由欧拉公式获得,可以将其展开为正弦函数和余弦函数,频率域是使用u和v作为(频率)变量,由F(u,v)构成坐标系。由u和v构成的大小为[M,N]的矩形区域称为频率矩形,大小和输入图像的大小相同。 离散傅里叶反变换(IDFT)的形式为: 频率域原点处变换的值(F(0,0))称为傅里叶变换的直流分量,不难看出,F(0,0)等于f(x,y)平均值的M*N倍。还需要注意的是即使f(x,y)是实函数,它的变换通常也是复数。因此,傅里叶变换常用的是F(u,v)的频谱和相角,并将其显示为一幅图像。令R(u,v)和I(u,v)表示其实部和虚部

滤波器—学习笔记

丶灬走出姿态 提交于 2019-11-28 08:12:24
文章目录 空间滤波 中值滤波(Median Filter) 自适应中值滤波器(Adaptive Median Filter) 均值滤波 算术均值滤波器(Arithmetic Mean Filter) 盒状滤波器 加权的均值滤波器 非线性均值滤波器 几何均值滤波器(Geometric Mean Filter) 谐波均值滤波器(Harmonic Mean Filter) 逆谐波均值滤波器(Contra-Harmonic Mean Filter) 参考资料 空间滤波 一个滤波器就是在选定的领域像素上执行预定义好的操作产生新的像素,并用新的像素替换掉原来像素形成新的图像。 一个空间滤波器包括两个部分: 一个领域,滤波器进行操作的像素集合,通常是一个矩形区域 对领域中像素进行的操作 通常可以将滤波器称之为核(kernel)、模板(template)或者窗口(window)。 根据预定义的操作,可以将滤波器分为: 线性滤波器 非线性滤波器 根据滤波器最终对图像造成的影响,可以将滤波器分为: 平滑滤波器,通常用于模糊图像或者去除图像中的噪声。 锐化滤波器,突出图像中的边缘细节部分。 中值滤波(Median Filter) 分类 非线性滤波器 原理 选择待处理像素的一个领域中的各像素值的中值来代替待处理的像素。 功能 消除孤立噪声点(像素的灰度值与周围像素比较接近),特别是椒盐噪声。 优点

OpenCV 低通滤波

拥有回忆 提交于 2019-11-28 05:48:35
#include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace std; using namespace cv; Mat I;//输入的图像矩阵 Mat F;//图像的快速傅里叶变换 Point maxLoc;//傅里叶谱的最大值的坐标 int radius = 20;//截断频率 const int Max_RADIUS = 100;//设置最大的截断频率 Mat lpFilter;//低通滤波器 int lpType = 0;//低通滤波器的类型 const int MAX_LPTYPE = 2; Mat F_lpFilter;//低通傅里叶变换 Mat FlpSpectrum;//低通傅里叶变换的傅里叶谱灰度级 Mat result;//低通滤波后的效果 string lpFilterspectrum = "低通傅里叶谱";//显示窗口的名称 //快速傅里叶变换 void fft2Image(InputArray _src, OutputArray _dst); //幅度谱 void amplitudeSpectrum(InputArray _srcFFT, OutputArray

图像卷积及其滤波

两盒软妹~` 提交于 2019-11-28 01:34:56
图像的卷积 ,可以理解为kernel和像素点pixel之间的运算。 把kernel旋转180度(图像是反过来的),使其中心压在图片的第一个像素点,然后每个点和kernel对应的数值相乘,然后把各个值累加得到一个新的值,取代kernel中心压着的像素值。在进行这个运算时,需要copy一下原图或者创建一个size一样的图片,不能直接在原图上修改。 例: 注意: 在图片的某一像素点周围没有足够的值时,比如左上角,忽略最外边的一圈像素或者给边缘插值,然后计算再把边缘扔掉。 New value取值为0-255,小于0认为是0,大于255认为是255。 kernel一般取奇数矩阵 图像边缘提取 图像边缘来源于不同颜色、纹理、光照、表面。 Step edge(阶跃函数) 一阶导数 一个峰值 Ramp edge(缓慢上升) 二阶导数 两个峰值 Peak edge(矩形信号) 一阶导数 一个峰值 图像的导数可以用梯度来表示,但是计算梯度比较麻烦而且效率略低。计算导数需要用到剑减法来求变化率,这就衍生出一些算子,类似于通过分配权重的方式计算梯度。 Sobel 算子其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值,Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响

ubuntu环境下opencv学习+踩坑

橙三吉。 提交于 2019-11-27 12:10:24
opencv学习+踩坑 环境 ubuntu 19.04 vscode 1.37.0 opencv 3.4.7 cmake 3.13.4 拜一下julao的数字图像处理提纲 https://bitlecture.github.io/notes/数字图像处理/ 然后开始跟着毛星云的blog跑demo来学opencv 实际上如果论实用性的话,以下的系列blog可能还会更好一些? https://blog.csdn.net/morewindows/article/category/1291764 文件读取和输出 https://blog.csdn.net/poem_qianmo/article/details/20537737 定义图像 Mat image = imread("Filename"); namedWindow("Windowname"); imshow("Windowname",image); 需要注意的是图片要放到build的文件夹里面,如果没能成功imread的话,会报错—— error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow' 视频读取 VideoCapture cap; cap.open("Filename"); 打开摄像头 cap.open(0);

OpenCV 傅里叶变换 低频滤波

白昼怎懂夜的黑 提交于 2019-11-27 12:00:33
#include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> using namespace std; using namespace cv; int main() { string path = "1.png"; Mat src = imread(path, 0); //【1】创建一个复数矩阵,储存傅里叶变换后的矩阵 int r = getOptimalDFTSize(src.rows); int c = getOptimalDFTSize(src.cols);//得到最优尺寸 Mat padded; //扩充src的边缘,将图像变大( 0, r - src.rows, 0, c - src.cols)分别表示上下左右; copyMakeBorder(src, padded, 0, r - src.rows, 0, c - src.cols, BORDER_CONSTANT, ::Scalar::all(0)); //创建一个复数矩阵,实部为plane[0],虚部plane[1]填充0 Mat plane[] = { Mat_<float>(padded),Mat::zeros(padded.size(),CV_32F)

图像平滑/滤波

独自空忆成欢 提交于 2019-11-27 08:17:49
平滑 1.简单模糊/均值滤波: 目标图像中每一个值都是源图像相应位置的核的平均值 均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。特别是椒盐噪声 2.中值滤波: 将源图像对应位置的核大小个像素进行排序,得到中值,最后将核矩阵的中心点赋值为这个中值。 椒盐噪声很好的被平滑,而且也没均值那样模糊化太过于严重。 少量具有较大偏差的点会严重影响滤波结果 3.高斯滤波 源图像对应位置的核中心为中心,将核参数呈现二维高斯波形,然后将核和源图像对应位置求卷积。 参考:https://www.cnblogs.com/charlee44/p/10592588.html 缺点:破坏了边缘信息。把边缘也模糊了 4.双边滤波 https://blog.csdn.net/qq_36359022/article/details/80198890 结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。 双边滤波器的好处是可以做边缘保存(edge preserving),一般用高斯滤波去降噪,会较明显地模糊边缘,对于高频细节的保护效果并不明显。 openCV接口 void bilateralFilter( InputArray src,

目标跟踪算法综述

眉间皱痕 提交于 2019-11-27 05:22:51
转自 https://www.zhihu.com/question/26493945 作者:YaqiLYU 第一部分:目标跟踪速览 先跟几个SOTA的tracker混个脸熟,大概了解一下目标跟踪这个方向都有些什么。一切要从2013年的那个数据库说起。。如果你问别人近几年有什么比较niubility的跟踪算法,大部分人都会扔给你吴毅老师的论文,OTB50和OTB100(OTB50这里指OTB-2013,OTB100这里指OTB-2015,50和100分别代表视频数量,方便记忆): Wu Y, Lim J, Yang M H. Online object tracking: A benchmark [C]// CVPR, 2013. Wu Y, Lim J, Yang M H. Object tracking benchmark [J]. TPAMI, 2015. 顶会转顶刊的顶级待遇,在加上引用量1480+320多,影响力不言而喻,已经是做tracking必须跑的数据库了,测试代码和序列都可以下载: Visual Tracker Benchmark ,OTB50包括50个序列,都经过人工标注: 两篇论文在数据库上对比了包括2012年及之前的29个顶尖的tracker,有大家比较熟悉的OAB, IVT, MIL, CT, TLD, Struck等,大都是顶会转顶刊的神作

图像算法——形态学滤波(待完善)

隐身守侯 提交于 2019-11-27 03:11:01
形态学通常表示生物学的一个分支,研究动植物的形态和结构。图像中的形态学是数学形态学。简单来讲就是基于形状的一系列图像处理操作。 基本运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度。 膨胀与腐蚀 功能: 消除噪声; 分割出独立的图像元素,在图像中链接相邻的元素; 寻找图像中明显的极大值和极小值区域; 求图像的梯度; 膨胀 求局部最大值的操作。 核可以是任何形状,有一个单独定义的参考点,锚点。 膨胀就是计算核覆盖的区域的像素点的极大值,把这个极大值赋值给参考点指定的像素,使图像的高亮区域逐渐增长。 函数:void dilate 腐蚀 与膨胀相反,求局部最小值的操作。 函数:void erode 开运算、闭运算、形态学梯度、顶帽、黑帽 形态学的高级形态,都是建立在腐蚀和膨胀这两个基本操作之上的。 开运算 先腐蚀后膨胀,用来消除小物体,在纤细点出分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。 闭运算 先膨胀后腐蚀,排除小型黑洞(黑色区域) 形态学梯度 膨胀图和腐蚀图之差,对二值图像操作能将团块的边缘突出出来。 顶帽 原图像与开运算的结果图之差,由于开运算放大了裂缝或者局部低亮度的区域,因此原图中减去开运算后的图