我的实验涉及对物质施加压力,使物质最终破裂。裂纹随着时间和施加的压力而增长。我有一个设置,可以在固定的时间间隔拍摄物质的照片。

我需要测量裂纹增长的速度。我该怎么做? (我可以用 Python 编码)。

有没有办法测量从一帧到另一帧的实时速度或裂纹增长速度?
python - 从视频测量裂缝的增长速度-LMLPHP

谷歌驱动器链接到一系列拍摄的照片 - https://drive.google.com/open?id=189cv8B4rm3lhSgT6OYfI_aN0Xmqi-tYi

好心提醒。

我根据对这个问题的建议尝试了来自 OpenCV 的 floodFill。但是返回的掩码如图:

python - 从视频测量裂缝的增长速度-LMLPHP

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);

这给出:
python - 从视频测量裂缝的增长速度-LMLPHP

我不确定这是否能让我过滤掉背景并单独在裂缝上绘制一个边界框。请指教。

提前致谢。

最佳答案

根据裂缝形成的速度,您可能不需要视频;无论如何,您可能最终会每 X 帧采样一次,并将所有额外的帧扔掉。您想要的是足够的帧来在裂缝中获得“增量”变化,而不会获得太多的帧而导致计算成本过高。

  • 如果您可以在设置中仔细控制照明条件,那么您很幸运!这变成了一个非常简单的问题。您可以获取像素的直方图(openCV 具有处理此功能,但 PIL 和 numpy 也有);你应该得到两个颜色的家庭;一种是物质外部的颜色,另一种是由裂缝中的阴影造成的。
    您还可以尝试显着增加每个图像/帧的对比度以获得裂纹的二进制掩码,或者在图像上运行 edge detector。这些技术将导致帧比原始素材更容易处理。您甚至可以将这些输入到骨架化过程中,以便在 XY 图像坐标中生成基于矢量的线条表示。
  • 如果您无法控制照明,或者 sample 与裂缝颜色相似,您可能需要使用 object detection 技术,但不太可能存在现有的“裂缝检测器”,因此您可能需要构建您的自己的,或寻找其他检测器作为形成裂纹的颜色和形状的良好代表。

  • 如果可能,我强烈建议您尝试第一个选项;像素和直方图数学比其他技术容易得多。

    关于python - 从视频测量裂缝的增长速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58790467/

    10-13 04:33