draw-wireframe.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #!/usr/bin/env python3
  2. import os
  3. import glob
  4. import os.path as osp
  5. import cv2
  6. import numpy as np
  7. import scipy.io
  8. import matplotlib as mpl
  9. import matplotlib.pyplot as plt
  10. from lcnn.utils import parmap
  11. GT = "data/wireframe/valid/*.npz"
  12. WF = "/data/lcnn/wirebase/result/wireframe/wireframe_1_rerun-baseline_0.5_0.5/2/*.mat"
  13. AFM = "/data/lcnn/wirebase/result/wireframe/afm/*.npz"
  14. IMGS = "/data/lcnn/wirebase/Wireframe/v1.1/test/*.jpg"
  15. def imshow(im):
  16. sizes = im.shape
  17. height = float(sizes[0])
  18. width = float(sizes[1])
  19. fig = plt.figure()
  20. fig.set_size_inches(width / height, 1, forward=False)
  21. ax = plt.Axes(fig, [0.0, 0.0, 1.0, 1.0])
  22. ax.set_axis_off()
  23. fig.add_axes(ax)
  24. plt.xlim([-0.5, sizes[1] - 0.5])
  25. plt.ylim([sizes[0] - 0.5, -0.5])
  26. plt.imshow(im)
  27. def main():
  28. gts = sorted(glob.glob(GT))
  29. afm = sorted(glob.glob(AFM))
  30. wf = sorted(glob.glob(WF))
  31. img = sorted(glob.glob(IMGS))
  32. prefix = "/data/lcnn/wirebase/myplot/"
  33. os.makedirs(osp.join(prefix, "GT"), exist_ok=True)
  34. os.makedirs(osp.join(prefix, "LSD"), exist_ok=True)
  35. os.makedirs(osp.join(prefix, "AFM"), exist_ok=True)
  36. os.makedirs(osp.join(prefix, "WF"), exist_ok=True)
  37. os.makedirs(osp.join(prefix, "LL"), exist_ok=True)
  38. def draw(args):
  39. i, (wf_name, gt_name, afm_name, img_name) = args
  40. img = cv2.imread(img_name, 0)
  41. lsd = cv2.createLineSegmentDetector(cv2.LSD_REFINE_ADV)
  42. lsd_line, _, _, lsd_score = lsd.detect(img)
  43. lsd_line = lsd_line.reshape(-1, 2, 2)
  44. lsd_score = lsd_score.flatten()
  45. img = cv2.imread(img_name)[:, :, ::-1]
  46. with np.load(gt_name) as fgt:
  47. gt_line = fgt["lpos"][:, :, :2]
  48. gt_line[:, :, 0] *= img.shape[0] / 128
  49. gt_line[:, :, 1] *= img.shape[1] / 128
  50. with np.load(afm_name) as fafm:
  51. afm_line = fafm["lines"].reshape(-1, 2, 2)[:, :, ::-1]
  52. wf_line = scipy.io.loadmat(wf_name)["lines"].reshape(-1, 2, 2)
  53. wf_line = wf_line[:, :, ::-1]
  54. plt.figure("GT")
  55. imshow(img)
  56. for a, b in gt_line - 0.5:
  57. plt.plot([a[1], b[1]], [a[0], b[0]], color="orange", linewidth=0.5)
  58. plt.scatter(a[1], a[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  59. plt.scatter(b[1], b[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  60. plt.savefig(osp.join(prefix, "GT", f"{i:05}"), dpi=3000, bbox_inches=0)
  61. plt.close()
  62. plt.figure("LSD")
  63. imshow(img)
  64. for a, b in lsd_line[:, :, ::-1] - 0.5:
  65. plt.plot([a[1], b[1]], [a[0], b[0]], color="orange", linewidth=0.5)
  66. plt.scatter(a[1], a[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  67. plt.scatter(b[1], b[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  68. plt.savefig(osp.join(prefix, "LSD", f"{i:05}"), dpi=3000, bbox_inches=0)
  69. plt.close()
  70. plt.figure("AFM")
  71. imshow(img)
  72. for a, b in afm_line - 0.5:
  73. plt.plot([a[1], b[1]], [a[0], b[0]], color="orange", linewidth=0.5)
  74. plt.scatter(a[1], a[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  75. plt.scatter(b[1], b[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  76. plt.savefig(osp.join(prefix, "AFM", f"{i:05}"), dpi=3000, bbox_inches=0)
  77. plt.close()
  78. plt.figure("WF")
  79. imshow(img)
  80. for a, b in wf_line - 0.5:
  81. plt.plot([a[1], b[1]], [a[0], b[0]], color="orange", linewidth=0.5)
  82. plt.scatter(a[1], a[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  83. plt.scatter(b[1], b[0], color="#33FFFF", s=1.2, edgecolors="none", zorder=5)
  84. plt.savefig(osp.join(prefix, "WF", f"{i:05}"), dpi=3000, bbox_inches=0)
  85. plt.close()
  86. parmap(draw, enumerate(zip(wf, gts, afm, img)))
  87. if __name__ == "__main__":
  88. main()