我有一批相似的图像需要分析。
之后
- 定阈
- 使用
skimage.morphology.reconstruction
填充孔(here使用示例) - 图像闭合
我得到了这样的图像:
我对形状的边缘感兴趣,特别是原始灰度图像中垂直线的斜率。我想我可以使用Canny来获得轮廓,这确实给了我:
我的问题:
1.我该如何分离近似垂直和水平的边缘呢?它们对我来说有着非常不同的意义,因为我对相邻水平线之间发生的事情一点也不感兴趣(我宁愿从图像中剪切这些部分),而对垂直线周围发生的事情(黑白图像中的白色周围)感兴趣。
1.我会假设我的线应该是直的(可能有一个斜坡,但噪音太高)。我该如何平滑轮廓线?
1.最后我想回到灰度图像,看看垂直线附近的像素统计。如何从Canny找到的边缘中提取线的位置信息?
我的代码:
im_th= cv2.inRange(img, 0, 500, cv2.THRESH_BINARY)
seed = np.copy(im_th)
seed[1:-1, 1:-1] = im_th.max()
mask = im_th
filled = reconstruction(seed, mask, method='erosion').astype(np.uint8)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(4,4))
closed = cv2.morphologyEx(filled,cv2.MORPH_CLOSE, kernel=kernel)
edges = cv2.Canny(cv2.medianBlur(closed, 5), 50, 150)
1条答案
按热度按时间vc9ivgsu1#
你在寻找类似Hough transform的东西吗?你应该可以直接在你检测到的边缘上使用它。
1.水平线不影响结果。(您可以按Angular 筛选线)
1.稍微倾斜的线不会影响结果。
我从OpenCV教程中复制了代码样本,并在您的图像上进行了测试,以找到两条垂直线: