膨胀、腐蚀、开闭运算

因为形态学运算会对建模效果产生很大影响,所以如何更好地把形态学算法运用到岩心图像中是我所做工作的前置任务之一。

这里先对二维图像进行以上形态学运算,等到工作后期会从二维图像推广到三维图像。到时候再续更。

代码部分:

第一步:这里先对图像进行分割,分割阈值选取66(阈值是通过Otsu方法得到的)。接下来定义卷积核,我们接下来的形态学运算用到的卷积核都是在这里定义的。

import numpy as np
import cv2 
import copy

img = cv2.imread('E:/shale10053.bmp')#读取图片
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#灰度化
ret, img_b = cv2.threshold(img_gray, 66, 255, cv2.THRESH_BINARY)#二值化
#参数MORPH_CROSS交叉形, 3x3大小
conv_kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3, 3))#生成5x5的全1矩阵.矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELLIPSE;

第二步:对分割完成后的二值图像进行膨胀、腐蚀、开闭运算。其中开运算可分解为<先膨胀后腐蚀>,闭运算可分解为<先腐蚀后膨胀>。

cv2.imshow("gray",img_gray)#显示灰度图像
cv2.imshow("bin_img ", img_b )#显示二值图片
img_erosion = cv2.erode(img_b, conv_kernel)#腐蚀运算
img_dilation = cv2.dilate(img_b, conv_kernel)#膨胀运算
img_opening = cv2.morphologyEx(img_b, cv2.MORPH_OPEN, conv_kernel)#开运算,先腐蚀再膨胀
img_closing = cv2.morphologyEx(img_b, cv2.MORPH_CLOSE,  conv_kernel)#闭运算,先膨胀再腐蚀
cv2.imshow("erosion", img_erosion1)#显示腐蚀运算图片
cv2.imshow("dilation", img_dilation1)#显示膨胀图片
cv2.imshow('opening',img_opening)#显示开运算图像
cv2.imshow('closing',img_closing)#显示闭运算图像
cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下图所示:

 可以看出,形态学运算是对白色部分做运算的(这里我还不知道怎么指定组分,但是并不影响后期用处理三维模型的时候对指定组分进行三维形态学运算)

猜你喜欢

转载自blog.csdn.net/Zhaohui_Zhang/article/details/120517761
今日推荐