首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从scikit-image中提取特征周长坐标

从scikit-image中提取特征周长坐标
EN

Stack Overflow用户
提问于 2021-04-16 10:47:39
回答 1查看 106关注 0票数 0

我正在寻找提取特征周界的坐标。我的意图是使用这些坐标为.tif图像中所有感兴趣的特征找到最接近的边到边的欧几里德距离。我对scikit image比较陌生,不知道是否可以使用https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.regionprops提供的选项来完成这项工作?

我能够从skimage.measure.regionprops中提取填充区域的二进制布尔矩阵。

代码语言:javascript
复制
 [[False False  True  True  True False False False False False]
 [False False  True  True  True  True  True  True False False]
 [False False  True  True  True  True  True  True False False]
 [False False  True  True  True  True  True  True  True False]
 [False False False  True  True  True  True  True  True  True]
 [False  True  True  True  True  True  True  True  True  True]
 [False  True  True  True  True  True  True  True  True  True]
 [ True  True  True  True  True  True  True  True  True  True]
 [ True  True  True  True  True  True  True  True  True  True]
 [False  True  True  True  True  True  True  True  True  True]
 [False  True  True  True  True  True  True  True  True  True]
 [False  True  True  True  True  True  True  True  True False]
 [False  True  True  True  True  True  True  True False False]
 [ True  True  True  True  True  True  True False False False]
 [ True  True  True  True  True  True False False False False]
 [False False  True  True  True False False False False False]]

在一些平滑、膨胀和侵蚀技术之后,使用二进制logistic回归分类器基于灰度和形态学属性识别这些特征。

我尝试获取周长坐标:

代码语言:javascript
复制
for m in matrix:
    y, x = m.shape
    l = []
    for i in np.arange(x):
        r = np.argwhere(m[:, i][m[:, i] == 0]).ravel().reshape(-1, 1)
        t = np.full(shape=len(r), fill_value=i, dtype=int).reshape(-1, 1)
        if i==0 or i==x:
            coords = np.hstack((r, t))
            l.append(coords)
        else:
            if len(r) <= 1:
                coords = np.hstack((r, t))
                l.append(coords)
            else:
                r = r[[0, -1]] # Problem, may not capture all coordinates.
                # if the feature has concave regions.
                t = np.full(shape=len(r), fill_value=i, dtype=int).reshape(-1,1)
                coords = np.hstack((r, t))
                l.append(coords)

我认为如果没有凹面区域,这是可行的,不幸的是,我看到的一些特征肯定是新月形的。我想我可以在另一个轴上第二次运行这个函数,并确定唯一的坐标?我可以想象有一个更好的方法。

另外,最终我需要将这些坐标映射回原始图像坐标。我想我可以使用边界框角来进行坐标转换。如果我可以对坐标进行排序,这样我就可以将它们绘制为要素周围的多边形,但这不是进行最小边到边距离计算所必需的。

这个解决方案是不是可以作为udf添加到scikit-image.measure.regionsprops 'extra_properties‘参数中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-03 00:27:44

有了比拉尔的回应,我才能想出一个合适的解决方案。

代码语言:javascript
复制
perimeter = binary_image ^ binary_erosion(binary_image)
for i in [0, -1]:
   vedges = np.argwhere(m[:, i] == True).ravel()
   if len(vedges) == 0: continue
   for x in vedges:
       perimeter[x, i] = True
   hedges = np.argwhere(m[i, :] == True).ravel()
   if len(hedges) == 0: continue
   for y in hedges:
       perimeter[i, y] = True

coordinates = np.argwhere(perimeter == True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67118444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档