def predict(self, src): stride = self.options["stride"] sharpen = self.options["sharpen"] shrink = self.options["shrink"] p_size = self.options["p_size"] g_size = self.options["g_size"] n_cell = self.options["n_cell"] n_tree_eval = self.options["n_tree_eval"] nms = self.options["nms"] if "nms" in self.options else False thrs = self.model["thrs"] fids = self.model["fids"] cids = self.model["cids"] edge_bnds = self.model["edge_bnds"] edge_pts = self.model["edge_pts"] n_seg = self.model["n_seg"] segs = self.model["segs"] p_rad = p_size / 2 g_rad = g_size / 2 pad = cv2.copyMakeBorder(src, p_rad, p_rad, p_rad, p_rad, borderType=cv2.BORDER_REFLECT) reg_ch, ss_ch = self.get_shrunk_channels(pad) if sharpen != 0: pad = conv_tri(pad, 1) dst = predict_core(pad, reg_ch, ss_ch, shrink, p_size, g_size, n_cell, stride, sharpen, n_tree_eval, thrs, fids, cids, n_seg, segs, edge_bnds, edge_pts) if sharpen == 0: alpha = 2.1 * stride**2 / g_size**2 / n_tree_eval elif sharpen == 1: alpha = 1.8 * stride**2 / g_size**2 / n_tree_eval else: alpha = 1.65 * stride**2 / g_size**2 / n_tree_eval dst = N.minimum(dst * alpha, 1.0) dst = conv_tri(dst, 1)[g_rad:src.shape[0] + g_rad, g_rad:src.shape[1] + g_rad] if nms: dy, dx = N.gradient(conv_tri(dst, 4)) _, dxx = N.gradient(dx) dyy, dxy = N.gradient(dy) orientation = N.arctan2(dyy * N.sign(-dxy) + 1e-5, dxx) orientation[orientation < 0] += N.pi dst = non_maximum_supr(dst, orientation, 1, 5, 1.02) return dst
def predict(self, src): stride = self.options["stride"] sharpen = self.options["sharpen"] shrink = self.options["shrink"] p_size = self.options["p_size"] g_size = self.options["g_size"] n_cell = self.options["n_cell"] n_tree_eval = self.options["n_tree_eval"] nms = self.options["nms"] if "nms" in self.options else False thrs = self.model["thrs"] fids = self.model["fids"] cids = self.model["cids"] edge_bnds = self.model["edge_bnds"] edge_pts = self.model["edge_pts"] n_seg = self.model["n_seg"] segs = self.model["segs"] p_rad = p_size / 2 g_rad = g_size / 2 pad = cv2.copyMakeBorder(src, p_rad, p_rad, p_rad, p_rad, borderType=cv2.BORDER_REFLECT) reg_ch, ss_ch = self.get_shrunk_channels(pad) if sharpen != 0: pad = conv_tri(pad, 1) dst = predict_core(pad, reg_ch, ss_ch, shrink, p_size, g_size, n_cell, stride, sharpen, n_tree_eval, thrs, fids, cids, n_seg, segs, edge_bnds, edge_pts) if sharpen == 0: alpha = 2.1 * stride ** 2 / g_size ** 2 / n_tree_eval elif sharpen == 1: alpha = 1.8 * stride ** 2 / g_size ** 2 / n_tree_eval else: alpha = 1.65 * stride ** 2 / g_size ** 2 / n_tree_eval dst = N.minimum(dst * alpha, 1.0) dst = conv_tri(dst, 1)[g_rad: src.shape[0] + g_rad, g_rad: src.shape[1] + g_rad] if nms: dy, dx = N.gradient(conv_tri(dst, 4)) _, dxx = N.gradient(dx) dyy, dxy = N.gradient(dy) orientation = N.arctan2(dyy * N.sign(-dxy) + 1e-5, dxx) orientation[orientation < 0] += N.pi dst = non_maximum_supr(dst, orientation, 1, 5, 1.02) return dst