【OpenCV3经典编程100例】(11)形态学滤波:对二值图像进行腐蚀运算erode()、膨胀运算dilate()

本周新推:基本形态学运算的图像处理。对二值图像进行腐蚀运算erode()、膨胀运算dilate()。

API函数:

1.dilate()函数

CV_EXPORTS_W void dilate(InputArray src,//输入图像 
	OutputArray dst, //输出图像
	InputArray kernel,//结构元素,用于卷积的内核函数
	Point anchor = Point(-1, -1), //默认,锚点位于中心位置
	int iterations = 1,//默认,迭代次数
	int borderType = BORDER_CONSTANT,//默认
	const Scalar& borderValue = morphologyDefaultBorderValue());//默认

2.erode()函数

CV_EXPORTS_W void erode(InputArray src,//输入图像 
	OutputArray dst, //输出图像
	InputArray kernel,//结构元素,用于卷积的内核函数
	Point anchor = Point(-1, -1), //默认,锚点位于中心位置
	int iterations = 1,//默认,迭代次数
	int borderType = BORDER_CONSTANT,//默认
	const Scalar& borderValue = morphologyDefaultBorderValue());//默认

一、c++示例代码

//包含头文件
#include <opencv2/opencv.hpp>
//命名空间
using namespace cv;
using namespace std;
//全局函数声明部分

//主函数
int main()
{
	//【1】载入图像,灰度化
	Mat image = imread("F:\\opencvtest\\testImage\\faceBinary.jpg", 0);//灰度原图
	//【2】检查是否载入成功
	if (image.empty())
	{
		printf("读取图片错误,请确认目录下是否有imread函数指定图片存在! \n ");
		return 0;
	}
	//【3】阈值化生成二值图像
	Mat binaryImage;
	threshold(image, binaryImage, 100, 255, THRESH_BINARY);
	//【4】获取结构元素
	Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
	//【5】腐蚀运算
	Mat erodedImage;
	erode(binaryImage, erodedImage, element);
	//【6】膨胀运算
	Mat dilatedImage;
	dilate(binaryImage, dilatedImage, element);
	//【7】显示图像
	imshow("11-二值图像", binaryImage);
	imshow("11-腐蚀运算", erodedImage);
	imshow("11-膨胀运算", dilatedImage);
	//【8】保持窗口显示
	waitKey(0);
	return 0;
}

二、运行截图

1.二值图像原图


2.腐蚀运算,图像白色部分减少一圈!


3.膨胀运算,图像白色部分增大一圈!


三、数字图像处理知识

形态学概述

1. 形态学:通常指生物学中对动植物的形状和结果进行处理的一个分支。

2. 数学形态学(mathematical morphology, MM):是根据形态学概念发展而来具有严格数学理论基础的科学,并在图像处理和模式识别领域得到了成功应用。除了通常作为一种抽取图像中区域形状特征,如边界、骨骼和凸壳等的工具外,也经常用于图像的预处理和后处理,如:形态学滤波、细化和修剪等。

3. 形态学图像分析的基本步骤

步骤一:提出所要描述的物体几何结构模式,即提取几何结构特征

步骤二:根据结构模式选择相应的结构元素(简单又有最强的表现力);

步骤三:用选定的结构元素对图像实行击中与否(HMT)等变换,便得到比原始图像更显著突出物体特征信息的图像。如赋予相应变量,还可得到定量描述;

步骤四:经过形态学变换后的图像突出我们所需的信息,从而可以方便提取信息。

4. 结构元素选取的原则

在形态学算法设计中,结构元素的选择十分重要,其形状、尺寸的选择是能否有效提取信息的关键。

a.结构元必须在几何上比原图像简单,且有界;当选择性质相同或相似的结构元时,以选择极限情况为宜;

b.结构元的凸性很重要,对非凸子集,由于连接两点的线段大部分位于集合的外面,故用非凸子集作为结构元将得不到什么信息。

5. 形态学图像分析的优点

a.在恢复处理中,形态滤波可借助先验的几何特征信息,利用形态学算子有效滤除噪声,又可保留图像的原有信息

b.MM算法易于用并行处理方法有效实现,且硬件实现容易;

c.基于MM的边缘信息提取由于基于微分的提取算法,也不像微分算法对噪声那样敏感,同时提取的边缘较光滑

d.基于MM方法提取的图像骨架较连续,断点少。

6. 对二值图像膨胀步骤

⑴ 用结构元素B的反射,扫描图像A的每一个像素;
⑵ 用结构元素的反射与其覆盖的二值图像做“或”操作;
⑶ 如果有一个元素为0,结果图像的该像素为0;否则为255

膨胀处理的结果是使原来的二值图像白色部分增大一圈

7. 对二值图像腐蚀步骤

⑴ 用结构元素B,扫描图像A的每一个像素;
⑵ 用结构元素与其覆盖的二值图像做“与”操作;
⑶ 如果都为1,结果图像的该像素为1,否则为0;

腐蚀处理的结果是使原来的二值图像白色部分减小一圈

猜你喜欢

转载自blog.csdn.net/misterjiajia/article/details/80305970