2、图像形态学操作
图像形态学与图像的区域和形状有关,用来提取有助于表示形状和区域的图像组件。与前面看到的其他图像处理操作不同,图像形态学将图像视为一堆集合的总和。图像与一种称为结构元素的小模板交互作用,这种小模板定义图像形态学中的感兴趣区域或邻域。这里将逐一解释各种可执行在图像上的形态学操作:
侵蚀:侵蚀将中心像素设置为邻域中所有像素的最小值,邻域由结构元素所定义,结构元素是1和0所组成的矩阵。侵蚀用于扩大物体中的孔、缩小边界、消除孤岛区块,并消除可能存在于图像边界上的狭窄半岛。
膨胀:膨胀将中心像素设置为邻域中所有像素的最大值,膨胀增大了白色块的尺寸并减小了黑色区域的尺寸。它用于填充对象中的孔并扩展对象的边界。
开运算:图像开运算基本上是侵蚀和膨胀的组合,图像开口被定义为先侵蚀,然后膨胀。两个操作都使用相同的结构元素执行,用于平滑图像的轮廓、分解窄桥并隔离彼此接触的物体。它用于分析发动机油中的磨损颗粒、再生纸中的油墨颗粒等。
闭运算:图像闭运算定义为先膨胀,然后侵蚀。两个操作都使用相同的结构元素执行,用于融合狭窄的断裂并消除小孔。
通过应用于仅包含黑色和白色的二值图像,有助于理解形态算子。OpenCV和CUDA提供了一个简单的API,可以对图像进行形态转换,代码如下:
需要首先创建定义形态操作的邻域的结构元素,这可以通过在OpenCV中使用get-StructuringElement函数来完成。需要提供结构元素的形状和大小作为此函数的参数,本代码中定义5×5大小的矩形结构元素。
使用createMorphologyFilter函数创建形态学操作的滤波器,需要三个强制性参数:第一个参数定义要执行的操作——cv::MORPH_ERODE用于侵蚀、cv::MORPH_DILATE用于膨胀、cv::MORPH_OPEN用于开运算、cv::MORPH_CLOSE用于闭运算;第二个参数是图像的数据类型;第三个参数是先前创建的结构元素。用apply方法在图像上调用这些滤波器。
图像上的形态学操作输出如图:
从输出可以看出,侵蚀减少了物体的边界,而膨胀使其变厚。我们认为白色部分是对象而黑色部分是背景。开运算可以平滑图像的轮廓,闭运算消除图像中的小孔。
总而言之,形态学操作对于找出用于定义图像的形状和区域的组件是重要的,它可用于填充图像中的孔并使图像的轮廓平滑。
3、总结上下部分
访问图像中特定位置的像素强度的方法,当我们对图像执行逐点运算时,它非常有用。直方图是用于描述图像的非常重要的全局特征,计算直方图的方法和直方图均衡化提高了图像的视觉质量。
图像滤波是一种有用的邻域处理技术,用于消除噪声、提取图像的边缘特征,并进行了详细描述。
低通滤波器用于消除噪声,但它也会模糊图像的边缘;
高通滤波器去除被视为低频区域的背景,同时增强被视为高频区域的边缘。
不同的形态学操作,如侵蚀,膨胀,开运算和闭运算,可用于描述图像的形状和填充图像中的孔。