使用 skimage 和 napari 将 blob_dog 中的斑点添加到 3D 图像堆栈
Adding blobs from blob_dog to a 3D image stack using skimage and napari
我正在尝试使用 blob log 或 blog dog 在使用 skimage 的 3D 图像中进行 blob 检测。我使用 napari 和二进制 blob (3D) 图像作为样本(但这不是我稍后要使用的图像,它只有清晰的 blob)。但是,我无法将 blob 应用到 image/adding 查看器。
Skimage 有一个使用 matplotlib 向图像添加圆圈的 2D 图像示例,但我想用它来识别 3D 图像上的斑点并创建二值图像(本质上是掩码)或标签。
这就是我所拥有的,但我不确定从这里到哪里去:
from skimage.data import binary_blobs as BBlobs
import pandas as pd
import imageio as io
import numpy as np
import napari
from skimage import filters, morphology, measure, exposure, segmentation, restoration, feature
import skimage.io as skio
from scipy import ndimage as ndi
def add_to_viewer(layer_name, name):
viewer.add_image(
layer_name,
name = name,
scale = spacing
)
bblobs = BBlobs(n_dim=3)
add_to_viewer(bblobs, 'image')
blobs = feature.blob_dog(bblobs)
for blob in blobs:
z,y,x,area = blob
This is skimage's blob feature detection example.
如有任何帮助,我们将不胜感激。
你想做什么?您需要 blob 大小还是只需要位置?答案在很大程度上取决于问题。这是 三个 个答案:
- 只需将斑点想象成点即可:
viewer.add_points(
blobs[:, :-1], size=blobs[:, -1], name='points', scale=spacing
)
- 忽略大小(假设例如您稍后要进行分水岭,这无关紧要),创建一个标签卷,每个坐标一个标签:
from skimage.util import label_points
labels = label_points(blobs[:, :-1], bblobs.shape)
viewer.add_labels(labels, scale=spacing)
同时请注意 label_points
relies on the current main branch (unreleased) of scikit-image, but you can just copy the source code。 scikit-image 0.19 应该会在此 post 之后不久发布,并带有该功能。
- 制作标签层并使用napari的标签层API直接在每个点paint一个斑点,包括斑点检测的大小:
labels_layer = viewer.add_labels(
np.zeros_like(bblobs, dtype=np.int32), name='blobs', scale=spacing
)
for i, blob in enumerate(blobs, start=1):
labels_layer.selected_label = i
labels_layer.brush_size = blob[-1]
labels_layer.paint(blob[:-1], refresh=False)
labels_layer.refresh()
场景 1 和 3 中的一个小警告是,我认为斑点大小是“西格玛”,这意味着大部分斑点都在中心的 2 西格玛范围内,所以您可能需要将所有尺寸乘以 2 才能获得漂亮的显示效果。
我正在尝试使用 blob log 或 blog dog 在使用 skimage 的 3D 图像中进行 blob 检测。我使用 napari 和二进制 blob (3D) 图像作为样本(但这不是我稍后要使用的图像,它只有清晰的 blob)。但是,我无法将 blob 应用到 image/adding 查看器。
Skimage 有一个使用 matplotlib 向图像添加圆圈的 2D 图像示例,但我想用它来识别 3D 图像上的斑点并创建二值图像(本质上是掩码)或标签。
这就是我所拥有的,但我不确定从这里到哪里去:
from skimage.data import binary_blobs as BBlobs
import pandas as pd
import imageio as io
import numpy as np
import napari
from skimage import filters, morphology, measure, exposure, segmentation, restoration, feature
import skimage.io as skio
from scipy import ndimage as ndi
def add_to_viewer(layer_name, name):
viewer.add_image(
layer_name,
name = name,
scale = spacing
)
bblobs = BBlobs(n_dim=3)
add_to_viewer(bblobs, 'image')
blobs = feature.blob_dog(bblobs)
for blob in blobs:
z,y,x,area = blob
This is skimage's blob feature detection example.
如有任何帮助,我们将不胜感激。
你想做什么?您需要 blob 大小还是只需要位置?答案在很大程度上取决于问题。这是 三个 个答案:
- 只需将斑点想象成点即可:
viewer.add_points(
blobs[:, :-1], size=blobs[:, -1], name='points', scale=spacing
)
- 忽略大小(假设例如您稍后要进行分水岭,这无关紧要),创建一个标签卷,每个坐标一个标签:
from skimage.util import label_points
labels = label_points(blobs[:, :-1], bblobs.shape)
viewer.add_labels(labels, scale=spacing)
同时请注意 label_points
relies on the current main branch (unreleased) of scikit-image, but you can just copy the source code。 scikit-image 0.19 应该会在此 post 之后不久发布,并带有该功能。
- 制作标签层并使用napari的标签层API直接在每个点paint一个斑点,包括斑点检测的大小:
labels_layer = viewer.add_labels(
np.zeros_like(bblobs, dtype=np.int32), name='blobs', scale=spacing
)
for i, blob in enumerate(blobs, start=1):
labels_layer.selected_label = i
labels_layer.brush_size = blob[-1]
labels_layer.paint(blob[:-1], refresh=False)
labels_layer.refresh()
场景 1 和 3 中的一个小警告是,我认为斑点大小是“西格玛”,这意味着大部分斑点都在中心的 2 西格玛范围内,所以您可能需要将所有尺寸乘以 2 才能获得漂亮的显示效果。