形态学

opencv-图像形态学之膨胀腐蚀

不羁岁月 提交于 2020-04-04 03:58:10
转自: https://blog.csdn.net/poem_qianmo/article/details/23710721 一、原理 1.1 形态学概述 形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构。而我们图像处理中指的形态学,往往表示的是数学形态学。下面一起来了解数学形态学的概念。 数学形态学(Mathematical morphology) 是一门建立在 格论和拓扑学 基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等。 简单来讲,形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有二种:膨胀与腐蚀(Dilation与Erosion)。 膨胀与腐蚀能实现多种多样的功能,主要如下: 消除噪声 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。 寻找图像中的明显的极大值区域或极小值区域 求出图像的梯度 我们在这里给出下文会用到的,用于对比膨胀与腐蚀运算的“浅墨”字样毛笔字原图: 在进行腐蚀和膨胀的讲解之前,首先需要注意,腐蚀和膨胀是对白色部分(高亮部分

opencv图像处理之形态学转换

北战南征 提交于 2020-03-01 03:33:32
文章目录 1.腐蚀、膨胀、梯度 2.开运算、闭运算、礼帽、黑帽 3.创建不同形状的核 1.腐蚀、膨胀、梯度 形态学操作: 根据图像形状进行的简单操作。一般情况下对 二值化图像 进行的操作。 腐蚀: 就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉(但是前景仍然是白色)。这是怎么做到的呢?卷积核沿着图像滑动,如果 与卷积核对应的原图像的所有像素值都是1 ,那么中心元素就保持原来的像素值,否则就变为零。这对于去除白噪声很有用,也可以用来断开两个连在一块的物体等。 膨胀: 与腐蚀相反, 与卷积核对应的原图像的像素值中只要有一个是1 ,中心元素的像素值就是1。所以这个操作会增加图像中的白色区域(前景)。一般在去噪声时先用腐蚀再用膨胀。因为腐蚀在去掉白噪声的同时,也会使前景对象变小。所以我们再对他进行膨胀。这时噪声已经被去除了,不会再回来了,但是前景还在并会增加。膨胀也可以用来连接两个分开的物体。 梯度: 其实就是一幅图像膨胀与腐蚀的差别。结果看上去就像前景物体的轮廓。 代码速记: cv2.erode() cv2.dilate() cv2.morphologyEx():cv2.MORPH_GRADIENT 参数解释: cv2 . erode ( raw_binary , kernel , iterations = 1 ) #原图像、卷积核、迭代次数 cv2 . dilate ( raw

OpenCV--图像的形态学处理

纵饮孤独 提交于 2020-02-10 01:22:30
形态学-腐蚀操作 img = cv2.imread('dige.png') cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() 效果: kernel = np.ones((3,3),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1) #迭代次数 cv2.imshow('erosion', erosion) cv2.waitKey(0) cv2.destroyAllWindows() 效果: pie = cv2.imread('pie.png') cv2.imshow('pie', pie) cv2.waitKey(0) cv2.destroyAllWindows() 效果: kernel = np.ones((30,30),np.uint8) erosion_1 = cv2.erode(pie,kernel,iterations = 1) erosion_2 = cv2.erode(pie,kernel,iterations = 2) erosion_3 = cv2.erode(pie,kernel,iterations = 3) res = np.hstack((erosion_1,erosion_2,erosion_3)) cv2.imshow(

形态学转换

