OpenCV图像滤波及形态学操作

  1. 模糊图像

(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,负数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值