显著性检测(saliency detection)评价指标之sAUC(shuffled AUC)的Matlab代码实现
AUC_shuffled.m
function [score,tp,fp] = AUC_shuffled(saliencyMap, fixationMap, otherMap, Nsplits, stepSize, toPlot) % saliencyMap is the saliency map % fixationMap is the human fixation map (binary matrix) % otherMap is a binary fixation map (like fixationMap) by taking the union of % fixations from M other random images (Borji uses M=10) % Nsplits is number of random splits % stepSize is for sweeping through saliency map % if toPlot=1, displays ROC curve if nargin < 6, toPlot = 0; end if nargin < 5, stepSize = .1; end if nargin < 4, Nsplits = 100; end score=nan; % If there are no fixations to predict, return NaN if ~any(fixationMap) disp('no fixationMap'); return end % make the saliencyMap the size of fixationMap if size(saliencyMap, 1)~=size(fixationMap, 1) || size(saliencyMap, 2)~=size(fixationMap, 2) saliencyMap = imresize(saliencyMap, size(fixationMap)); end % normalize saliency map saliencyMap = (saliencyMap-min(saliencyMap(:)))/(max(saliencyMap(:))-min(saliencyMap(:))); if sum(isnan(saliencyMap(:)))==length(saliencyMap(:)) disp('NaN saliencyMap'); return end S = saliencyMap(:); F = fixationMap(:); Oth = otherMap(:); Sth = S(F>0); % sal map values at fixation locations Nfixations = length(Sth); % for each fixation, sample Nsplits values from the sal map at locations % specified by otherMap ind = find(Oth>0); % find fixation locations on other images Nfixations_oth = min(Nfixations,length(ind)); randfix = nan(Nfixations_oth,Nsplits); for i=1:Nsplits randind = ind(randperm(length(ind))); % randomize choice of fixation locations randfix(:,i) = S(randind(1:Nfixations_oth)); % sal map values at random fixation locations of other random images end % calculate AUC per random split (set of random locations) auc = nan(1,Nsplits); for s = 1:Nsplits curfix = randfix(:,s); allthreshes = fliplr([0:stepSize:double(max([Sth;curfix]))]); tp = zeros(length(allthreshes)+2,1); fp = zeros(length(allthreshes)+2,1); tp(1)=0; tp(end) = 1; fp(1)=0; fp(end) = 1; for i = 1:length(allthreshes) thresh = allthreshes(i); tp(i+1) = sum((Sth >= thresh))/Nfixations; fp(i+1) = sum((curfix >= thresh))/Nfixations_oth; end auc(s) = trapz(fp,tp); end score = mean(auc); % mean across random splits if toPlot subplot(121); imshow(saliencyMap, []); title('SaliencyMap with fixations to be predicted'); hold on; [y, x] = find(fixationMap); plot(x, y, '.r'); subplot(122); plot(fp, tp, '.b-'); title(['Area under ROC curve: ', num2str(score)]) end
main.m
clear; clc; smap_path='E:\Dataset180303\final_data\smap_Result1\'; gmap_path='E:\Dataset180303\final_data\image_resize_gt\'; smap_file=dir(smap_path); for j=3:length(smap_file) disp(j-2); gmap_name=strcat(gmap_path,num2str(j-2), '.jpg'); % gmap_name=strcat(gmap_path,smap_file(j).name); smap_name=strcat(smap_path,num2str(j-2 + 0 ), '.jpg'); % smap_name=strcat(smap_path,num2str(j-2+ 0 ), '_SaliencyMap', '.jpg'); gmap=imresize(imread(gmap_name), [224, 224], 'bicubic'); smap=imresize(imread(smap_name), [224, 224], 'bicubic'); sal_map=mat2gray(smap); if gmap==0 continue; end if size(gmap,3)==3 gt_final_map=rgb2gray(gmap); else gt_final_map = gmap; end sal_map=imresize(sal_map,0.5); gt_final_map=imresize(gt_final_map,0.5); threshold_value = graythresh(gt_final_map); gt_final_map_bin = im2bw(gt_final_map, threshold_value); % c=calcAUCscore(sal_map,gt_final_map); % [score,tp,fp] = AUC_shuffled(saliencyMap, fixationMap, otherMap, Nsplits, stepSize, toPlot) [c,tp,fp]=AUC_shuffled(sal_map,gt_final_map_bin,gt_final_map); idx=find(isnan(c)); c(idx)=0.5; c = abs(c); a(j-2,1)=mean(c); end % b(i-2,1)=mean(a); % clear a; % end sAUC = mean(a);