Построение сети для обнаружения трещин в компьютерной томографии - PullRequest
2 голосов
/ 25 марта 2019

Это постановка проблемы является продолжением этой проблемы: Обнаружение наличия черных областей на изображении в градациях серого

Я предоставляю всю проблему под рукой и поэтому думаю, что она включаетэто в отдельном посте.

Машины теперь могут печатать металлические детали в 3-х измерениях.Они делают это в слоях - и после добавления каждого слоя выполняется сканирование в оттенках серого.Следующие изображения сделаны на слое 2 и слое 75 соответственно.Эти изображения выглядят именно так, как они должны выглядеть.

Однако, если, допустим, при сканировании на слое 75 имеется трещина, то при сканировании она отображается как темная линия / кривая (не темно-черная, но определеннотемнее, чем окружающие серые области)

Цель состоит в том, чтобы обнаружить эту трещину на каждом слое, чтобы можно было немедленно прекратить дальнейшую печать.

Можно ли это сделать с помощью нейронной сети?Поскольку гораздо предпочтительнее разрабатывать общий код - этот же код можно использовать для сканирования какой-то другой части.

На самом деле я не спрашиваю весь код, просто наилучший из возможных подходов крешение.

Это слой 2: Layer 2

Это слой 75: Layer 75

1 Ответ

2 голосов
/ 25 марта 2019

Да, нейронная сеть - это возможное решение для обнаружения трещин в вашей 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()
...