def prob_heatmap_features(phm, cutoff, k=1, nb_cls=3):
fea_list = []
if phm is None: # deal with missing view.
for _ in xrange(nb_cls - 1): # phms depending on the # of cls.
fea = {'nb_regions': np.nan, 'total_area': np.nan,
'global_max_intensity': np.nan}
for j in xrange(k):
reg_fea = {
'area': np.nan, 'area_ratio': np.nan, 'area_ratio2': np.nan,
'eccentricity': np.nan, 'eig1': np.nan, 'eig2': np.nan,
'equivalent_diameter': np.nan, 'euler_number': np.nan,
'extent': np.nan,
'major_axis_length': np.nan, 'max_intensity': np.nan,
'mean_intensity': np.nan, 'minor_axis_length': np.nan,
'orientation': np.nan, 'perimeter': np.nan,
'solidity': np.nan,
}
for key in reg_fea.keys():
new_key = 'top' + str(j+1) + '_' + key
reg_fea[new_key] = reg_fea.pop(key)
fea.update(reg_fea)
fea_list.append(fea)
return fea_list
for i in xrange(1, nb_cls):
phm_ = phm[:,:,i]
hm_bin = np.zeros_like(phm_, dtype='uint8')
hm_bin[phm_ >= cutoff] = 255
hm_label = label(hm_bin)
props = regionprops(hm_label, phm_)
fea = {
'nb_regions':len(props),
'total_area':total_area(props),
'global_max_intensity':global_max_intensity(props),
}
nb_reg = min(k, len(props))
idx = topK_region_idx(props, k)
for j,x in enumerate(idx):
reg_fea = region_features(props[x])
for key in reg_fea.keys():
new_key = 'top' + str(j+1) + '_' + key
reg_fea[new_key] = reg_fea.pop(key)
fea.update(reg_fea)
for j in xrange(nb_reg, k):
reg_fea = region_features()
for key in reg_fea.keys():
new_key = 'top' + str(j+1) + '_' + key
reg_fea[new_key] = reg_fea.pop(key)
fea.update(reg_fea)
fea_list.append(fea)
return fea_list
评论列表
文章目录