相关算法理解
filter2D 与拉普拉斯算子
- OpenCv中的fiilter2D()函数:利用内核实现对图像的卷积运算;
void filter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernel, Point anchor = Point(-1,-1),
double delta = 0, int borderType = BORDER_DEFAULT );//输入图像,输出图像,目标图像深度
- 拉普拉斯算子作为边缘检测,属于空间锐化滤波,通过计算二阶差分(微分)来进行计算
void cv::Laplacian (InputArray src, OutputArray dst, int ddepth, int ksize = 1, doublescale = 1,
double delta = 0,int borderType = BORDER_DEFAULT )
距离变换,归一化、腐蚀
findcountours函数查找轮廓、watershed分水岭算法
二值化、高斯滤波
- 二值化:将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。使图像中数据大为减少,从未能凸显出目标的轮廓。
double threshold( InputArray src,OutputArray dst,double threshold,double maxval,int type );//原始数组,输出数组,阈值,阈值类型
- 高斯滤波(Gaussian filter):高斯滤波为最常用的滤波器,具有可分离性质,可以把二维高斯运算转换为一维高斯运算,其本质上为一个低通滤波器。在OpenCV中可通过函数GaussianBlur进行操作。
canny算子边缘检测
- 三大准则:低错误率、最优定位、图像中的任意边缘只被标记一次,同时图像噪声不会产生伪边缘;
- canny算子实现步骤:
step1.用高斯滤波器对图像去噪
step2.计算像素的梯度
step3.非最大抑制(排除非边缘像素, 仅仅保留了一些细线条)
step4.滞后阈值化处理
C++: void Canny(InputArray image,OutputArray edges, double threshold1, double threshold2, int apertureSize=3,bool L2gradient=false )
基于openCv计算轮廓矩(圆心)
opencv中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩。
cv::moments ( InputArray array,
bool binaryImage = false
)
最小二乘法拟合
- 最小二乘法是一种数学优化技术,将边缘轮廓的像素点类比一系列的数据点,这些数据点组合成一个院,可以根据这些数据估计圆的参数;