changing bin size
This commit is contained in:
parent
e5302730b7
commit
1393656203
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
dataset
|
dataset
|
||||||
descriptors
|
descriptors
|
||||||
|
*~
|
||||||
|
@ -1,156 +0,0 @@
|
|||||||
%% EEE3032 - Computer Vision and Pattern Recognition (ee3.cvpr)
|
|
||||||
%%
|
|
||||||
%% cvpr_visualsearch.m
|
|
||||||
%% Skeleton code provided as part of the coursework assessment
|
|
||||||
%%
|
|
||||||
%% This code will load in all descriptors pre-computed (by the
|
|
||||||
%% function cvpr_computedescriptors) from the images in the MSRCv2 dataset.
|
|
||||||
%%
|
|
||||||
%% It will pick a descriptor at random and compare all other descriptors to
|
|
||||||
%% it - by calling cvpr_compare. In doing so it will rank the images by
|
|
||||||
%% similarity to the randomly picked descriptor. Note that initially the
|
|
||||||
%% function cvpr_compare returns a random number - you need to code it
|
|
||||||
%% so that it returns the Euclidean distance or some other distance metric
|
|
||||||
%% between the two descriptors it is passed.
|
|
||||||
%%
|
|
||||||
%% (c) John Collomosse 2010 (J.Collomosse@surrey.ac.uk)
|
|
||||||
%% Centre for Vision Speech and Signal Processing (CVSSP)
|
|
||||||
%% University of Surrey, United Kingdom
|
|
||||||
|
|
||||||
close all;
|
|
||||||
clear all;
|
|
||||||
|
|
||||||
%% Edit the following line to the folder you unzipped the MSRCv2 dataset to
|
|
||||||
DATASET_FOLDER = 'dataset';
|
|
||||||
|
|
||||||
%% Folder that holds the results...
|
|
||||||
DESCRIPTOR_FOLDER = 'descriptors';
|
|
||||||
%% and within that folder, another folder to hold the descriptors
|
|
||||||
%% we are interested in working with
|
|
||||||
DESCRIPTOR_SUBFOLDER='globalRGBhisto';
|
|
||||||
|
|
||||||
|
|
||||||
%% 1) Load all the descriptors into "ALLFEAT"
|
|
||||||
%% each row of ALLFEAT is a descriptor (is an image)
|
|
||||||
|
|
||||||
ALLFEAT=[];
|
|
||||||
ALLFILES=cell(1,0);
|
|
||||||
ALLCATs=[];
|
|
||||||
ctr=1;
|
|
||||||
allfiles=dir (fullfile([DATASET_FOLDER,'/Images/*.bmp']));
|
|
||||||
for filenum=1:length(allfiles)
|
|
||||||
fname=allfiles(filenum).name;
|
|
||||||
|
|
||||||
%identify photo category for PR calculation
|
|
||||||
split_string = split(fname, '_');
|
|
||||||
ALLCATs(filenum) = str2double(split_string(1));
|
|
||||||
|
|
||||||
imgfname_full=([DATASET_FOLDER,'/Images/',fname]);
|
|
||||||
img=double(imread(imgfname_full))./255;
|
|
||||||
thesefeat=[];
|
|
||||||
featfile=[DESCRIPTOR_FOLDER,'/',DESCRIPTOR_SUBFOLDER,'/',fname(1:end-4),'.mat'];%replace .bmp with .mat
|
|
||||||
load(featfile,'F');
|
|
||||||
ALLFILES{ctr}=imgfname_full;
|
|
||||||
ALLFEAT=[ALLFEAT ; F];
|
|
||||||
ctr=ctr+1;
|
|
||||||
end
|
|
||||||
|
|
||||||
% get counts for each category for PR calculation
|
|
||||||
CAT_HIST = histogram(ALLCATs).Values;
|
|
||||||
|
|
||||||
%% 2) Pick an image at random to be the query
|
|
||||||
NIMG=size(ALLFEAT,1); % number of images in collection
|
|
||||||
queryimg=floor(rand()*NIMG); % index of a random image
|
|
||||||
|
|
||||||
|
|
||||||
%% 3) Compute the distance of image to the query
|
|
||||||
dst=[];
|
|
||||||
for i=1:NIMG
|
|
||||||
candidate=ALLFEAT(i,:);
|
|
||||||
query=ALLFEAT(queryimg,:);
|
|
||||||
|
|
||||||
category=ALLCATs(i);
|
|
||||||
|
|
||||||
%% COMPARE FUNCTION
|
|
||||||
thedst=compareEuclidean(query,candidate);
|
|
||||||
dst=[dst ; [thedst i category]];
|
|
||||||
end
|
|
||||||
dst=sortrows(dst,1); % sort the results
|
|
||||||
|
|
||||||
%% 3.5) Calculate PR
|
|
||||||
precision_values=zeros([1, NIMG]);
|
|
||||||
recall_values=zeros([1, NIMG]);
|
|
||||||
|
|
||||||
correct_at_n=zeros([1, NIMG]);
|
|
||||||
|
|
||||||
query_row = dst(1,:);
|
|
||||||
query_category = query_row(1,3);
|
|
||||||
for i=1:NIMG
|
|
||||||
|
|
||||||
rows = dst(1:i, :);
|
|
||||||
|
|
||||||
correct_results = 0;
|
|
||||||
incorrect_results = 0;
|
|
||||||
|
|
||||||
if i > 1
|
|
||||||
for n=1:i - 1
|
|
||||||
row = rows(n, :);
|
|
||||||
category = row(3);
|
|
||||||
|
|
||||||
if category == query_category
|
|
||||||
correct_results = correct_results + 1;
|
|
||||||
else
|
|
||||||
incorrect_results = incorrect_results + 1;
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
% LAST ROW
|
|
||||||
row = rows(i, :);
|
|
||||||
category = row(3);
|
|
||||||
|
|
||||||
if category == query_category
|
|
||||||
correct_results = correct_results + 1;
|
|
||||||
correct_at_n(i) = 1;
|
|
||||||
else
|
|
||||||
incorrect_results = incorrect_results + 1;
|
|
||||||
end
|
|
||||||
|
|
||||||
precision = correct_results / i;
|
|
||||||
recall = correct_results / CAT_HIST(1,query_category);
|
|
||||||
|
|
||||||
precision_values(i) = precision;
|
|
||||||
recall_values(i) = recall;
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
%% 3.6) calculate AP
|
|
||||||
for i = 1:NIMG
|
|
||||||
precision = precision_values(i);
|
|
||||||
i
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
%% 3.8) plot PR curve
|
|
||||||
% plot(recall_values, precision_values);
|
|
||||||
% title('PR Curve');
|
|
||||||
% xlabel('Recall');
|
|
||||||
% ylabel('Precision');
|
|
||||||
|
|
||||||
|
|
||||||
%% 4) Visualise the results
|
|
||||||
%% These may be a little hard to see using imgshow
|
|
||||||
%% If you have access, try using imshow(outdisplay) or imagesc(outdisplay)
|
|
||||||
|
|
||||||
SHOW=15; % Show top 15 results
|
|
||||||
dst=dst(1:SHOW,:);
|
|
||||||
outdisplay=[];
|
|
||||||
for i=1:size(dst,1)
|
|
||||||
img=imread(ALLFILES{dst(i,2)});
|
|
||||||
img=img(1:2:end,1:2:end,:); % make image a quarter size
|
|
||||||
img=img(1:81,:,:); % crop image to uniform size vertically (some MSVC images are different heights)
|
|
||||||
outdisplay=[outdisplay img];
|
|
||||||
end
|
|
||||||
imgshow(outdisplay);
|
|
||||||
axis off;
|
|
@ -1,42 +1,12 @@
|
|||||||
function F=extractGlobalColHist(img)
|
function F=extractGlobalColHist(img)
|
||||||
|
|
||||||
divs = 15;
|
divs = 4;
|
||||||
|
|
||||||
qimg = floor(img .* divs);
|
qimg = floor(img .* divs);
|
||||||
bin = qimg(:,:,1) * divs^2 + qimg(:,:,2) * divs^1 + qimg(:,:,3);
|
bin = qimg(:,:,1) * divs^2 + qimg(:,:,2) * divs^1 + qimg(:,:,3);
|
||||||
|
|
||||||
vals = reshape(bin, 1, size(bin, 1) * size(bin, 2));
|
vals = reshape(bin, 1, size(bin, 1) * size(bin, 2));
|
||||||
|
|
||||||
% dimensions = size(img);
|
|
||||||
%
|
|
||||||
% width = dimensions(2);
|
|
||||||
% height = dimensions(1);
|
|
||||||
%
|
|
||||||
% pixel_count = width * height;
|
|
||||||
%
|
|
||||||
% bin_values = zeros([1, pixel_count]);
|
|
||||||
% count = 1;
|
|
||||||
% for i = 1:length(img(:, 1, 1))
|
|
||||||
% for j = 1:length(img(1, :, 1))
|
|
||||||
% red = img(i, j, 1);
|
|
||||||
% green = img(i, j, 2);
|
|
||||||
% blue = img(i, j, 3);
|
|
||||||
%
|
|
||||||
% red_bin = floor(red*divs);
|
|
||||||
% green_bin = floor(green*divs);
|
|
||||||
% blue_bin = floor(blue*divs);
|
|
||||||
%
|
|
||||||
% bin_value = red_bin * (divs^2) + green_bin * (divs^1) + blue_bin;
|
|
||||||
%
|
|
||||||
% bin_values(count) = bin_value;
|
|
||||||
%
|
|
||||||
% count = count + 1;
|
|
||||||
% end
|
|
||||||
% end
|
|
||||||
|
|
||||||
% hist_values = histogram(bin_values, (divs^3 - 1)).Values ./ pixel_count;
|
|
||||||
% hist_values = histogram(bin_values, divs^3, 'Normalization', 'probability').Values;
|
|
||||||
|
|
||||||
hist_values = histogram(vals, divs^3, 'Normalization', 'probability').Values;
|
hist_values = histogram(vals, divs^3, 'Normalization', 'probability').Values;
|
||||||
|
|
||||||
F=hist_values;
|
F=hist_values;
|
||||||
|
Loading…
Reference in New Issue
Block a user