因为形态学运算会对建模效果产生很大影响 所以如何更好地把形态学算法运用到岩心图像中是我所做工作的前置任务之一。
这里先对二维图像进行以上形态学运算 等到工作后期会从二维图像推广到三维图像。到时候再续更。
代码部分
第一步 这里先对图像进行分割 分割阈值选取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()
运行结果如下图所示
可以看出 形态学运算是对白色部分做运算的 这里我还不知道怎么指定组分 但是并不影响后期用处理三维模型的时候对指定组分进行三维形态学运算



