(decompose_result, replace_result, poster_brightness: float, data_root: str, mask = None, save=False)
| 28 | render image with rgb, illumination and reflectance |
| 29 | ''' |
| 30 | def render(decompose_result, replace_result, poster_brightness: float, data_root: str, mask = None, save=False): |
| 31 | replace = replace_result.astype(np.float64) |
| 32 | illumination = decompose_result['pred_S'][:,:,::-1].astype(np.float64) |
| 33 | reflectance = decompose_result['pred_R'][:,:,::-1].astype(np.float64) |
| 34 | rgb = decompose_result['rgb'][:,:,::-1].astype(np.float64) |
| 35 | if DEBUG: |
| 36 | render = cv2.multiply(illumination, reflectance) |
| 37 | cv2.imshow("srgb", rgb_to_srgb(rgb)) |
| 38 | cv2.imshow("s", rgb_to_srgb(illumination)) |
| 39 | cv2.imshow("r", rgb_to_srgb(reflectance)) |
| 40 | cv2.imshow("render", render) |
| 41 | cv2.imshow("srender", rgb_to_srgb(render)) |
| 42 | cv2.waitKey() |
| 43 | cv2.destroyAllWindows() |
| 44 | if save: |
| 45 | ofs = cv2.FileStorage(os.path.join(data_root, "split.yml"), cv2.FILE_STORAGE_WRITE) |
| 46 | ofs.write("illumination", illumination) |
| 47 | ofs.write("reflectance", reflectance) |
| 48 | ofs.write("rgb", rgb) |
| 49 | |
| 50 | reflectance = reflectance * 255 |
| 51 | rgb = rgb * 255 |
| 52 | if mask is None: |
| 53 | assert os.path.exists(os.path.join(data_root, "mask.jpg")) |
| 54 | mask = cv2.imread(os.path.join(data_root, "mask.jpg"), cv2.IMREAD_UNCHANGED) |
| 55 | mask = mask / 255.0 |
| 56 | |
| 57 | r_sum = replace.sum(axis=-1) |
| 58 | ref_sum = reflectance.sum(axis=-1) |
| 59 | tot = np.count_nonzero(r_sum) |
| 60 | ri = r_sum.sum()/(3.0*tot) |
| 61 | refi = ref_sum.sum()/(3.0*tot) |
| 62 | refi = refi * poster_brightness |
| 63 | |
| 64 | if len(mask.shape) == 2: |
| 65 | mask = mask[:,:,np.newaxis] |
| 66 | dst = mask * rgb + (1.0 - mask) * replace * illumination * refi / ri |
| 67 | sdst = dst.astype(np.uint8) |
| 68 | |
| 69 | return sdst |
| 70 | |
| 71 | |
| 72 | ''' |
no test coverage detected