Spaces:
Build error
Build error
Download utils/plotting.py from mcosarinsky/CheXmask-U: direct link, hf CLI and curl.
- Browser
- Download file 3.03 kB
-
https://huggingface.co/spaces/mcosarinsky/CheXmask-U/resolve/main/utils/plotting.py
- Command line
-
hf download hf://spaces/mcosarinsky/CheXmask-U/utils/plotting.py
-
curl -L -o plotting.py https://huggingface.co/spaces/mcosarinsky/CheXmask-U/resolve/main/utils/plotting.py
3.03 kB
| import numpy as np | |
| import cv2 | |
| import matplotlib.pyplot as plt | |
| from mpl_toolkits.axes_grid1 import make_axes_locatable | |
| def getDenseMask(landmarks, h, w): | |
| RL, LL, H = landmarks[:44], landmarks[44:94], landmarks[94:] | |
| img = np.zeros([h, w], dtype='uint8') | |
| RL = RL.reshape(-1, 1, 2).astype('int') | |
| LL = LL.reshape(-1, 1, 2).astype('int') | |
| H = H.reshape(-1, 1, 2).astype('int') | |
| img = cv2.drawContours(img, [RL], -1, 1, -1) | |
| img = cv2.drawContours(img, [LL], -1, 1, -1) | |
| img = cv2.drawContours(img, [H], -1, 2, -1) | |
| return img | |
| def drawOnTop(img, landmarks, original_shape): | |
| h, w = original_shape | |
| output = getDenseMask(landmarks, h, w) | |
| image = np.zeros([h,w,3]) | |
| image[:,:,0] = img + 0.3*(output==1).astype('float') - 0.1*(output==2).astype('float') | |
| image[:,:,1] = img + 0.3*(output==2).astype('float') - 0.1*(output==1).astype('float') | |
| image[:,:,2] = img - 0.1*(output==1).astype('float') - 0.2*(output==2).astype('float') | |
| image = np.clip(image,0,1) | |
| RL, LL, H = landmarks[:44], landmarks[44:94], landmarks[94:] | |
| for l in RL: image = cv2.circle(image,(int(l[0]),int(l[1])),5,(1,0,1),-1) | |
| for l in LL: image = cv2.circle(image,(int(l[0]),int(l[1])),5,(1,0,1),-1) | |
| for l in H: image = cv2.circle(image,(int(l[0]),int(l[1])),5,(1,1,0),-1) | |
| return image | |
| def create_overlay(img, landmarks): | |
| h, w = img.shape[:2] | |
| dense_mask = getDenseMask(landmarks, h, w) | |
| overlay = np.zeros([h, w, 3]) | |
| overlay[:,:,0] = img + 0.3 * (dense_mask == 1).astype('float') - 0.1 * (dense_mask == 2).astype('float') | |
| overlay[:,:,1] = img + 0.3 * (dense_mask == 2).astype('float') - 0.1 * (dense_mask == 1).astype('float') | |
| overlay[:,:,2] = img - 0.1 * (dense_mask == 1).astype('float') - 0.2 * (dense_mask == 2).astype('float') | |
| overlay = np.clip(overlay, 0, 1) | |
| return overlay | |
| def plot_side_by_side_comparison(img_orig, means_orig, uncertainty_orig, img_corr, means_corr, uncertainty_corr): | |
| fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 7)) | |
| fig.set_constrained_layout(True) | |
| vmax = max(np.max(np.mean(uncertainty_orig, axis=1)), np.max(np.mean(uncertainty_corr, axis=1))) | |
| # --- Original --- | |
| overlay_orig = create_overlay(img_orig, means_orig) | |
| ax1.imshow(overlay_orig) | |
| scatter1 = ax1.scatter( | |
| means_orig[:, 0], means_orig[:, 1], | |
| c=np.mean(uncertainty_orig, axis=1), | |
| cmap='hot', s=50, vmin=0, vmax=vmax | |
| ) | |
| ax1.set_title("Original", fontsize=16, pad=10) | |
| ax1.axis('off') | |
| # --- Corrupted --- | |
| overlay_corr = create_overlay(img_corr, means_corr) | |
| ax2.imshow(overlay_corr) | |
| scatter2 = ax2.scatter( | |
| means_corr[:, 0], means_corr[:, 1], | |
| c=np.mean(uncertainty_corr, axis=1), | |
| cmap='hot', s=50, vmin=0, vmax=vmax | |
| ) | |
| ax2.set_title("Corrupted", fontsize=16, pad=10) | |
| ax2.axis('off') | |
| # Shared colorbar | |
| cbar = fig.colorbar(scatter2, ax=[ax1, ax2], fraction=0.046, pad=0.01, shrink=0.85) | |
| cbar.ax.tick_params(labelsize=10) | |
| return fig |