我正在尝试在scikit图像中使用斑点检测。 blob_log
应该为2D图像返回Nx3的数组,对于3D图像(?)返回Nx4的数组(?)2D图像中的前两个值是(x,y,sigma),在3D中是(p,x,y sigma)
我正在尝试将this image加载到我的代码中,该代码看起来有很多可观察到的斑点,并且是2D图像。
我有几个问题:
(1)blob_log
返回一个Nx4数组,这意味着将其作为3D图像加载。当我尝试打印它时,它看起来只是一堆空数组,我不知道如何处理,因为当我plt.show()
时,它是2D图像。
(2)如果N是它计算出的斑点数,那么它只给我不到总图像的10%-我相信这是由于该图像是在白色背景上进行成像的事实blob_log
很难注意到-正确吗?
(3)我不了解Blob documentation末尾的for循环如何工作?如何在图像上绘制圆圈?很抱歉,这是一个基本问题,但令我感到沮丧,因为我认为这会帮助我解决其他我想知道的事情。
试图弄清楚发生了什么:
(1)加载data.coins()
并将其打印出来,这为我提供了一个不错的值数组,我认为这些值是2D的,但仍无法解释为什么我要加载的图像未被识别为2D。
(2)我试图加载data.coins()
,这显然是带有圆形图像的图像,并且被sigma和threshold设置所迷惑,根据设置,我得到了各种不同的值-有没有一种好的方法来找出最好的方法,而不必弄乱设置,直到我得到可行的方法?
由于代码的长度和问题,下面仅是适用的部分,但是我的整个代码可以是found here
from skimage import data, feature, exposure, io
import matplotlib
import matplotlib.pyplot as plt
img = data.coins()
#img = io.imread('gfp_test.png') #this is the image I linked above just in my dir
print(img)
print(type(img))
A = feature.blob_log(imgG, max_sigma = 30, num_sigma = 10, threshold = .4)
print (A)
谢谢您的帮助!
答案 0 :(得分:1)
(1)您有彩色图像,而blob_*
需要灰度图像。在使用斑点查找功能之前,请先使用skimage.color.rgb2gray
将图像转换为灰度。有关更多详细信息,请参见我们的crash course on NumPy for images。
(2)让我们看看上面的方法是否可以解决您的问题。我认为查找斑点是本地操作,因此边缘周围的白色框可能不是问题。
(3)是的,变量命名可能更清晰。密钥在这里:sequence = zip(blobs_list, colors, titles)
。如果您查看这些单独的变量是什么,它们就是长度为3的列表,其中包含三种不同的Blob查找方法,三种不同的颜色和三种不同的标题(三种方法的名称)的结果。因此,外部for循环遍历方法和图中的三个面板。 (您应该查看matplotlib documentation for subplots以获得更多信息。)
然后,内部循环遍历单个斑点查找方法的结果,并在每个结果周围画一个圆圈。您将看到x / y换位,这是由于我们的图像(请参见上面的崩溃过程)与matplotlib画布之间的坐标约定不同而导致的。然后我们create a circle为每个Blob设置适当的半径,并将其添加到matplotlib轴。有关添加补丁的更多信息,请参阅Circle文档中链接的示例。
希望这会有所帮助!