11import numpy as np
22import torch
3- from pytlsd import batched_lsd , lsd
3+ from pytlsd import batched_lsd
44
55from ..base_model import BaseModel
66
@@ -20,37 +20,6 @@ def _init(self, conf):
2020 self .conf .max_num_lines is not None
2121 ), "Missing max_num_lines parameter"
2222
23- def detect_lines (self , img ):
24- # Run LSD
25- segs = lsd (img )
26-
27- # Filter out keylines that do not meet the minimum length criteria
28- lengths = np .linalg .norm (segs [:, 2 :4 ] - segs [:, 0 :2 ], axis = 1 )
29- to_keep = lengths >= self .conf .min_length
30- segs , lengths = segs [to_keep ], lengths [to_keep ]
31-
32- # Keep the best lines
33- scores = segs [:, - 1 ] * np .sqrt (lengths )
34- segs = segs [:, :4 ].reshape (- 1 , 2 , 2 )
35- indices = np .argsort (- scores )
36- if self .conf .max_num_lines is not None :
37- indices = indices [: self .conf .max_num_lines ]
38- segs = segs [indices ]
39- scores = scores [indices ]
40-
41- # Pad if necessary
42- n = len (segs )
43- valid_mask = np .ones (n , dtype = bool )
44- if self .conf .force_num_lines :
45- pad = self .conf .max_num_lines - n
46- segs = np .concatenate (
47- [segs , np .zeros ((pad , 2 , 2 ), dtype = np .float32 )], axis = 0
48- )
49- scores = np .concatenate ([scores , np .zeros (pad , dtype = np .float32 )], axis = 0 )
50- valid_mask = np .concatenate ([valid_mask , np .zeros (pad , dtype = bool )], axis = 0 )
51-
52- return segs , scores , valid_mask
53-
5423 def filter_lines (self , segs ):
5524 # Filter out keylines that do not meet the minimum length criteria
5625 lengths = np .linalg .norm (segs [:, 2 :4 ] - segs [:, 0 :2 ], axis = 1 )
@@ -92,8 +61,6 @@ def _forward(self, data):
9261 b_size = len (image )
9362 image = np .uint8 (image .squeeze (1 ).cpu ().numpy () * 255 )
9463
95- # LSD detection in parallel
96-
9764 segs = batched_lsd (image )
9865
9966 if b_size == 1 :
0 commit comments