retrieval_paris6k_4096

news/2024/11/29 9:36:56/

代码是使用matconvnet+R2018b

主要包括:

1、特征提取

2、计算map

3、检索:这里是使用官方提供的边界框,对查询图像进行裁剪,然后进行查询。 

addpath('helpers');
addpath('matlab');
run './matlab/vl_setupnn';gnd_paris6k = load('./groundtruth/gnd_paris6k.mat');
net = load('imagenet-vgg-verydeep-16.mat');fprintf("starting extracting database feature!\n");
vecs = zeros(4096,numel(gnd_paris6k.imlist));
for i = 1:numel(gnd_paris6k.imlist)nameImg = strcat('./datasets/paris6k/',gnd_paris6k.imlist{i},'.jpg');oriImg = imread(nameImg);image = single(oriImg);image = imresize(image, net.meta.normalization.imageSize(1:2)) ; image = image - net.meta.normalization.averageImage ;res = vl_simplenn(net,image);feat = res(34).x;vecs(:,i) = feat;if mod(i,100) == 0iend
endfprintf("extracting query image!\n");
qimlist = {gnd_paris6k.imlist{gnd_paris6k.qidx}};
qim = arrayfun(@(x) crop_qim(['./datasets/paris6k/',qimlist{x},'.jpg'],gnd_paris6k.gnd(x).bbx),1:numel(gnd_paris6k.qidx),'un',0);
qvecs = zeros(4096,numel(gnd_paris6k.qidx));
for i = 1:numel(gnd_paris6k.qidx)ori = strcat('./datasets/paris6k/',gnd_paris6k.imlist{gnd_paris6k.qidx(i)},'.jpg');Img = imread(ori);image = single(Img);image = imresize(image, net.meta.normalization.imageSize(1:2)); image = image - net.meta.normalization.averageImage;res = vl_simplenn(net,image);feat = res(34).x;qvecs(:,i) = feat;fprintf('Extracting Image %d ... \n', i);
endfprintf("Initial filtering...\n");
[sim,ranks] = sort(vecs'*qvecs,'descend');
map = compute_map(ranks,gnd_paris6k.gnd);
fprintf('mAP (4096), without re-ranking = %.4f\n', map);% rand均匀分布的随机数
query = floor(rand*numel(gnd_paris6k.qidx));
figure;
im_index = gnd_paris6k.qidx(query);
image = imread(strcat(['./datasets/paris6k/',gnd_paris6k.imlist{im_index},'.jpg']));
imshow(image);
bounding_box_tmp = gnd_paris6k.gnd(query).bbx;
bounding_box = zeros(1,4);
bounding_box(1) = bounding_box_tmp(1);
bounding_box(2) = bounding_box_tmp(2);
bounding_box(3) = bounding_box_tmp(3) - bounding_box_tmp(1);
bounding_box(4) = bounding_box_tmp(4) - bounding_box_tmp(2);
rectangle('Position',bounding_box,'EdgeColor','g','LineWidth',2);
title(strcat('query',string(query)));% 显示检索的结果
figure;
for i = 1:10[image,map] = imread(strcat('./datasets/paris6k/',gnd_paris6k.imlist{ranks(i,query)},'.jpg'));subplot(2,5,i), imshow(image,map);if ismember(ranks(i,query),gnd_paris6k.gnd(query).ok )rectangle('Position', [1 1 size(image,2)-1 size(image,1)-1] ,'EdgeColor','g','LineWidth',2);elseif ismember(ranks(i,query),gnd_paris6k.gnd(query).junk )rectangle('Position', [1 1 size(image,2)-1 size(image,1)-1] ,'EdgeColor','b','LineWidth',2);elserectangle('Position', [1 1 size(image,2)-1 size(image,1)-1] ,'EdgeColor','r','LineWidth',2);  end 
endsave('./datasets/features/paris6k.mat','vecs','qvecs');

 

 

 

绿色框表示是返回的ok和good图像,green是表示junk图像,剩下的就是不匹配图像

http://www.ppmy.cn/news/431051.html

相关文章

学起来,转行软件测试要学会些什么才能拿6K以上的工资?

“软件测试要学会什么才能拿6k以上的工资”这句话,其实揭露了2个显性需求,1个隐形需求(薪资怎么能更高),所以本文会分为3个部分 1. 测试拿6k以上薪资难不难? 2. 测试学什么技能才能拿到6k以上的薪资&#x…

Java入门——多态篇,6k字攻略。

目录 多态性 向上转型 方法重写 问题:父类方法使用 private ,子类方法使用 public 是否可以重写? 问题:能否重写 static 方法? 判断父类是否被覆写、子类是否重写父类方法 方法重写的返回值必须严格相同,向上转型类除外 …

魅族手机:通讯社交类应用今日使用已超时,请明日再用

今日不小心触碰到什么设置了,魅族手机上面微信、QQ都提示“通讯社交类应用今日使用已超时,请明日再用”,吓了我一跳,然后打售后电话问了下才知道原来是不小心弄到设置里面的“数字健康”控制了。 不要急,按照以下操作就可以解决问…

魅族系统应用卸载 adb卸载/禁用Android系统内置应用

1、手机通过USB连接电脑, 择选传输文件 2、手机端通过->设置->关于手机->版本号, 快速点击几次版本号处(Flyme 8.xx)开启开发者模式 3、手机端通过->设置->辅助功能->开发者选项->打开“USB 调试”接下来PC端按下WINR输入cmd并回车, 在cmd中输入以下命令进…

android魅族 小红点,魅族公布手机APP公约 小红点不能超过2个

大家在使用手机的时候,看到应用中的小红点是不是一定要把它点掉呢?实际上我们使用手机的时候很多操作都是毫无意义的,一些不合理的设置平白无故的浪费着我们宝贵的时间。 近年来伴随着安卓生态的发展,安卓手机软件在功能与体验上逐渐追上了i…

魅族android耗电量,魅族18/18 Pro续航、充电测试简报

为什么看不到战神魅族17por!我看到很多4g手机在排行里!故意黑魅族吗?K40 P续航没有上图高 掉电太快不是现在OTA了可以双开了。16S 尽量保持电量在20%~80% 一年半以后电池健康86% 咸鱼1300拜拜realme Q2 P,测到排名第一…

魅族m8 java_软件更丰富 魅族M8成功安装JAVA虚拟机

关键词:魅族 M8 WinCE Java 虚拟机 试用 魅族M8手机虽然是基于Windows CE6开发,但仍然拥有不错的软件支持性能,现在已有一些在M8上能够运行的软件和游戏程序公布。现在又有好消息,魅族M8可以安装JAVA虚拟机了,手机软件…

魅族16s Pro体验:精益求精的打磨升级款

作者 | 段嘉祺 出品 | 网易手机&数码《易评机》栏目组(油管&B站:惊奇科技 抖音:JQ163) 魅族16s Pro,2699元起的骁龙855Plus旗舰来了。似乎,嗅到了一丝真香的味道? 依然熟悉的设计 魅族1…