Loading autocnet/control/control.py +27 −2 Original line number Diff line number Diff line Loading @@ -5,9 +5,35 @@ import pandas as pd import geopandas as gpd from shapely.geometry import Point from autocnet.matcher import subpixel as sp from plio.io.io_controlnetwork import to_isis, write_filelist print('reload') def subpixel_match(cg, cn,threshold=0.9, template_size=19, search_size=53, max_x_shift=1.0,max_y_shift=1.0, **kwargs): def subpixel_group(group, threshold=0.9, template_size=19, search_size=53, max_x_shift=1.0,max_y_shift=1.0, **kwargs): offs = [] for i,(idx, r) in enumerate(group.iterrows()): if i == 0: x = r.x y = r.y offs.append([0,0, np.inf]) continue e = r.edge s_img = cg.edge[e[0]][e[1]].source.geodata s_template = sp.clip_roi(s_img, (x, y), template_size) #s_template = cv2.Canny(bytescale(s_template), 50,100) # Canny - bad idea d_img = cg.edge[e[0]][e[1]].destination.geodata d_search = sp.clip_roi(d_img, (r.x, r.y), search_size) #d_search = cv2.Canny(bytescale(d_search), 50,100) xoff,yoff,corr = sp.subpixel_offset(s_template, d_search, **kwargs) offs.append([xoff,yoff,corr]) df = pd.DataFrame(offs, columns=['x_off', 'y_off', 'corr'], index=group.index) return df gps = cn.data.groupby('point_id').apply(subpixel_group,threshold=0.9,max_x_shift=5, max_y_shift=5,template_size=template_size, search_size=search_size,**kwargs) cn.data[['x_off', 'y_off', 'corr']] = gps.reset_index()[['x_off', 'y_off', 'corr']] def identify_potential_overlaps(cg, cn, overlap=True): """ Loading Loading @@ -179,7 +205,6 @@ class ControlNetwork(object): if g.image_index.duplicated().any(): return True else: return False return self.data.groupby('point_id').apply(func) def clean_singles(self): Loading autocnet/control/tests/test_control.py +4 −4 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ from .. import control def test_fromcandidategraph(candidategraph, controlnetwork_data):#, controlnetwork): matches = candidategraph.get_matches() cn = control.ControlNetwork.from_candidategraph(matches) assert cn.data.equals(controlnetwork_data) assert cn.data[['point_id', 'image_index']].equals(controlnetwork_data[['point_id', 'image_index']]) def test_add_measure(): cn = control.ControlNetwork() Loading @@ -36,11 +36,11 @@ def test_add_measure(): assert cn.measure_to_point[key] == 0 def test_validate_points(controlnetwork): assert controlnetwork.validate_points().any() assert not controlnetwork.validate_points().any() def test_bad_validate_points(bad_controlnetwork): assert bad_controlnetwork.validate_points().iloc[0] == False assert bad_controlnetwork.validate_points().iloc[1:].all() assert bad_controlnetwork.validate_points().iloc[0] == True assert not bad_controlnetwork.validate_points().iloc[1:].all() def test_identify_potential_overlaps(controlnetwork, candidategraph): res = control.identify_potential_overlaps(candidategraph, Loading Loading
autocnet/control/control.py +27 −2 Original line number Diff line number Diff line Loading @@ -5,9 +5,35 @@ import pandas as pd import geopandas as gpd from shapely.geometry import Point from autocnet.matcher import subpixel as sp from plio.io.io_controlnetwork import to_isis, write_filelist print('reload') def subpixel_match(cg, cn,threshold=0.9, template_size=19, search_size=53, max_x_shift=1.0,max_y_shift=1.0, **kwargs): def subpixel_group(group, threshold=0.9, template_size=19, search_size=53, max_x_shift=1.0,max_y_shift=1.0, **kwargs): offs = [] for i,(idx, r) in enumerate(group.iterrows()): if i == 0: x = r.x y = r.y offs.append([0,0, np.inf]) continue e = r.edge s_img = cg.edge[e[0]][e[1]].source.geodata s_template = sp.clip_roi(s_img, (x, y), template_size) #s_template = cv2.Canny(bytescale(s_template), 50,100) # Canny - bad idea d_img = cg.edge[e[0]][e[1]].destination.geodata d_search = sp.clip_roi(d_img, (r.x, r.y), search_size) #d_search = cv2.Canny(bytescale(d_search), 50,100) xoff,yoff,corr = sp.subpixel_offset(s_template, d_search, **kwargs) offs.append([xoff,yoff,corr]) df = pd.DataFrame(offs, columns=['x_off', 'y_off', 'corr'], index=group.index) return df gps = cn.data.groupby('point_id').apply(subpixel_group,threshold=0.9,max_x_shift=5, max_y_shift=5,template_size=template_size, search_size=search_size,**kwargs) cn.data[['x_off', 'y_off', 'corr']] = gps.reset_index()[['x_off', 'y_off', 'corr']] def identify_potential_overlaps(cg, cn, overlap=True): """ Loading Loading @@ -179,7 +205,6 @@ class ControlNetwork(object): if g.image_index.duplicated().any(): return True else: return False return self.data.groupby('point_id').apply(func) def clean_singles(self): Loading
autocnet/control/tests/test_control.py +4 −4 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ from .. import control def test_fromcandidategraph(candidategraph, controlnetwork_data):#, controlnetwork): matches = candidategraph.get_matches() cn = control.ControlNetwork.from_candidategraph(matches) assert cn.data.equals(controlnetwork_data) assert cn.data[['point_id', 'image_index']].equals(controlnetwork_data[['point_id', 'image_index']]) def test_add_measure(): cn = control.ControlNetwork() Loading @@ -36,11 +36,11 @@ def test_add_measure(): assert cn.measure_to_point[key] == 0 def test_validate_points(controlnetwork): assert controlnetwork.validate_points().any() assert not controlnetwork.validate_points().any() def test_bad_validate_points(bad_controlnetwork): assert bad_controlnetwork.validate_points().iloc[0] == False assert bad_controlnetwork.validate_points().iloc[1:].all() assert bad_controlnetwork.validate_points().iloc[0] == True assert not bad_controlnetwork.validate_points().iloc[1:].all() def test_identify_potential_overlaps(controlnetwork, candidategraph): res = control.identify_potential_overlaps(candidategraph, Loading