显著性检测(saliency detection)评价指标之sAUC(shuffled AUC)的Matlab代码实现
时间: 2024-01-25 20:03:01 浏览: 140
以下是sAUC的Matlab代码实现:
```matlab
function [score, shuffled_map] = sAUC(saliency_map, fixation_map, num_shuffles)
% saliency_map: 输入的显著图像
% fixation_map: 目标图像
% num_shuffles: 随机置换数量
saliency_map = im2double(saliency_map);
fixation_map = im2double(fixation_map);
% 将显著图像和目标图像转换为向量形式
saliency_vec = saliency_map(:);
fixation_vec = fixation_map(:);
% 计算AUC值
score = computeAUC(saliency_vec, fixation_vec);
% 生成随机置换
shuffled_map = zeros(size(saliency_map,1), size(saliency_map,2), num_shuffles);
for i=1:num_shuffles
shuffled_fixation_vec = fixation_vec(randperm(length(fixation_vec)));
[~,shuffled_map(:,:,i)] = computeAUC(saliency_vec, shuffled_fixation_vec);
end
% 计算shuffled AUC值
shuffled_score = zeros(num_shuffles, 1);
for i=1:num_shuffles
shuffled_score(i) = computeAUC(saliency_vec, shuffled_fixation_vec);
end
% 计算sAUC值
score = (score - mean(shuffled_score)) / std(shuffled_score);
end
function [score, thresholded_map] = computeAUC(saliency_vec, fixation_vec)
% 计算ROC曲线
[~, ~, info] = vl_roc(fixation_vec, saliency_vec);
% 计算AUC值
score = info.auc;
% 将显著图像转换为二值图像
thresholded_map = zeros(size(saliency_vec));
thresholded_map(saliency_vec > info.eer) = 1;
end
```
使用方法:
1. 将以上代码保存为`sAUC.m`文件;
2. 在Matlab中加载显著图像和目标图像;
3. 调用`sAUC`函数计算sAUC值和随机置换的显著图像。
示例代码:
```matlab
% 加载显著图像和目标图像
saliency_map = imread('saliency.jpg');
fixation_map = imread('fixation.jpg');
% 计算sAUC值和随机置换的显著图像
[num_shuffles, score, shuffled_map] = sAUC(saliency_map, fixation_map, 100);
```
其中,`num_shuffles`是随机置换的数量,`score`是sAUC值,`shuffled_map`是随机置换的显著图像。
阅读全文