筅森魡賤 提交于 2020-02-07 14:57:11
1、腐蚀 cv2.erode() 就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉(但是前景仍然 是白色)。这是怎么做到的呢?卷积核沿着图像滑动,如果与卷积核对应的原图 像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。 这回产生什么影响呢?根据卷积核的大小靠近前景的所有像素都会被腐蚀 掉(变为 0),所以前景物体会变小,整幅图像的白色区域会减少。这对于去除 白噪声很有用,也可以用来断开两个连在一块的物体等。 2、膨胀 cv2.dilate() 与腐蚀相反,与卷积核对应的原图像的像素值中只要有一个是 1,中心元 素的像素值就是 1。所以这个操作会增加图像中的白色区域(前景)。一般在去 噪声时先用腐蚀再用膨胀。因为腐蚀在去掉白噪声的同时,也会使前景对象变 小。所以我们再对他进行膨胀。这时噪声已经被去除了,不会再回来了,但是 前景还在并会增加。膨胀也可以用来连接两个分开的物体。 3、开运算先进行腐蚀运算再进行膨胀就叫做开运算, 被用作去除噪声,cv2.morphologhEx() opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) 4、闭运算,先膨胀再腐蚀,它经常被用来填充前景物体中的小洞,或者前景物体上的 小黑点。 closing = cv2.morphologyEx(img, cv2.MORPH

10 OpenCV形态学操作之膨胀与腐蚀

痞子三分冷 提交于 2020-02-04 03:42:39
一、形态学操作 图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学 形态学有四个基本操作:腐蚀、膨胀、开、闭 膨胀与腐蚀是图像处理中最常用的形态学操作手段,主要功能有: 消除噪声 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素 寻找图像中的明显的极大值区域或极小值区域 求出图像的梯度 二、膨胀 跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状 dilate(src,dst,kernel); 三、腐蚀 腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值 erode(src,dst,kernel); 四、相关API getStructuringElement(int shape, Size ksize, Point anchor) 形状 (MORPH_RECT \MORPH_CROSS \MORPH_ELLIPSE) 大小 锚点 默认是Point(-1, -1)意思就是中心像素 五、示例 # include <opencv2/opencv.hpp> # include <iostream> # include <math.h> using namespace cv ; using

灰度图像形态学膨胀与腐蚀

江枫思渺然 提交于 2020-02-02 00:15:37
与二值图像有些差异。 示例: (1)灰度膨胀 >> t=rand(7,8); >> t=ceil(t.*256)%t为灰度图像 t = 209 125 191 9 168 246 158 14 232 205 101 113 42 141 122 136 33 37 168 98 31 36 91 200 234 108 44 196 128 39 213 240 162 235 181 204 246 66 150 34 25 203 9 48 88 216 141 146 72 246 71 126 150 66 235 121 >> figure,imshow(t,[],'InitialMagnification','fit'); 结构元素: >> se=strel('square',3) se = Flat STREL object containing 9 neighbors. Neighborhood: 1 1 1 1 1 1 1 1 1 灰度膨胀操作: >> g=imdilate(t,se) g = 232 232 205 191 246 246 246 158 232 232 205 191 246 246 246 200 234 234 205 196 196 213 240 240 235 235 235 246 246 246 240 240 235 235

MATLAB 常用形态学操作函数

a 夏天 提交于 2020-02-02 00:13:23
常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html) 1、dilate函数 该函数能够实现二值图像的膨胀操作,有以下形式: BW2=dilate(BW1,SE) BW2=dilate(BW1,SE,…,n) 其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2=dilate(BW1,SE,…,n)表示执行膨胀操作n次。 2、erode 函数 该函数能够实现二值图像的腐蚀操作,有以下形式: BW2= erode(BW1,SE) BW2= erode(BW1,SE,…,n) 其中:BW2= erode(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行腐蚀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2= erode(BW1,SE,…,n)表示执行腐蚀操作n次。 3、bwmorph函数 该函数的功能是能实现二值图像形态学运算。它的格式如下: ① BW2=bwmorph(BW1,operation) ② BW2=bwmorph(BW1,operation,n) 其中:对于格式①

图像形态学提取边界和区域填充

杀马特。学长 韩版系。学妹 提交于 2020-01-31 17:57:37
1、二值图像边界提取、轮廓提取 如果一个点的8邻域都是1,则可以认为这个点是内部的点而不是边界上的点,可以删除这类点,剩下的就是边界上的点。根据腐蚀的特性,使用3*3的结构元素对图像进行腐蚀,可以得到内部的点,那么再用原图减去腐蚀图,就得到了图像的边界。 imgPath = 'E:\opencv_pic\src_pic\pic1.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 5); img2 = imerode(img, se); subplot(1,3,1),imshow(255-img),title('原始图像'); subplot(1,3,2),imshow(255-img2),title('腐蚀图像'); subplot(1,3,3),imshow(255-(img-img2)),title('边界点'); 2、形态学方法图像区域填充 区域填充可以认为是边界提取的反过程,已知边界情况下得到边界包含的区域。 已知某一图形,具有8连通边界,其内部有空白区域,那么怎么填充内部? 在图像内部确认一点,然后以此点为基准,循环膨胀,只要控制住膨胀后的图没有超过边界即可。 初始化:B0=种子点 循环膨胀: Do: B i+1 = (B i ⊕ S) ∩ A c ;

图像形态学

寵の児 提交于 2020-01-31 17:12:36
除了之前写的腐蚀、膨胀、开运算、闭运算。还有很多其它形态学计算。 1、图像梯度 形态学梯度就是膨胀图与腐蚀图之差,梯度从原区域的膨胀中减去了原区域的收缩,保留了图像的外边缘部分,也就是图像的轮廓。 imgPath = 'E:\opencv_pic\src_pic\pic2.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 3); img2 = imerode(img, se); img3 = imdilate(img, se); subplot(1,2,1),imshow(255-img),title('原始图像'); subplot(1,2,2),imshow(255-(img3-img2)),title('梯度图像'); 2、顶帽(Top Hat) 顶帽变换是指原始图像减去其开运算的图像,得到图像的噪声。 imgPath = 'E:\opencv_pic\src_pic\pic1.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 5); img3 = imopen(img, se); subplot(1,2,1),imshow(255-img)

数字图像处理四 | 灰度形态学操作原理及python实现

ぃ、小莉子 提交于 2020-01-27 05:30:30
图像处理总结4 灰度形态学 之前说过: 形态学起源于法国巴黎高等矿业学院,因为人家是搞地质的。 可见一斑,形态学的精要就是在于将图像看作是等高线组成的地形图,他的基本操作就是动土,平高填低等等。 之前的二值形态学针对的是二值图片,在地形上,就像是现代的建筑,拔地而起没有一定的梯度。 而这篇是针对灰度图片的形态学,这时的图片就更像自然界的地貌,像山川,像河谷。 基本操作 基本操作也是腐蚀和膨胀。 Dilation(膨胀): 先看公式: F ⨁ k = m a x a , b ∈ k { F ( x + a , y + b ) + k ( a , b ) } F\bigoplus k=max_{a,b\in k}\{F(x+a,y+b)+k(a,b)\} F ⨁ k = m a x a , b ∈ k ​ { F ( x + a , y + b ) + k ( a , b ) } 同样有两种算法。 1)平移 对原图先加上SE对应部分的值,再向SE对应的位置平移,然后取最大值。 比如,现在有一个一维的SE: [1,2,3], 中心点定为第一个点,就是“1”。 那么首先对应于“1”,则是原图位置不变加1. 对于“2”,原图灰度值加2,向右平移一位。 对于“3”,原图灰度值加3,向右平移两位。 最后将三张图重合,并在原图区域取最大值,作为结果图。 2)盖章 SE在原图上滑动,每个滑动的位置