| 559 | |
| 560 | |
| 561 | py::array_t<int> recover_map(py::array_t<int> contour_map, py::array_t<int> idx_sequence) { |
| 562 | // input array |
| 563 | py::buffer_info cm_buf = contour_map.request(); |
| 564 | int *cm_ptr = (int *) cm_buf.ptr; |
| 565 | py::buffer_info is_buf = idx_sequence.request(); |
| 566 | int *is_ptr = (int *) is_buf.ptr; |
| 567 | int h = cm_buf.shape[0]; |
| 568 | int w = cm_buf.shape[1]; |
| 569 | int l = is_buf.shape[0]; |
| 570 | |
| 571 | // return array |
| 572 | auto idx_map = py::array_t<int>(h * w); |
| 573 | py::buffer_info im_buf = idx_map.request(); |
| 574 | int *im_ptr = (int *) im_buf.ptr; |
| 575 | |
| 576 | int pointer = 0; |
| 577 | for (int i = 0; i < l; i++){ |
| 578 | int index = is_ptr[i]; |
| 579 | im_ptr[pointer] = index; |
| 580 | pointer++; |
| 581 | if (pointer >= h * w) |
| 582 | break; |
| 583 | while (cm_ptr[pointer] == 0){ |
| 584 | im_ptr[pointer] = index; |
| 585 | pointer++; |
| 586 | if (pointer >= h * w) |
| 587 | break; |
| 588 | } |
| 589 | } |
| 590 | |
| 591 | idx_map.resize({h, w}); |
| 592 | return idx_map; |
| 593 | } |
| 594 | |
| 595 | |
| 596 | // feature extractor |
nothing calls this directly
no outgoing calls
no test coverage detected