首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CBIR系统“平均精度与排序”的计算

CBIR系统“平均精度与排序”的计算
EN

Stack Overflow用户
提问于 2014-10-14 17:18:48
回答 2查看 4K关注 0票数 4

因此,我使用RGB直方图实现了基本的cbir系统。现在,我试图生成平均精度和排名曲线。我需要知道,我的avg精度公式正确吗?以及如何计算平均排名?

代码语言:javascript
复制
Code:
% Dir: parent directory location for images folder c1, c2, c3
% inputImage: \c1\1.ppm
% For example to get P-R curve execute: CBIR('D:\visionImages','\c2\1.ppm');
function [  ] = demoCBIR( Dir,inputImage)
% Dir='D:\visionImages';
% inputImage='\c3\1.ppm';
tic;
S=strcat(Dir,inputImage);
Inp1=imread(S);
num_red_bins = 8;
num_green_bins = 8;
num_blue_bins = 8;
num_bins = num_red_bins*num_green_bins*num_blue_bins;

A = imcolourhist(Inp1, num_red_bins, num_green_bins, num_blue_bins);%input image histogram
srcFiles = dir(strcat(Dir,'\*.jpg'));  
B = zeros(num_bins, 100); % hisogram of other 100 images in category 1
ptr=1;
for i = 1 : length(srcFiles)
    filename = strcat(Dir,'\',srcFiles(i).name);
    I = imread(filename);% filter image
    B(:,ptr) = imcolourhist(I, num_red_bins, num_green_bins, num_blue_bins); 
    ptr=ptr+1;                                                   
end

%normal histogram intersection
a = size(A,2); b = size(B,2); 
K = zeros(a, b);
for i = 1:a
  Va = repmat(A(:,i),1,b);
  K(i,:) = 0.5*sum(Va + B - abs(Va - B));
end


  sims=K;
  for i=1: 100 % number of relevant images for dir 1
     relevant_IDs(i) = i;
  end

 num_relevant_images = numel(relevant_IDs);

 [sorted_sims, locs] = sort(sims, 'descend');
 locations_final = arrayfun(@(x) find(locs == x, 1), relevant_IDs);
 locations_sorted = sort(locations_final);
 precision = (1:num_relevant_images) ./ locations_sorted;
 recall = (1:num_relevant_images) / num_relevant_images;
 % generate Avg precision
 avgprec=sum(precision)/num_relevant_images;% avg precision formula
 plot(avgprec, 'b.-');
 xlabel('Category ID');
 ylabel('Average Precision');
 title('Average Precision Plot');
 axis([0 10 0 1.05]);
end 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-14 17:56:51

是的这是正确的。您只需将所有的精度值加起来,并将它们平均起来。这就是平均精度的定义。

平均精度只是一个数字(通常是百分比),它为您提供了图像检索系统的总体性能。价值越高,性能越好。查准率-回忆图给你提供了更详细的系统表现,但平均精度是有用的,当你比较了很多图像检索系统在一起。不需要绘制许多PR图来尝试和比较许多检索系统的总体性能,您只需使用一个表将所有系统与指定每个系统性能的单个数字进行比较,即平均精度。

而且,绘制平均精度没有任何意义。当科学论文通常报道平均精度时,就没有图样了.只有一个价值!我能看到的唯一方法是,如果您有一个条形图,y-axis表示平均精度,而x-axis表示您要比较的检索系统。标杆越高,准确度就越好。然而,一个表格显示了所有不同的检索系统,每个检索系统的平均精度是非常合适的。这是通常在大多数CBIR研究论文中所做的。

为了解决你的另一个问题,你可以用平均精度来计算平均等级。计算所有正在测试的检索系统的平均精度,然后根据平均精度对它们进行排序。具有较高平均精度的系统将被排在更高的位置。

票数 2
EN

Stack Overflow用户

发布于 2014-10-15 07:20:40

这就是我们用来计算平均精度的方法。应该有一个随机的步骤,因为你可能会有问题,如果你给出离散分数的图像,如果你的地面真实图像在顶部的情况下联系。

代码语言:javascript
复制
function ap = computeAP(label, score, gt)
    rand_index = randperm(length(label));
    label2 = label(rand_index);
    score = score(rand_index);
    [~, sids] = sort(score, 'descend');
    label2 = label2(sids);
    ids = find(label2 == gt);
    ap = 0;
    for j = 1:length(ids)
        ap  = ap + j / (ids(j) * length(ids));
    end
    fprintf('%f \n', ap);
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26366545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档