Измерьте скорость роста трещины из видео - PullRequest
4 голосов
/ 10 ноября 2019

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

Мне нужно измерить, как быстро растёт трещина. Как мне это сделать? (Я могу код на Python).

Есть ли способ измерить живую скорость или скорость роста трещины от одного кадра к другому? enter image description here

Ссылка на диск Google на серию сделанных снимков - https://drive.google.com/open?id=189cv8B4rm3lhSgT6OYfI_aN0Xmqi-tYi

Пожалуйста, сообщите.

Я пробовал выполнить заливку из OpenCV согласно предложениямна этот вопрос. Но возвращаемая маска выглядит следующим образом:

enter image description here

h, w = resized.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8) 
seed = (int(w/2),int(h/2))

# Floodfill from point (0, 0)
num,im,mask,rect = cv2.floodFill(resized, mask, (0,0), (255,0,0), (10,)*3, (10,)*3, floodflags)

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

Я попытался установить пороговое значение следующим образом:

th, im_th = cv2.threshold(im, 100, 255, cv2.THRESH_BINARY);

Это дает: enter image description here

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

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 10 ноября 2019

При правильном подходе к сегментации вы получите подробную геометрию объекта, выделенную из одного кадра. Например:

enter image description here

Если вы обработаете несколько кадров, вы сможете увидеть эволюцию геометрии во времени. Имея это, должно быть легко сравнивать полигоны, чтобы найти изменения формы, трещины и т.д .:

enter image description here

Я использовал для работы с видео 4K, чтобы получить все необходимые детали и хорошую точность. Вам могут не понадобиться все эти данные, но видео все еще более гибкое.

Вот полный пример: https://youtu.be/g2KyfrBtTA4

Приведите несколько примеров, если вы хотите получить более подробные рекомендации.

Обновление

Реальные примеры всегда полезны. Таким образом, вы можете разбить трещину:

enter image description here

или вещество: enter image description here

или оба:enter image description here

По сути, вам нужно улучшить общее качество ввода (фокус, фон под веществом и т. Д.).

Как показал Марк Сетчелл, вы можетеПолучите нежелательный фон как часть формы результата (правая сторона трещины), поэтому лучше убедиться, что этого не произойдет, или просто попытаться проанализировать только вещество.

В любом случае, ваша задача не кажется сложной. Это может быть тривиально, если вы можете улучшить качество изображения и сделать некоторые упрощения для окружающей среды (определенный фон и т. Д.).

0 голосов
/ 11 ноября 2019

Я ценю, что вы только начинаете, но у вас есть некоторые проблемы с вашим видео. Во-первых, освещение не самое лучшее и непоследовательное, потому что люди передвигаются вокруг него и отбрасывают тени - оно также лучше не освещает фон за трещиной - было бы лучше, если бы оно было на высоте. трещина и больше сияет в нем, чтобы он лучше освещал фон за трещиной. Во-вторых, вы можете обойтись без движения камеры в процессе эксперимента!

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

Наконецзатем вы хотите сделать что-то вроде заливки или заливки в пределах вашего материала (возможно, путем маскировки), чтобы заполнить трещину другим цветом. Тогда довольно просто измерить длину трещины и самый левый ее размер.

enter image description here

0 голосов
/ 10 ноября 2019

В зависимости от того, насколько медленно образуется трещина, вам, вероятно, не нужно видео;Скорее всего, вы все равно будете производить выборку каждые X кадров и выбрасывать все лишние кадры. То, что вам нужно, - это достаточное количество кадров, чтобы получить «инкрементальные» изменения в трещине, не получая слишком много кадров, что становится слишком дорогим в вычислительном отношении.

  1. Если вы можете тщательно контролировать условия освещения в вашей установкетогда тебе повезло! Это становится очень простой проблемой. Вы можете взять гистограмму пикселей (для этого у openCV есть маркеры, но PIL и numpy тоже);вы должны получить две семьи цвета;тот, который является цветом внешней стороны вещества, и другой, который смещен тенью в трещине.

    Вы также можете попытаться значительно увеличить контраст в каждом изображении / кадре, чтобы получить двоичную маску трещины, или запустить детектор края над изображением. Эти методы приведут к кадрам, которые значительно легче обрабатывать, чем необработанные кадры. Вы даже можете передать их в процесс скелетонизации, чтобы сгенерировать векторное представление линии в координатах изображения XY.

  2. Если вы не можете управлять освещением илиобразец подобен цвету трещины, вам, вероятно, придется использовать методы обнаружения объектов , но вряд ли есть существующий «детектор трещин», поэтому вам, возможно, придется либо создать свой собственный, либо искатькакие другие детекторы служат хорошим показателем цвета и формы образующейся трещины.

Я бы настоятельно рекомендовал попробовать первый вариант, если это вообще возможно;математика пикселей и гистограмм намного проще, чем другие методы.

...