MCPcopy Create free account
hub / github.com/thygate/stable-diffusion-webui-depthmap-script / clean_far_edge

Function clean_far_edge

inpaint/utils.py:665–836  ·  view source on GitHub ↗
(mask_edge, mask_edge_with_id, context_edge, mask, info_on_pix, global_mesh, anchor)

Source from the content-addressed store, hash-verified

663 return mesh, add_node_time, add_edge_time, add_far_near_time
664
665def clean_far_edge(mask_edge, mask_edge_with_id, context_edge, mask, info_on_pix, global_mesh, anchor):
666 if isinstance(mask_edge, torch.Tensor):
667 if mask_edge.is_cuda:
668 mask_edge = mask_edge.cpu()
669 mask_edge = mask_edge.data
670 mask_edge = mask_edge.numpy()
671 if isinstance(context_edge, torch.Tensor):
672 if context_edge.is_cuda:
673 context_edge = context_edge.cpu()
674 context_edge = context_edge.data
675 context_edge = context_edge.numpy()
676 if isinstance(mask, torch.Tensor):
677 if mask.is_cuda:
678 mask = mask.cpu()
679 mask = mask.data
680 mask = mask.numpy()
681 mask = mask.squeeze()
682 mask_edge = mask_edge.squeeze()
683 context_edge = context_edge.squeeze()
684 valid_near_edge = np.zeros_like(mask_edge)
685 far_edge = np.zeros_like(mask_edge)
686 far_edge_with_id = np.ones_like(mask_edge) * -1
687 near_edge_with_id = np.ones_like(mask_edge) * -1
688 uncleaned_far_edge = np.zeros_like(mask_edge)
689 # Detect if there is any valid pixel mask_edge, if not ==> return default value
690 if mask_edge.sum() == 0:
691 return far_edge, uncleaned_far_edge, far_edge_with_id, near_edge_with_id
692 mask_edge_ids = dict(collections.Counter(mask_edge_with_id.flatten())).keys()
693 for edge_id in mask_edge_ids:
694 if edge_id < 0:
695 continue
696 specific_edge_map = (mask_edge_with_id == edge_id).astype(np.uint8)
697 _, sub_specific_edge_maps = cv2.connectedComponents(specific_edge_map.astype(np.uint8), connectivity=8)
698 for sub_edge_id in range(1, sub_specific_edge_maps.max() + 1):
699 specific_edge_map = (sub_specific_edge_maps == sub_edge_id).astype(np.uint8)
700 edge_pxs, edge_pys = np.where(specific_edge_map > 0)
701 edge_mesh = netx.Graph()
702 for edge_px, edge_py in zip(edge_pxs, edge_pys):
703 edge_mesh.add_node((edge_px, edge_py))
704 for ex in [edge_px-1, edge_px, edge_px+1]:
705 for ey in [edge_py-1, edge_py, edge_py+1]:
706 if edge_px == ex and edge_py == ey:
707 continue
708 if ex < 0 or ex >= specific_edge_map.shape[0] or ey < 0 or ey >= specific_edge_map.shape[1]:
709 continue
710 if specific_edge_map[ex, ey] == 1:
711 if edge_mesh.has_node((ex, ey)):
712 edge_mesh.add_edge((ex, ey), (edge_px, edge_py))
713 periphery_nodes = netx.periphery(edge_mesh)
714 path_diameter = netx.diameter(edge_mesh)
715 start_near_node = None
716 for node_s in periphery_nodes:
717 for node_e in periphery_nodes:
718 if node_s != node_e:
719 if netx.shortest_path_length(edge_mesh, node_s, node_e) == path_diameter:
720 if np.any(context_edge[node_s[0]-1:node_s[0]+2, node_s[1]-1:node_s[1]+2].flatten()):
721 start_near_node = (node_s[0], node_s[1])
722 end_near_node = (node_e[0], node_e[1])

Callers

nothing calls this directly

Calls 3

flattenMethod · 0.80
getMethod · 0.80
appendMethod · 0.80

Tested by

no test coverage detected