|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|