我正在对肺结节图像执行斑点检测例程。对于每个图像,斑点检测器将返回检测到的斑点及其坐标和半径的数组。然后,我检查地面真相肺结节的坐标是否在任何斑点内,并返回true或false(这将成为该过程下一阶段的训练标签)。
我遇到的问题是,对于某些图像,结节位于一个以上的斑点内,因此图像具有两个(或多个)真正的阳性检测结果,而不是一个。因此,对于这些情况,我想找到最接近地面真相的斑点,并将那个斑点标记为真正的阳性。
但是,我正努力以仅比较每个图像的阳性检测结果的方式对数据帧进行切片。我拥有的数据框是这样的:
Blob_Y Blob_X Blob_R True_X True_Y Label
JPCLN001.npy 0 840.0 220.0 16.970563 817.0 346.0 0
1 832.0 496.0 16.970563 817.0 346.0 0
2 496.0 872.0 69.767869 805.0 483.5 1
3 480.0 796.0 16.970563 805.0 483.5 1
4 820.0 888.0 56.568542 817.0 346.0 0
JPCLN002.npy 5 840.0 220.0 16.970563 817.0 346.0 0
6 832.0 496.0 16.970563 817.0 346.0 1
7 824.0 256.0 30.169889 817.0 346.0 0
8 824.0 172.0 16.970563 817.0 346.0 0
9 820.0 888.0 56.568542 817.0 346.0 0
对于图像JPCLN001.npy
,我想选择标签等于1的行,然后为第2行和第3行计算从(True_X, True_Y)
和(Blob_X, Blob_Y)
开始的勾股距离。需要为坐标指定一个标签1,假定另一个为假阳性并标记为0。
数据框中有四个图像需要执行此操作。
我已经尝试过通过选择每个图像的相关行并将它们分配给新的数据框,进行距离计算然后将这些行重新插入到原始数据框中来做到这一点,就像这样:
df = blobs.loc['JPCLN061.npy']
df = df[df['Label'] == 1]
df = df.assign(dist = np.sqrt((df['Blob_X']-df['True_X'])**2 + (df['Blob_Y']-df['True_Y'])**2))
df['Label'][df['dist'] == df['dist'].max()] = 0
df.drop(['dist'], inplace = True, axis = 1)
blobs.update(df)
blobs.update(df)
不会更新原始数据帧(我认为这是由于每个数据帧的索引之间的不匹配)。我的方法似乎也很麻烦,因此,如果有人可以帮助我做到这一点,那将是非常感谢,因为我一天中大部分时间都在工作!
答案 0 :(得分:0)
作为一个快速的示例,如何:
df = blobs.loc['JPCLN061.npy']
df = df[df['Label'] == 1]
df = df.assign(dist = np.sqrt((df['Blob_X']-df['True_X'])**2 + (df['Blob_Y']-
df['True_Y'])**2))
df = df.sort_values('dist', ascending=False)
blobs.loc[('JPCLN061.npy', df.index[0]), 'Label'] = 0
如果您发布代码来创建df,我很乐意帮助您提出更有效的方式!