建立网络以检测CT扫描中的裂缝

时间:2019-03-25 16:19:12

标签: python opencv image-processing neural-network

此问题说明是对以下问题的扩展:Detecting the presence of a black areas in a grayscale image

我正在提供整个问题,因此考虑将其放在单独的帖子中。

机器现在可以3D打印金属零件。它们按层进行操作-并且在添加每层后,将进行灰度扫描。以下图像分别在第2层和第75层拍摄。这些图像正是它们的外观。

但是,如果可以说在第75层的扫描中有裂纹,则扫描将其显示为暗线/曲线(不是黑色,但肯定比周围的灰色区域更暗)

目标是检测每一层的裂纹,以便立即停止进一步的打印。

这可以使用神经网络来完成吗?由于开发通用代码更为可取-相同的代码可用于其他部分的扫描。

我并不是真正地要求整个代码,而只是寻求解决方案的最佳方法。

这是第2层: Layer 2

这是第75层: Layer 75

1 个答案:

答案 0 :(得分:2)

是的,神经网络是3D打印零件中裂纹检测的可能解决方案。在打印完每一层之后,部分打印部分的图像将传递到神经网络。神经网络会将图像分类为“无裂纹”或“没有裂纹”。

样本数据是训练神经网络所必需的。您是否有3d打印部件中有裂纹的图像?希望不会!如果您知道裂缝通常看起来是什么样的,则可以创建合成数据的数据集并使用该数据集训练神经网络。这是我使用Python / OpenCV生成的破解示例: generated crack using python 这是我用来生成破解的代码:

import cv2, numpy as np, random
# Read source image
img = cv2.imread('/home/stephen/Desktop/lco7q.jpg')
# Create dx and dy arrays (this defines the crack
crack_length = 41
dy = np.random.normal(0,1,crack_length)+1
dx = np.random.normal(0,1,crack_length)+1
# Start the crack at 'a'
a = 0,123
# Iterate through each point in the crack
for i in range(crack_length-1):
    # Calculate which way the crack is going
    b = a[0] + dx[i] *i, a[1] + dy[i] *i
    # Draw a line
    cv2.line(img, tuple(np.array(a, int)), tuple(np.array(b, int)), 0, 4)
    # Go onto the next point
    a = b
# Show the image
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()