我有一个二维数组img_pseudo_df
我用imshow()
绘制并代表一些伪荧光数据,其中每个荧光点的中心代表一个细胞:
img = plt.imshow(img_pseudo_df.T, cmap=plt.cm.gray, interpolation='none', extent=(0.0,N_pixels,0.0,N_pixels))
在上面我正在将图的大小先验地修改为N_pixels
,我为了方便而调换图像。
结果图如下所示:
在这个图的顶部,我想覆盖一个scatter()
图,其中每个点代表一个单元格。我正在传递x
和y
坐标的像素值(每个坐标在[0,N_pixels]
区间内):
plt.scatter(x,y)
然而由于某种原因,这些坐标相对于图中荧光的坐标显得缩小了:
我无法弄清楚我做错了什么,以及如何将imshow坐标与我的点匹配。这显然是imshow()
的常见问题,但到目前为止我找不到对我有用的答案。
特别是,x
和y
包含img_pseudo_df
数组的行列的索引值。该数组最初由
img_pseudo_df = zeros((N_pixels,N_pixels))
然后(x,y)
中的像素img_pseudo_df
被分配了某个signal
值,并通过2D高斯滤波器进行卷积(以创建伪荧光外观):
for cell,pixel in enumerate(zip(x,y)):
img_pseudo_df[pixel] = signals[cell] # signals contains N cells values and there are N cells (x,y) pairs
img_pseudo_df = convolve2d(space, gaussian_kern(20), mode='valid')
由于过滤器以零为中心,由以下构建:
def gauss_kern(size, sizey=None):
""" Returns a normalized 2D gauss kernel array for convolutions """
size = int(size)
if not sizey:
sizey = size
else:
sizey = int(sizey)
x, y = mgrid[-size:size+1, -sizey:sizey+1]
g = exp(-(x**2/float(size)+y**2/float(sizey)))
return g / g.sum()
我希望荧光点位于细胞位置(x,y)
的中心位置。
提前感谢您的帮助。
干杯,
中号
答案 0 :(得分:0)
好的,卷积确实存在错误。正确的选项是mode='same'
,以便使得到的数字与最初为空的`img_pseudo_df'匹配。
干杯,
M