-
模糊图像
(1)模糊原理
Smooth/Blur是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时候减低噪声。
使用Smooth/Blur操作其背后是数学的卷积处理:
G(I,j)=k,Ifi+k,j+Ih(k,I)
通常这些卷积算子计算都是线性操作,所以又叫线性滤波
(2)四种滤波方法
均值滤波:blur(Mat src,Mat dst,Size(xradius,yradius),Point(-1,-1));
高斯模糊:GaussianBlur(Mat src,Mat dst,Size(11,11),sigmax,sigmay);
注意:其中Size(x,y),x,y必须是正数而且是奇数
中值滤波:统计排序滤波器,中值滤波对椒盐噪声有很好的抑制作用
双边滤波:均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重;高斯模糊部分克服啦该缺陷,但是无法完全避免,因为没有考虑像素值的不同;高斯双边模糊——是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变
中值模糊:medianBlur(Mat src,Mat dest,kszie);
双边模糊:bilateralFilter(src,dest,d=15,150,3);
15---计算的半径,半径之内的像素都会被纳入计算,如果提供-1,则根据sigma space参数取值
150—sigma color 决定多少差值之内的像素会被计算
3—sigma space如果d的值大于0则声明无效,否则根据它来计算d值,
中值模糊的ksize大小必须是大于1而且必须是奇数
2.膨胀与腐蚀
(1)腐蚀
腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值
(2)膨胀
跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面运动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。
(3)相关的API
getStructuringElement(int shape,Size ksize,Point anchor)
形状(MORPH_RECT\MORPH_CROSS\MORPH_ELLIPSE) 大小
锚点默认是Point(-1,-1),意思是中心像素
Dilate(src,dst,kernel)
Erode(src,dst,kernel)
(4)动态调整结构元素大小
TrackBar-createTrackbar(const String &trackbarname,const String winName,int* value,int count,Trackbarcallback func,
void* userdata=0)
其中最重要的是callback函数功能。如果设置为NULL就是说只有值update,但是不会调用callback的函数
3.形态学操作
(1)开操作——open
先腐蚀后膨胀:可以去掉小的对象,假设对象是前景色,背景是黑色
(2)闭操作——close
先膨胀后腐蚀:可以填充小的洞,假设对象是前景色,背景是黑色
(3)形态学梯度——Morphological Gradient
膨胀减去腐蚀,又称为基本梯度(其他还包括-内部梯度、方向梯度)
(4)顶帽——top hat
顶帽是原图像与开操作之间的差值图像
(5)黑帽——black hat
黑帽是闭操作图像与原图像的差值图像
(6)相关API
MorphologyEx(src,dest,CV_MOP_BLACKHAT,kernel);
Mat src——输入图像
Mat dest——输出图像
Int OPT-CV_MOP_OPEN/CV_MOP_CLOSE/CV_MOP_GRADIENT/CV_MOP_TOPHAT/
CV_MOP_BLACKHAT形态学操作类型
Mat kernel 结构元素
Int iteration 迭代次数,默认是1
最好变换成二值图再进行操作
4.形态学操作应用-提取水平与垂直线
(1)原理方法
图像形态学操作的时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用俩个最基本的形态学操作----膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。
膨胀——输出的像素值是结构元素覆盖下输入图像的最大像素值
腐蚀——输出的像素值是结构元素覆盖下输入图像的最小像素值
(2)实现步骤
输入图像彩色图像——IMread
转换为灰度图像———cvtColor
转换为二值图像———adaptiveThreshold
定义结构元素
开操作(腐蚀+膨胀)提取水平与垂直线
(3)转换为二值图像——adaptiveThreshold
adaptiveThreshold(Mat src,//输入的灰度图像
Mat dest,//二值图像
Double maxValue,//二值图像最大值
Int adaptiveMethod,//自适应方法,只能是其中之一, ADAPTIVE_THRESH_MEAN_C,ADAPTIVE_THRESH_GAUSSIAN_C
Int thresholdType,//阈值类型
Int blockSize,//块大小
Double C//常量C可以是正数,0,负数)