eval_release.m 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. function eval_release(image_path, line_gt_path, output_file, result_path, output_size)
  2. lineThresh = [0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.97, 0.99, 0.995, 0.999, 0.9995, 0.9999];
  3. nLineThresh = size(lineThresh, 2);
  4. sumtp = zeros(nLineThresh, 1);
  5. sumfp = zeros(nLineThresh, 1);
  6. sumgt = zeros(nLineThresh, 1);
  7. listing = dir(image_path);
  8. numResults = size(listing, 1);
  9. for index=1:numResults
  10. filename = listing(index).name;
  11. if length(filename) == 1 || length(filename) == 2
  12. continue;
  13. end
  14. filename = filename(1:end-4);
  15. fprintf('processed %d/%d\n', index - 2, numResults - 2)
  16. gtname = [line_gt_path, '/', filename, '_line.mat'];
  17. imgname = [image_path, filename, '.jpg'];
  18. I = imread(imgname);
  19. height = size(I,1);
  20. width = size(I,2);
  21. % convert GT lines to binary map
  22. gtlines = load(gtname);
  23. gtlines = gtlines.lines;
  24. ne = size(gtlines,1);
  25. edgemap0 = zeros(height, width);
  26. for k = 1:ne
  27. x1 = gtlines(k,1);
  28. x2 = gtlines(k,3);
  29. y1 = gtlines(k,2);
  30. y2 = gtlines(k,4);
  31. vn = ceil(sqrt((x1-x2)^2+(y1-y2)^2));
  32. cur_edge = [linspace(y1,y2,vn).', linspace(x1,x2,vn).'];
  33. for j = 1:size(cur_edge,1)
  34. yy = round(cur_edge(j,1));
  35. xx = round(cur_edge(j,2));
  36. if yy <= 0
  37. yy = 1;
  38. end
  39. if xx <= 0
  40. xx = 1;
  41. end
  42. edgemap0(yy,xx) = 1;
  43. end
  44. end
  45. parfor m=1:nLineThresh
  46. resultname = [result_path, '/', num2str(lineThresh(m)), '/', sprintf('%06d', index - 3), '.mat'];
  47. resultlines = load(resultname);
  48. resultlines = resultlines.lines;
  49. ne = size(resultlines,1);
  50. edgemap1 = zeros(height, width);
  51. for k = 1:ne
  52. x1 = resultlines(k,2) * width / output_size;
  53. y1 = resultlines(k,1) * height / output_size;
  54. x2 = resultlines(k,4) * width / output_size;
  55. y2 = resultlines(k,3) * height / output_size;
  56. vn = ceil(sqrt((x1-x2)^2+(y1-y2)^2));
  57. cur_edge = [linspace(y1,y2,vn).', linspace(x1,x2,vn).'];
  58. for j = 1:size(cur_edge,1)
  59. yy = round(cur_edge(j,1) - 0.5);
  60. xx = round(cur_edge(j,2) - 0.5);
  61. if yy <= 0
  62. yy = 1;
  63. end
  64. if xx <= 0
  65. xx = 1;
  66. end
  67. if yy > height
  68. yy = height;
  69. end
  70. if xx > width
  71. xx = width;
  72. end
  73. edgemap1(yy,xx) = 1;
  74. end
  75. end
  76. [matchE1,matchG1] = correspondPixels(edgemap1,edgemap0,0.01);
  77. matchE = double(matchE1 > 0);
  78. sumtp(m, 1) = sumtp(m, 1) + sum(matchE(:));
  79. sumfp(m, 1) = sumfp(m, 1) + sum(edgemap1(:)) - sum(matchE(:));
  80. sumgt(m, 1) = sumgt(m, 1) + sum(edgemap0(:));
  81. end
  82. end
  83. save(output_file, 'sumtp', 'sumfp', 'sumgt');
  84. end