我的实验涉及对物质施加压力,使物质最终破裂。裂纹随着时间和施加的压力而增长。我有一个设置,可以在固定的时间间隔拍摄物质的照片。
我需要测量裂纹增长的速度。我该怎么做? (我可以用 Python 编码)。
有没有办法测量从一帧到另一帧的实时速度或裂纹增长速度?
谷歌驱动器链接到一系列拍摄的照片 - https://drive.google.com/open?id=189cv8B4rm3lhSgT6OYfI_aN0Xmqi-tYi
好心提醒。
我根据对这个问题的建议尝试了来自 OpenCV 的 floodFill。但是返回的掩码如图:
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);
这给出:
我不确定这是否能让我过滤掉背景并单独在裂缝上绘制一个边界框。请指教。
提前致谢。
最佳答案
根据裂缝形成的速度,您可能不需要视频;无论如何,您可能最终会每 X 帧采样一次,并将所有额外的帧扔掉。您想要的是足够的帧来在裂缝中获得“增量”变化,而不会获得太多的帧而导致计算成本过高。
您还可以尝试显着增加每个图像/帧的对比度以获得裂纹的二进制掩码,或者在图像上运行 edge detector。这些技术将导致帧比原始素材更容易处理。您甚至可以将这些输入到骨架化过程中,以便在 XY 图像坐标中生成基于矢量的线条表示。
如果可能,我强烈建议您尝试第一个选项;像素和直方图数学比其他技术容易得多。
关于python - 从视频测量裂缝的增长速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58790467/