Spaces:
Sleeping
Sleeping
| %%% Prerequisites | |
| % You need to get the cpp file edgesNmsMex.cpp from https://raw.githubusercontent.com/pdollar/edges/master/private/edgesNmsMex.cpp | |
| % and compile it in Matlab: mex edgesNmsMex.cpp | |
| % You also need to download and install Piotr's Computer Vision Matlab Toolbox: https://pdollar.github.io/toolbox/ | |
| %%% parameters | |
| % hed_mat_dir: the hed mat file directory (the output of 'batch_hed.py') | |
| % edge_dir: the output HED edges directory | |
| % image_width: resize the edge map to [image_width, image_width] | |
| % threshold: threshold for image binarization (default 25.0/255.0) | |
| % small_edge: remove small edges (default 5) | |
| function [] = PostprocessHED(hed_mat_dir, edge_dir, image_width, threshold, small_edge) | |
| if ~exist(edge_dir, 'dir') | |
| mkdir(edge_dir); | |
| end | |
| fileList = dir(fullfile(hed_mat_dir, '*.mat')); | |
| nFiles = numel(fileList); | |
| fprintf('find %d mat files\n', nFiles); | |
| for n = 1 : nFiles | |
| if mod(n, 1000) == 0 | |
| fprintf('process %d/%d images\n', n, nFiles); | |
| end | |
| fileName = fileList(n).name; | |
| filePath = fullfile(hed_mat_dir, fileName); | |
| jpgName = strrep(fileName, '.mat', '.jpg'); | |
| edge_path = fullfile(edge_dir, jpgName); | |
| if ~exist(edge_path, 'file') | |
| E = GetEdge(filePath); | |
| E = imresize(E,[image_width,image_width]); | |
| E_simple = SimpleEdge(E, threshold, small_edge); | |
| E_simple = uint8(E_simple*255); | |
| imwrite(E_simple, edge_path, 'Quality',100); | |
| end | |
| end | |
| end | |
| function [E] = GetEdge(filePath) | |
| load(filePath); | |
| E = 1-edge_predict; | |
| end | |
| function [E4] = SimpleEdge(E, threshold, small_edge) | |
| if nargin <= 1 | |
| threshold = 25.0/255.0; | |
| end | |
| if nargin <= 2 | |
| small_edge = 5; | |
| end | |
| if ndims(E) == 3 | |
| E = E(:,:,1); | |
| end | |
| E1 = 1 - E; | |
| E2 = EdgeNMS(E1); | |
| E3 = double(E2>=max(eps,threshold)); | |
| E3 = bwmorph(E3,'thin',inf); | |
| E4 = bwareaopen(E3, small_edge); | |
| E4=1-E4; | |
| end | |
| function [E_nms] = EdgeNMS( E ) | |
| E=single(E); | |
| [Ox,Oy] = gradient2(convTri(E,4)); | |
| [Oxx,~] = gradient2(Ox); | |
| [Oxy,Oyy] = gradient2(Oy); | |
| O = mod(atan(Oyy.*sign(-Oxy)./(Oxx+1e-5)),pi); | |
| E_nms = edgesNmsMex(E,O,1,5,1.01,1); | |
| end | |