Page 271 - MDP2020-1
P. 271

················································································  명장양성프로젝트  【MDP】  과제발표회  자료집  Ⅰ    |  265


                    for  d1  in  contour_list:
                            matched_contours_idx  =  []
                            for  d2  in  contour_list:
                                    if  d1['idx']  ==  d2['idx']:
                                            continue
                                    dx  =  abs(d1['cx']  -  d2['cx'])
                                    dy  =  abs(d1['cy']  -  d2['cy'])
                                    diagonal_length1  =  np.sqrt(d1['w']  **  2  +  d1['h']  **  2)
                                    distance   =   np.linalg.norm(np.array([d1['cx'],   d1['cy']])   -   np.array([d2['cx'],
            d2['cy']]))
                                    if  dx  ==  0:
                                            angle_diff  =  90
                                    else:
                                            angle_diff  =  np.degrees(np.arctan(dy  /  dx))
                                    area_diff  =  abs(d1['w']  *  d1['h']  -  d2['w']  *  d2['h'])  /  (d1['w']  *  d1['h'])
                                    width_diff  =  abs(d1['w']  -  d2['w'])  /  d1['w']
                                    height_diff  =  abs(d1['h']  -  d2['h'])  /  d1['h']
                                    if  distance  <  diagonal_length1  *  MAX_DIAG_MULTIPLYER  \
                                    and  angle_diff  <  MAX_ANGLE_DIFF  and  area_diff  <  MAX_AREA_DIFF  \
                                    and  width_diff  <  MAX_WIDTH_DIFF  and  height_diff  <  MAX_HEIGHT_DIFF:
                                            matched_contours_idx.append(d2['idx'])
                            #  append  this  contour
                            matched_contours_idx.append(d1['idx'])
                            if  len(matched_contours_idx)  <  MIN_N_MATCHED:
                                    continue
                            matched_result_idx.append(matched_contours_idx)
                            unmatched_contour_idx  =  []
                            for  d4  in  contour_list:
                                    if  d4['idx']  not  in  matched_contours_idx:
                                            unmatched_contour_idx.append(d4['idx'])
                            unmatched_contour  =  np.take(possible_contours,  unmatched_contour_idx)

                            #  recursive
                            recursive_contour_list  =  find_chars(unmatched_contour)

                            for  idx  in  recursive_contour_list:
                                    matched_result_idx.append(idx)
                            break
                    return  matched_result_idx

            result_idx  =  find_chars(possible_contours)
            matched_result  =  []
            for  idx_list  in  result_idx:
                    matched_result.append(np.take(possible_contours,  idx_list))
            #  visualize  possible  contours
   266   267   268   269   270   271   272   273   274   275   276