def grow_seed(img, seed_loc):
tmp = np.array(img)
for i in range(DOWNSAMPLE): # Downsample the original image
img_ds = downsample(tmp)
tmp = img_ds
seed_loc_ds = (int(seed_loc[0]*RATE**DOWNSAMPLE), int(seed_loc[1]*RATE**DOWNSAMPLE))
seed_pixel_ds = img_ds[seed_loc_ds]
edges_ds = cv2.Canny(cv2.GaussianBlur(img_ds, (3, 3), 0), CANNY[0], CANNY[1])
seed_mask_ds = np.zeros(get_size(img_ds))
seed_mask_ds[seed_loc_ds] = 1
visited = np.zeros(get_size(img_ds))
def search(point, seed_pixel):
if point[0] < 0 or point[1] < 0 or point[0] >= img_ds.shape[0] or point[1] >= img_ds.shape[1]:
return
if visited[point]:
return
elif edges_ds[point]:
return
elif(dist(img_ds[point], seed_pixel) < SEED_TOL):
visited[point] = 1
seed_mask_ds[point] = 1
for i in range(4):
search((point[0]+search_directions[i][0], point[1]+search_directions[i][1]), seed_pixel)
for i in range(SEED_ITER):
search(seed_loc_ds, seed_pixel_ds)
seed_pixel_ds = np.mean(img_ds[np.where(seed_mask_ds == 1)], axis = 0)
print(seed_pixel_ds)
visited[:, :] = 0
for i in range(DOWNSAMPLE):
seed_mask_ds = upsample(seed_mask_ds)
seed_mask_ds[np.where(seed_mask_ds > 0.5)] = 1
seed_mask_ds[np.where(seed_mask_ds <= 0.5)] = 0
return seed_mask_ds
评论列表
文章目录