【发布时间】:2021-07-11 01:54:32
【问题描述】:
我正在寻找提取要素周长的坐标。我的意图是使用这些坐标为 .tif 图像中的所有感兴趣的特征找到最近的边到边欧几里得距离。我对 scikit-image 比较陌生,想知道是否可以使用 https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.regionprops 提供的选项来完成此操作?
我能够从 skimage.measure.regionprops 中提取填充区域二进制布尔矩阵。
[[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]]
在经过一些平滑、膨胀和侵蚀技术之后,使用二元逻辑回归分类器根据灰度和形态特性识别这些特征。
我尝试获取周界坐标:
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' 参数吗?
【问题讨论】:
-
请edit 发布您自己的努力来解决这个问题。后者最好在代码中,这称为minimal reproducible example。
-
@Bilal 我认为我能够相对接近一个解决方案,但我想有一个比我尝试这样做更有效的解决方案。
-
如果您进行了边界提取,例如Morphological gradient 或
img - erosion (img),您可能有自己的边界,那么您可以创建一个nxn数组,其中每个n点之间有距离,您可以添加不小于n四分之一的索引差异条件,以确保您正在寻找形状另一侧的点。
标签: python image-processing scikit-image